OpenBSD-portsのmtoolsを4.0.47に上げるパッチをcommitしたら、一週間もしないうちにmtools-4.0.48がリリースされました。これを受けて、portsの対応作業も済ませています。
OpenWatcomはLinux(i686)向けのバイナリを吐くことができたりしますが、Linux distro標準のコンパイラとライブラリを使っていないのに何故バイナリが動くのかと気になってしまったので調べています。結局のところ、システムコールを呼び出しているから、ということになるのでしょうか。
…だとするなら、BSD系でも似たようなことができるのかなって。
まずはELF形式の実行ファイルを処理できるかどうか雑に調べてみると、
- FreeBSD
- ELFヘッダのOS/ABIが9(FreeBSD)であること
- NetBSD
- .note.netbsd.identセクションにNetBSDのシグネチャがあること(ELFヘッダのOS/ABIはチェックしていない)
- OpenBSD
- .note.openbsd.identセクションにOpenBSDのシグネチャがあること(ELFヘッダのOS/ABIはチェックしていない)
- DragonFlyBSD
- ELFヘッダのOS/ABIも.note.tagセクションのチェックもしていないようだ
となっているようなので、この先の可能性を探るとしたらFreeBSDを使うのが良さそうです(NetBSDの場合は.note.netbsd.identセクションを作成するようwlinkを直さないといけないし、DragonFlyBSDはそもそも32bit非対応、OpenBSDは…まあいいや)。
こういうの、なんか試してみたいなーとは思ってしまうのですが実際にやるのはかなり大変なので、今のところは手を出さずに放っておくつもりです。FreeBSD Developer's HandbookのChapter 11. x86 Assembly Language Programmingとか、見ているだけでアセンブラからシステムコールを叩いてHello, world!してみたくなるんですけどね。56.1kg(23:15)