去年までは3系を読んでいたんですけどね。writeのsystem call番号は何番とかやるわけですが、
* なんか、1って表に書いてある
おいおいおいおいおい。4だろ? 4だよね。変えたらbinary互換性ないからなぁ。なので、ソースに1と書いてあるけど、4に違いない。
それもで、どうも、
* 超複雑なCのマクロでそうなってる
らしいです。このsystem callのマクロは、trapから直接jumpしてくる関数なので普通のCとは違う扱いが必要とかだったのですが...
* static とかの複数のstubの生成も同時やるらしい
なので、マクロの行数が100行以上ある。
僕的には、
* Cのマクロがソフトウェア技術的には終わっていて使わない方向
だと思うんですけどね。
Linux kernelな人たちが複雑なマクロを gcc -E とかでデバッグしていると思うと、ちょっと冷たい笑いぐらいは浮かびますね。
システムコールの番号は、BSDは昔から表からCのコードを生成する方式だったはず。Linuxは、ちょっと前までは、
* アセンブラのテーブル直書き
だったはずです。
Linux kernel は「コンパイラの最適化を切ると動かない」らしく、
* もはや、ソースコードデバッグはしてない
んじゃないかなぁ。
そういえば、Haskellの方も「いったいどうやってデバッグしているのか」の情報が皆無なんだよな。コンパイラはUnit testするようにできてないみたいだし。
No comments:
Post a Comment