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@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..