Friday 25 December 2015

Linux kernel 4.4

去年までは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: