ウォンツテック

そでやまのーと

リンカスクリプトを使ったことによる不整合が。。
文字列リテラルを以下のように使った場合

 char *str = "hogehoge";

コンパイラはこの"hogehoge"を.rodataに置きリンクする時に先頭からの相対アドレスでこの文字列を参照しにいく。しかし先頭にはbootacient, bootmiddleのセクタ数分があり、これは0x90000に配置され、それ以降が0x1000に配置されるので0x1000以降のコードが参照するアドレスにずれが生じる。
よくよく考えたらブートローダカーネルを同じメモリマップ上で制御する事は無理かも。。何しろブートローダがメモリの位置を勝手に変えてるんだから(0x7c00→0x90000→0x1000)これを一つのリンカスクリプトでやろうとしたら最低でも0x1000〜0x90XXXの領域が要る事になって明らかに無駄な領域が出来る。
どうしよう。。やっぱbootacientとbootmiddleをbootloaderとしてリンクしてkernelはkernelでリンク後にcatするしか無いのか。。