[SeaBIOS] PC-BSD installer does not boot with 1.7.4 (bisected)

Kevin O'Connor kevin at koconnor.net
Wed Feb 5 18:44:06 CET 2014


On Tue, Feb 04, 2014 at 04:33:19PM +0400, Michael Tokarev wrote:
> We have a bugreport in debian, http://bugs.debian.org/737142,
> stating that PC-BSD does not work with seabios-1.7.4 anymore.
> 
> I digged in, and found out that it fails only with -vga std
> (cirrus works fine).  So I bisected the issue - only changing
> vgabios-stdvga.bin, and found this:
> 
> 9332f9b172dd59253365a83b5f1c0e40c5f6f66d is the first bad commit
> commit 9332f9b172dd59253365a83b5f1c0e40c5f6f66d
> Author: Kevin O'Connor <kevin at koconnor.net>
> Date:   Sat Nov 30 12:52:44 2013 -0500
> 
>     vgabios: Work around lack of support for "calll" in x86emu emulation.

Thanks.  I've downloaded the image and I've looked into the crash.

This seems to be similar to the freebsd problem reported last year -
see:
http://lists.gnu.org/archive/html/qemu-stable/2013-03/msg00037.html

I haven't downloaded the freebsd kernel this time, but I have tried
multiple seavgabios binaries and here is what I think is occurring:

1 - The freebsd kernel seems to be trying to emulate the vgabios to
make vesa calls.  Its emulator is buggy.

2 - Prior to the SeaBIOS 9332f9b1 commit, the freebsd x86 emulator
seems to go "off the deep end" quickly and it is generally caught by
the kernel and the boot proceeds.

3 - After SeaBIOS 9332f9b1, the freebsd x86 emulator gets further
along in its x86 emulation and then goes "off the deep end" in a way
it doesn't catch.  The boot then fails.

With trivial changes to the vgabios, I can see freebsd fail (eg, loop
infinitely) even prior to SeaBIOS 9332f9b1.  With trivial changes to
the vgabios after 9332f9b1, I can get freebsd to loop infinitely
instead of trap, or even sometimes catch itself and proceed with the
boot.

Anyway, this seems to be a freebsd issue, and I think it requires
someone with knowledge of the freebsd internals and the freebsd
develop/compile/test cycle.

I don't see a good way to address this issue in SeaBIOS (*).

-Kevin


(*) The best I can think of is to try and construct some hand crafted
assembler that can catch buggy x86emu emulators and force a failure..



More information about the SeaBIOS mailing list