OSメモ(1)

wiki.osdev.org

64bitOSが作りたいなぁと思っています。(30日OS自作本やったので) 手始めに、上記のサイトをやっていく。できれば毎日やりたい。 "まともに動く"を目標にやっていきたいかも。

x86_64-elf-gcc -ffreestanding -mcmodel=large -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -c foo.c -o foo.o

フリースタンディング環境は、OSなしでプログラムを実行しなければいけない環境を指すCおよびC++の用語である

なるほど。

コードもデータも制限されません。コードもデータもアクセスは絶対アドレス指定を使用しなければなりません。

http://www2.kobe-u.ac.jp/~lerl2/l_cc_p_10.1.008/doc/main_cls/mergedProjects/copts_cls/common_options/option_mcmodel.htm

デフォだと、コードの大きさが 2GiB に制限されてしまうみたい。コードもデータもアクセスは絶対アクセスは絶対アドレス指定をしなければならなければならないらしい。smallだと命令ポインタ(IP)からの相対アドレスで指定しなければならないらしい。もうわからないが笑 とりあえず、放置しとく。

Do not use a so called red zone for x86-64 code

https://www.cleancss.com/explain-command/gcc/5723

red zoneってのがあるらしい。そこを使わせないようにするのが -mno-red-zone。-m はマシン依存オプションを表しているみたいだ。

http://koturn.hatenablog.com/entry/2016/07/18/090000

sse, mmx あたりが書いてある。SIMD命令周りのレジスタ、命令を無効化するオプションらしい

-mcmodel=largeは非効率なので、非推奨だけど、とっかかりとしてはいいみたい。osdevに書いてある。