-EIPが9094を指しているということはBTX関連だと考えられます。objdumpを使ってbtx.oを逆アセンブルしてみると次のようになりました。
int=0000000d err=00000038 efl=00010046 eip=00009094
eax=00000011 ebx=00002820 ecx=00000038 edx=000008ee
esi=24009601 edi=00025f98 ebp=40000892 esp=fedfbe3a
cs=0008 ds=0000 es=0000 fs=0000 gs=0000 ss=0010
cs:ip=0f 00 d9 ba 00 a0 00 00-36 0f b7 05 13 04 00 00
c1 e0 0a 2d 00 10 00 00-29 d0 b1 33 51 50 68 02
ss:esp=ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff
BTX halted
0000008c <init.8>:これに該当するのは/usr/src/sys/boot/i386/btx/btx/btx.Sの次の辺りです。
8c: 31 c9 xor %ecx,%ecx
8e: b1 10 mov $0x10,%cl
90: 8e d1 mov %ecx,%ss
92: b1 38 mov $0x38,%cl
94: 0f 00 d9 ltr %cx
97: ba 00 a0 00 00 mov $0xa000,%edx
9c: 36 0f b7 05 13 04 00 movzwl %ss:0x413,%eax
a3: 00
a4: c1 e0 0a shl $0xa,%eax
a7: 2d 00 10 00 00 sub $0x1000,%eax
init.8: xorl %ecx,%ecx # Zeroobjdumpで表示されている94番地以降のバイト列が、レジスタダンプにおけるCS:IPの表示と一致しているので、おそらくここが問題の箇所でしょう。「ltr %cx」でGPF(int=0d)が発生したということになると思います。
movb $SEL_SDATA,%cl # To 32-bit
movw %cx,%ss # stack
/*
* Launch user task.
*/
movb $SEL_TSS,%cl # Set task
ltr %cx # register
movl $MEM_USR,%edx # User base address
movzwl %ss:BDA_MEM,%eax # Get free memory
shll $0xa,%eax # To bytes
subl $ARGSPACE,%eax # Less arg space
この辺りのコードにバグがあるとは思えないし、ここを通過しないとプロテクトモードに遷移できないのでFreeBSD/i386が立ち上がらないということになってしまいます。
問題解決に向けて少し前進した気がしますが、まだまだ解決には遠い感じです。
0 件のコメント:
コメントを投稿