PDP-11インタプリタでUNIX V6のカーネルをビルドするまで
ldがあればstripがなくても問題ないみたいなので、いよいよ本丸のccを攻める。依存するコマンドが色々ある: /bin/as, /bin/ld, /lib/c0, /lib/c1, /lib/c2
2011-04-08 21:28:07forkを処理せず子プロセスのふりをして、execで親プロセスにロールバックするという小細工で、ccから他のプロセスを呼び出す過程を調べた。とりあえずc0とc1に渡す引数が知りたかったので。
2011-04-09 00:05:46オペランドのインデント・デクリメントで、SPは常に2バイト単位だった。movb r0, -(sp) でspを-1していたからスタックがめちゃくちゃになっていた。ここを直したらc1も動くようになった。残るはc2。
2011-04-09 02:29:39やったー、ついにインタプリタ上でccが動いた! http://7shi.net/v6/ Silverlightの外に出すのは簡単なはず。これでようやくsimhの外でもバイナリをいじる道が開けた。ちょっと改造するにもedと格闘して大変だったのが、ようやく・・・
2011-04-09 03:15:48C++で作り直し
execでメモリを初期化しなかったためbssにゴミが残ったのが誤動作の原因だった。そういえばexecでメモリを操作するところは前回Lions本勉強会で読んだ所だった。
2011-04-10 00:18:32一気にC++で書き直したからさすがに疲れた。 https://bitbucket.org/7shi/v6run コンビニで食事でも買って来よう・・・
2011-04-10 00:35:58lib1とlib2をオリジナルから持って来るとオリジナルと同じカーネルが作れるので、ccやasやldは正常で、asだけ問題があるようだ。さて・・・
2011-04-10 02:28:33arは動いたけど、/usr/sys/lib1と/usr/sys/lib2にはソースにないオブジェクトが含まれているみたいで、存在するソースだけでゼロから作ってもundefでカーネルが作れなかった。コメントアウトされているsysfixが怪しい。
2011-04-10 09:26:47lib2に含まれるcat.oとvs.oとvt.oのソースが見当たらない。これだけ退避させておけば、それ以外はゼロからビルドしていると考えても良いかな。
2011-04-10 09:38:55