2006-12-01から1ヶ月間の記事一覧

バックトレースの実装

Cのプログラムでバックトレースを表示したい場合,Linux(glibc)にはbacktrace(3),Solarisにはprintstack(3)なんてライブラリ関数が用意されているので,それらを使えばいい.なければsetjmp(3)やgetcontext(3)を使って,自力でスタックをたどることになる.…

-277

binary - よりポータブルな無限ループという記事があったので,Plan9で試してみた.コンパイル通ったと思ったら,ファイルは空で,実行できなかった. cpu% cat infinite.c int main=-277; cpu% 8c infinite.c cpu% 8l infinite.8 cpu% 8.out 8.out: '/bin/8…

ブレークポイントの実装

ブレークポイントは,デバッギ(デバッグ対象)からデバッガへ処理を遷移させるための仕掛けである.基本的な動作の流れを書くと,まず,止めたい命令をメモリ上に保存しておいて,ブレークポイント命令(x86ならばINT 3)に置き換える.デバッギを実行すると,…

デバッガ上で実行されているか調べる(Plan9の場合)

Plan9では,UNIXのシグナルに相当するノート(note)って仕組みがある.基本的な考えはシグナル同じだけど,シグナル番号はなくて,文字列で識別する.分散環境を考えたら,結局文字列が一番ポータブルだったということか*1.ノートに対するハンドラは,atnoti…

v9fs

Linuxでもカーネル2.6.14からv9fs(9P2000ファイルシステム)がメインラインにマージされている.使い方は簡単.ベル研のソースコードリポジトリをmountするときは,こんな感じ. # modprobe 9p2000 # # mkdir /n/sources # mount -t 9P -o proto=tcp 204.178.…

アセンブリでHello, world!

ELF Golfなるものが一部で流行っているらしいが,Plan9でやったら8.out Golfになるのかな? libcを使わずシステムコール呼出しを書いたら,id:yupo5656さんにトラックバックしてもらったので,続きということで,アセンブリで書いてみる.コードは次に示すが…

rc (sh) magic

ファイルが"#!"で始まっていると,カーネルはそのファイルを(シェル)スクリプトだと判断して,"#!"に続くプログラムを起動して,そのファイルを実行する.というのが,UNIXのスクリプト起動の仕掛けだが,Plan9でもそこは同じである. さて,シェルスクリプ…

IWP9

先日,マドリードで開催されたInternational Workshop on Plan9の論文が公開されている.リストアップするとこんな感じ. Experience Teaching an Inferno Course Shifs A simple way to transform and build dynamic file servers Invited talk: Dis on a C…