OSECPUでの関数呼び出し
テーマ4
- 関数呼び出しのネストをちゃんと管理しないと、デバッグ時に苦労する。さてどうしたものか・・・。
- やっぱり普通にCALL命令やRET命令を整備すべきなんだろうなあ・・・。
- これを避けるために不必要に複雑になってもよくないしなあ(OSECPUではなおさら)。
- longjmpにも配慮する必要がありそう。
- いや待て、関数にはスタックフレームがあるはずだ(スタックフレームを持たないような小さい関数は気にしない)。
- スタックフレーム用のポインタレジスタを決めてしまって、それへの代入命令をもって関数のネストを管理したらどうだろうか?
- スタックフレームの設定し忘れなどに対処するために、コードのこの範囲にいるときにはこのスタックフレームが有効、みたいなマークがある。これに逆らってスタックフレームにアクセスした場合は、スタックフレーム設定バグ検出エラーだ。
- スタックフレーム用レジスタへの代入がある度にこれを記憶していく。
- 既知の値に戻ったときは、その状態にまで巻き戻す。これでOK。
- これならCALLやRET命令を作る必要はないし、longjmpへの特別な配慮も不要。我ながら名案。
こめんと欄
- このページにこめんと欄はありません。このページの内容にコメントしたいときはimpressionsにお願いします。