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 なレジスタの中身が見れんな。