よくある質問(FAQ)

初期設定終了アドレスのオフセットは何を意味するのでしょうか?

設定について

質問

初期設定終了アドレスにmain+0x0を設定した場合、main関数の先頭アドレスにプログラムカウンタが到達した時点で、テスト対象関数の先頭アドレスにジャンプすると認識していますが、テスト対象関数実行後、制御の戻り先は決まっているのでしょうか?また、このオフセット値0x0は何を意味するのでしょうか?

回答

テスト対象関数の実行完了後、プログラムの制御は「テスト設定」ビューの「初期設定終了アドレス」で指定したアドレスに戻ります。通常は main+0x0(main関数の先頭番地)を指定し、そこへ制御を戻す初期設定で問題ありません。

ただし、カバレッジマスターwinAMSは「スタックポインタ(SP)」と「実行アドレス」の両方が初期状態に戻ったことを検知して、テスト完了と判断します。コンパイラの最適化やコード展開により、main関数の先頭にスタックポインタを操作する命令が含まれている場合、制御が戻った直後にその命令が再実行され、スタックポインタが不整合となりテストが終了しなくなる(ハングアップする)ことがあります。
このようなケースでは、main 関数の先頭から数バイトのオフセット(例:main+0x4 など)を「初期設定終了アドレス」に指定し、スタックポインタ操作命令を回避して制御を戻す必要があります。

オフセット値の要否および適切な値は、コンパイラが出力するコードに依存します。判断が困難な場合は、main関数先頭付近のアセンブラ展開情報(デバッガを起動し、ソース上で右クリック→「混在表示」の画面キャプチャ)を添えて、弊社サポート窓口 までお問い合わせください。