よくある質問(FAQ)

【カバレッジマスターゼネラル】スタック領域がオーバーフローしました。

シミュレーションエラーの回避策について

質問

【カバレッジマスターゼネラル 固有】
シミュレーション実行中に 下記のエラーが発生しました。ステップ実行して実行状態を調査していると、ある箇所でスタック領域 (0x00100000~0x00110003) の上限よりも上のアドレスまでスタックを使用して、オーバーフローしている事が分かりました。「カバレッジマスターゼネラル」でスタック領域を拡張するにはどうすれば良いですか?

Invalid address found [code = 18] (pc=xxxxxxxx)
%SYSTEMG-E-SEM, stopped simulation (status code = 12h)
`MEM::xxxxxxxx'

回答

スタートアップコマンドファイル (SS_STARTUP.txt)にコマンド/マクロを追加することで、スタックエリアを拡張する事が可能です。スタートアップコマンドファイルに下記のコマンド/マクロを追加して下さい。なお、拡張したスタック領域を「ポインタ割り当て設定」で使用している場合は、「ポインタ割り当て設定」のエリアを重複しないアドレスに変更してください。
 
例)スタックエリアを64Kから128Kに拡張する場合
;=========================================
;  スタックポインタ(SP)を拡大します
;=========================================
assign 0x100000#0x20000  ; スタックエリアを拡大(拡張する領域で変更)
macro set_sp
 set reg sp=0x11fff0  ; スタックポインタの初期値を設定(拡張する領域で変更)
mend
set do/exe = 0x40000058 set_sp

上記のスタック領域拡大後のメモリマップは 下記の通りです。
0x00100000~0x0011fff3  スタック
0x0011fff4~0x00FFFFFF  空き(カバレッジマスターのポインタ割り当てエリアとして利用可能)
0x01000000~0x3FFFFFFF 変数領域(デフォルトのsbrkでは、ヒープはここ)
0x40000000~0xFFFFFFFF プログラム領域

※参考情報
「カバレッジマスターゼネラル」のデフォルトメモリマップについて 詳細はこちら