core dump

UNIXではプログラム実行で異常があったり、core image(実行中のメモリイメージ)取得プログラムが実行された場合に、coreという名前のメモリイメージファイルが生成される。
NetBSD等では、ptraceシステムコールを使いcore imageを取得する。Solarisでは、procfs経由でイメージを取得。AIXではgencoreコール(bosコール?)でこれを取得する。
ところがだ、某氏が内部でsignal使ってcore image吐かせているのだろうと主張する。確かにptraceはシステムコールであり、UNIXシステムコール=割り込みとなるのだが、signalのようなものではない。割り込み=signalと勘違いしていないか?SIGSEGV, SIGBUS, SIGQUITのデフォルトハンドラと混同していないか?
ということで、AIX, Solarisでtrussを利用し、gencore, gcoreを呼び出しどういったシステムコールが行われているか目の前で見せる。が、なかなか理解を示してくれない…
旧来のprocfsのなかったUNIXではデバッガを実装するためにptraceシステムコールがどんどん拡張され、プロセスのアタッチ、デタッチなんかもできるようになってきていた。core imageの操作、CPU依存部分のレジスタ等の操作も押し込まれ非常に複雑怪奇なmmapやらiocntlと同様なUNIXのダークサイド。これがなければデバッガの実装は実際不可ともいえるもの。
で、いろいろ話していて話はうやむや。さて、明日にでもNetBSDのソースで関連する部分でも全部追ってみて、ぐうの音も出ないほど説明してみるか?NetBSDがあうとならSolaris10ですかねぇ…