23 May 2015

atton

64bit 対応の xv6 を読む

swetland/xv6 が 64bit 対応しているようなので gdb で追おうとしました。

しかし 16 -> 32 -> 64 と mode を変える関係で architecture の値が変わってしまって素直に追えない問題が。 具体的には gdb で attach して b main して continue しても止まりません。

解決法として、gdb を2つ使って

  • make qemu-nox-gdb
  • 1つ目の gdb (set architecture i8086) で attach
  • 1つ目の gdb で 32bit の最後の ljmp まで進める
  • 2つ目の gdb(set architecture i386:x86-64) を起動。まだ attach できない
  • 1つ目の gdb を continue 。 architecture が違うのでこれ以上は追えないから閉じる
  • 2つ目の gdb が 64bit mode で attach される
  • 2つ目の gdb は b main するときちんと止まる

とすると追えました。

詳細は ブログ にまとめました。



blog comments powered by Disqus