BTX failure [Was: Re: pxeboot problems with BETA2]

John Baldwin jhb at FreeBSD.org
Wed Aug 17 19:49:46 GMT 2005


On Wednesday 17 August 2005 10:43 am, Emanuel Strobl wrote:
> Am Dienstag, 16. August 2005 19:52 CEST schrieb Brooks Davis:
> > On Tue, Aug 16, 2005 at 02:05:08PM +0200, Emanuel Strobl wrote:
> > > Hello,
> > >
> > > I just wanted to ask if somebody had success with providing pxe boot
> > > service under 6-BETA2.
> > > I have two clients, one NET4501 wich just reboots after fetching
> > > pxeldr via TFTP and a Laptop which just hangs when NFS-loading kernel.
> > >
> > > I'm about to investigate further, but maybe someone can confirm that
> > > in general PXE booting with BETA2 is working... Or not...
> >
> > I'm PXE booting systems with RELENG_6 as of 7/27.  I'll probably do an
> > update some time this week.
>
> Ok, I read som files and found -DBTX_SERIAL. This gives me the following
> dump before the box reboots:
> uilding the boot loader arguments
> Relocating the loader and the BTX
> Starting the BTX loader
>
> int=00000006  err=00000000  efl=00010202  eip=00023c21
> eax=00000000  ebx=000384e0  ecx=000384e0  edx=00000001
> esi=00001000  edi=00000029  ebp=00086770  esp=00086758
> cs=002b  ds=0033  es=0033    fs=0033  gs=0033  ss=0033
> cs:eip=0f 4f c2 a3 c8 7d 03 00-8d 41 0c c7 41 04 fd 44
>        ff 55 89 39 c6 44 39 ff-fe 83 c4 0c 5b 5e 5f 5d
> ss:esp=b4 7d 03 00 29 00 00 00-00 10 00 00 00 00 00 00
>        83 57 02 00 02 00 00 00-a0 67 08 00 98 1c 02 00
> BTX halted
>
> Any clue? Regarding cvsweb nothing changed recently, and I had net4501
> boxes pxebooting fine with FreeBSD 5.3.....

Hmm.  Int 6 is an invalid opcode exception:

00000000  0F4FC2            cmovg eax,edx
00000003  A3C87D0300        mov [0x37dc8],eax
00000008  8D410C            lea eax,[ecx+0xc]
0000000B  C74104FD44FF55    mov dword [ecx+0x4],0x55ff44fd
00000012  8939              mov [ecx],edi
00000014  C64439FFFE        mov byte [ecx+edi-0x1],0xfe
00000019  83C40C            add esp,byte +0xc
0000001C  5B                pop ebx
0000001D  5E                pop esi
0000001E  5F                pop edi
0000001F  5D                pop ebp

I'm guessing that there's been a stack overflow or some such.  Your eip is in 
the loader.  You can try using the loader.sym from your loader binary to look 
up that eip address.  In the loader here on my laptop it's in the write 
function:

% nm /usr/obj/usr/src/sys/boot/i386/loader/loader.sym | sort
...
00023b9c T readdirfd
00023c14 T write
00023d18 T lseek

If you want to be able to use gdb, then rebuild libstand with debugging (make 
DEBUG_FLAGS=-g) and rebuild all of /sys/boot with debugging (make 
DEBUG_FLAGS=-g).  You can then 
use /usr/obj/usr/src/sys/boot/i386/pxeldr/pxeboot for your pxeboot and you 
can run gdb on /usr/obj/usr/src/sys/boot/i386/loader/loader.sym and you can 
do listings of the addresses for eip, etc.

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-current mailing list