OS開発でバグ取りをするときの勘どころ
コンパイラの出力を疑う
コンパイラは優しいので最適化をしてくれます(涙目)
同じI/O Portを叩くようなビジーループを書くときは特に注意
そのシンボル解決、大丈夫?
別ファイルの関数や変数を参照したとき、そのシンボル解決を担うのはリンカです。
コンパイラとリンカはちゃんと協調してくれないことがあります(悲しい)
kernelのバイナリをディスアセンブルして正しいアドレスが設定されているか確認しましょう
保存するコンテキスト、合ってる?
保存するコンテキストを間違えると、二度と戻ってこれないよ♪
IDT, GDT
IDTやGDT関連でバグを踏んだときはSIDT, SGDT命令を使って登録したディスクリプタが正しいかダンプしてみましょう
C言語の型検査ガバガバすぎてヤバイ
C言語の型検査は信用してはならない
そのメモリ、使って大丈夫?
OS開発ではメモリの静的確保をよくするがデバイスによってそのメモリ領域が使っていいものかは異なる。
実機では動いてたのに、qemuでは動かないetc...