xv6-rev6 読み (4)
アタマの部分をてきとーに流しながら諸々確認してみるか。なんとなく確認入れなきゃ、なナニはもっと違う部分なんですが、なんとなくページング云々でヒッカカッてるあたり超微妙。
ちなみに不思議なことに (?) list コマンドをタタいてみると main.c の main 手続きなナニが出力されますね。
とりあえず
順に si していくと ljmp なナニで以下な出力。
(gdb) si [ 0:7c2c] => 0x7c2c: ljmp $0x8,$0x7c31 0x00007c2c in ?? () (gdb) si The target architecture is assumed to be i386 => 0x7c31: mov $0x10,%ax 0x00007c31 in ?? () (gdb)
ここが protected mode に突入した瞬間です。で、以下が bootmain を呼び出した瞬間かな。
(gdb) si => 0x7c43: mov $0x7c00,%esp 0x00007c43 in ?? () (gdb) si => 0x7c48: call 0x7d36 0x00007c48 in ?? () (gdb) si => 0x7d36: push %ebp 0x00007d36 in ?? () (gdb)
アドレスも整合してます。ここで elf なナニを読み込んで云々なのか。ここは
// Call the entry point from the ELF header. // Does not return! entry = (void(*)(void))(elf->entry); entry(); 7dbe: ff 15 18 00 01 00 call *0x10018
な 0x7dbe に breakpoint をナニしてみます。
(gdb) b *0x7dbe Breakpoint 2 at 0x7dbe (gdb) c Continuing. => 0x7dbe: call *0x10018 Breakpoint 2, 0x00007dbe in ?? () (gdb)
を、止まった。でも elf ってシンボルは参照不可能。
(gdb) p elf No symbol "elf" in current context. (gdb)
むむ。スルーで si したら kernel.asm な記述の以下な部分に jmp した模様。
# Entering xv6 on boot processor, with paging off. .globl entry entry: # Turn on page size extension for 4Mbyte pages movl %cr4, %eax 8010000c: 0f 20 e0 mov %cr4,%eax
ええと gdb な出力が以下ッス。
(gdb) si => 0x10000c: mov %cr4,%eax 0x0010000c in ?? () (gdb)
あ、*.asm なナニは va なのですね。ここで paging が on になって云々なんですが、今日はここで限界かも。明日この続きを云々するのであれば 0x7dbe で止めて、なのか。
あら?
cr なレジスタの中身が見れんな。