i386/96430: boot2 is unable to load kernel directly

Bruce Evans bde at zeta.org.au
Fri Apr 28 19:49:22 UTC 2006


On Thu, 27 Apr 2006, Yuichiro Goto wrote:

>> Description:
> Loading a kernel directly using boot2 causes the invalid-opcode fault like the
> following:
>
> int=00000006  err=00000000  efl=00010002  eip=c0445a90
> eax=c0445a90  ebx=0007cd0f  ecx=c0b5e1a7  edx=a030001e
> esi=c0b5e1a7  edi=c0445a90  ebp=00000002  esp=0009eb84
> cs=0008  ds=0010  es=0010    fs=0010  gs=0010  ss=0010
> cs:eip=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
> ss:esp=69 95 00 00 00 00 00 80-1e 00 30 a0 00 00 00 00
>       00 00 00 00 00 00 00 00-60 dd 00 00 36 42 00 00
> BTX halted
>
> I tried to load a kernel directly that is a slightly modified
> version of GENERIC.  ...

>> How-To-Repeat:
> Directly load a kernel using boot2.
>> Fix:
> load() in src/sys/boot/i386/boot2/boot2.c tries to copy kernel segments at a
> phisical address on memory whose most significant 2 bits are set.  This is
> because of changes between rev 1.70 and 1.71 of
> src/sys/boot/i386/boot2/boot2.c.

I reported this to the author of the bug a few months ago.

I use an old 2-stage-only boot loader that is missing this bug, but
still the GENERIC kernel doesn't load - the load hangs with no message.
Loading of smaller kernels (size ~= 3MB) with boot2 still works with
both my old boot loader and the FreeBSD-6.0 boot2 with rev.1.71 backed
out.

Bruce


More information about the freebsd-i386 mailing list