* 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/

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS