割り込みハンドラ呼び出し時のカーネルスタックの状態 (2)
まだちょっとイメージできてない。その原因は
0771 call1: 0772 tst -(sp)
です。344p にある 0772 行の解説が以下。
0772: スタックポインタを、PS のコピーをすでに含んでいる位置を指すよう調整する。
Lions' Commentary on UNIX より引用
意味不明。現時点で把握できてる部分を控えつつなんとかしようとしてみます。が、スタックに何かが積まれる前提なソレを理解できてないのが痛いのかもしれません。
trap から順に確認
や、逆からの方が分かり易いのか。以下なナニが_マスクされた新しい PS_なのかな。
0781 mov 4(sp),-(sp) 0782 bic $!37,(sp)
ちなみに上記の部分がカーネルモードな場合のいっちゃん最後のスタック操作です。
0783 bit $30000,PS 0784 beq 1f (ry 0797 1: 0798 bis $30000,PS 0799 jsr pc,*(r0)+
以降は上記の通り、割り込みハンドラに飛んでいきます。
微妙な割り込みを入れてしまいましたが、巻き戻していきます。_前モードに対する古い SP_を push してるのが以下なのかな。
0780 mfpi sp
342p にも解説があるんですがこの命令が実際どんな副作用があるのか、はデバッガで見てみたいです。その前の命令が以下で
0779 mov r1,-(sp)
図 10.1 の記述ではl_古い r1_を push している模様。その直前なソレは以下。
0777 mov PS,-(sp)
でもこれは call1 からの流れでは通過しない。あ、それが以下なのか。
0772 tst -(sp)
成程、ここが上記で引用した 344p にある 0772 の記述になっているのか。なんとなくイメージできないんですが、これって
0762 jsr r0,call1; _trap
でスタックがどうなるか、がポイントなのかどうなのか。
このあたりは正に実機確認な部分なんすかね。明日は一応朝練の日なので確認の方向で、ということで今日は置く。