* HariMainは嫌だ! -(by [[K]], 2006.03.24) -発展課題のページ(全部読む前にここを読むのは混乱するのでおすすめじゃないです) -自作OSを作り始めているんだけど、C言語の実行開始関数がHariMainという名前は嫌だという人のためのページです。 *** 仕組み -直すのは簡単です。そもそもHariMainという関数がC言語の実行開始関数になっている理由は、haribote.rulを使うからです。 -そのharibote.rulの中身 format: /* このセクションでリンクの方針を記述 */ code(align:1, logic:0x24, file:0x24); data(align:4, logic:stack_end, file:code_end); file: /* このセクションでコマンドラインに書ききれなかった .objファイル、.libファイルを記載 */ /* なお、このセクションはフルパスで書いてもよい。 */ /* 例: c:/osask/gg00libc.lib; */ ../z_tools/haribote/harilibc.lib; ../z_tools/haribote/golibc.lib; label: /* 必ずリンクしなければいけないラベルを指定 */ /* エントリポイントを指定すればいいと思ってください */ _HariStartup; /* 上記3セクションの順序は入れ替えてはいけません! */ -ポイントはlabel:セクションで_HariStartupを指定しているところです。この関数はharilibc.libの中に入っていて、 omake/tolsrc/hrblib0a/startup.c にソースがあります。 void HariMain(void); void HariStartup(void) { /* 将来HariMainの実行に先立って何かしたくなったら、ここに書き足す */ HariMain(); /* 将来HariMainの終了後に何か処理をさせたくなったら、ここに書き足す */ return; } -こうなっています。つまり、_HariStartupが指定されているから、HariMainが最初に実行されることになっていたんです。 *** 直し方 -1.HariStartupを書き換えて、MyOsMainを呼ぶようにする。 --でもこれだとHariStartupという名前が内部的に残るのでかっこ悪い。 -2.label:のところを_MyOsMainに書き換えたものを作り、それをmyos.rulとして保存して、自作OSのリンクの際にはこれを指定する。 --これが一番かっこいいと思います。もちろん_MyOsStartup&MyOsMainのあわせ技でもいいです。 -注意:_mainという指定はできません。無理にやってみてもいいですが、cc1がいろいろ余計なことをやろうとして、うまくいかなくなるのです。 * こめんと欄 -___mainという空の関数を用意したら_mainが使えました。 -- 名無しさん SIZE(10){2009-04-11 (土) 11:46:27} -おお、おめでとうございます! -- [[K]] SIZE(10){2009-04-12 (日) 02:44:01} #comment SVvOF2 <a href="http://qefhhyenidnu.com/">qefhhyenidnu</a>, [url=http://iwagrqooulpb.com/]iwagrqooulpb[/url], [link=http://vfheisgvabwu.com/]vfheisgvabwu[/link], http://xghbfmneibin.com/