Lions' 本読み (31)
追記せずにエントリ起こします。u.u_ar0 について。
再度 xref 確認してみました。exec で使われてるじゃん、て思ったらこれはシステムコールなので trap 経由してこの手続きに制御が渡ってくるはず。なので u.u_ar0 は例のカーネルスタックなナニ (344p の図 10.1) は有効なはず。
参照してる手続きを以下に列挙してみます。
- trap
- exec
- rexit
- wait
- fork
- getswit
- gtime
- stime
- setuid
- getuid
- setgid
- getgid
- getpid
- nice
- ssig
- kill
- clock
- psig
- ptrace
- procxmt
- rdwr
- open1
- seek
- sslep
- fstat
- dup
- ufalloc
- pipe
- sgtty
ていずれもシステムコールっぽいです。ので、u.u_ar0 はセットされてるはず。どうもやっぱ sleep から psig に jmp する場合ってスルーされる気がしてるんですがどうなんだろ。
ちなみに手元にあるピアソンの詳解 UNIX プログラミングの 10.4 節に以下な記述があるんですが
UNIX の (バージョン 7 のような) 初期のバージョンでは、シグナルには信頼性がなかった。シグナルは生起するがプロセスには伝えられない場合がある。つまり、シグナルを紛失する場合があったのである。
これを指しているのかどうなのか。とりあえず先に進みます。