qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] *BSD kernel crash at boot in qemu with seabios 1.7.4 (b


From: Xin Li
Subject: Re: [Qemu-devel] *BSD kernel crash at boot in qemu with seabios 1.7.4 (bisected)
Date: Tue, 11 Feb 2014 14:34:57 -0800

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

On 2/6/14, 4:44 AM, Michael Tokarev wrote:
> [Changing subject to reflect reality]
> 
> I don't really understand what it is all about, as I initially
> said. But I've been told on freebsd IRC channels to post the issue
> to freebsd-emulation list, which I'm Cc'ing now, and if noone
> there answers, also to John Baldwin <address@hidden>.
> 
> To bring some context back, here are a few pointers:
> 
> http://bugs.debian.org/737142 -- talking about pc-bsd, but it
> appears that the prob affects other BSD kernels too 
> http://thread.gmane.org/gmane.comp.emulators.qemu/254074 -- this
> thread 
> http://lists.gnu.org/archive/html/qemu-stable/2013-03/msg00037.html
> - a weird issue with freebsd reported last december
> 
> If it's a bug in *BSD kernels, maybe someone there will be glad to
> fix it.  And maybe together we can come out with a more elegant
> solution to this issue, or maybe to confirm (or deny) that the
> proposed patch is a right thing to do.

Yes it does look like a bug in FreeBSD kernel.  Is there a PR already
or should I create one and assign to myself?  I will try to fix this
when I have some free cycles.

I assume this also happens when running FreeBSD under qemu on FreeBSD,
right?

Cheers,

> Thanks,
> 
> /mjt
> 
> 06.02.2014 08:04, Kevin O'Connor wrote:
>> On Wed, Feb 05, 2014 at 12:44:06PM -0500, Kevin O'Connor wrote:
>>> 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:
>> [...]
>>> 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
>>
>>> 
[...]
>>> (*) 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..
>> 
>> I have put together some assember to try and run-time test for
>> known broken versions of x86emu.  This patch to SeaVGABIOS does
>> seem to catch the freebsd issue and in my tests it convinces
>> freebsd to take a different approach.  The patch is a bit ugly
>> though.
>> 
>> Comments welcome. -Kevin
>> 
>> 
>> commit e3caa553e940efb6184b30a5637134c4aa9f8b65 Author: Kevin
>> O'Connor <address@hidden> Date:   Wed Feb 5 22:47:29 2014
>> -0500
>> 
>> vgabios: Attempt to detect old x86emu and force a fault.
>> 
>> Check for cases where the leal instruction does not work.  This 
>> instruction is known to not be emulated properly on old versions
>> of x86emu.  If a broken version of x86emu is found, force a fault
>> that x86emu will easily detect.  This should help prevent soft
>> failures when running old software.
>> 
>> Signed-off-by: Kevin O'Connor <address@hidden>
>> 
>> diff --git a/vgasrc/vgaentry.S b/vgasrc/vgaentry.S index
>> 9854448..e246e7c 100644 --- a/vgasrc/vgaentry.S +++
>> b/vgasrc/vgaentry.S @@ -45,9 +45,27 @@ _rom_header_signature: *
>> Entry points 
>> ****************************************************************/
>>
>>  -        // This macro is the same as ENTRY_ARG except the
>> "calll" -        // instruction is avoided to work around known
>> issues in the -        // emulation of some versions of x86emu. +
>> // Force a fault if found to be running on broken x86emu
>> versions. +        DECLFUNC x86emu_fault +x86emu_fault: +
>> int $0x03 +1:      hlt +        jmp 1b + +        // This macro
>> implements a call while avoiding instructions +        // that
>> old versions of x86emu have problems with. +        .macro
>> VGA_CALLL cfunc +        // Make sure leal instruction works. +
>> movl $0x8000, %ecx +        leal (%ecx, %ecx, 1), %ecx +
>> cmpl $0x10000, %ecx +        jne x86emu_fault +        // Use
>> callw instead of calll +        push %ax +        callw \cfunc +
>> .endm + +        // This macro is the same as ENTRY_ARG except
>> VGA_CALLL is used. .macro ENTRY_ARG_VGA cfunc cli cld @@ -57,7
>> +75,7 @@ _rom_header_signature: movl %esp, %ebx         // Backup
>> %esp, then zero high bits movzwl %sp, %esp movl %esp, %eax
>> // First arg is pointer to struct bregs -        pushw %ax ;
>> callw \cfunc +        VGA_CALLL \cfunc movl %ebx, %esp         //
>> Restore %esp (including high bits) POPBREGS .endm @@ -103,7
>> +121,7 @@ entry_10_extrastack: movw %ds, %dx           // Setup
>> %ss/%esp and call function movw %dx, %ss movl %eax, %esp -
>> pushw %ax ; callw handle_10 +        VGA_CALLL handle_10
>> 
>> movl %esp, %eax         // Restore registers and return movw
>> BREGS_size+4(%eax), %ss
>> 
> 
> _______________________________________________ 
> address@hidden mailing list 
> http://lists.freebsd.org/mailman/listinfo/freebsd-emulation To
> unsubscribe, send any mail to
> "address@hidden"
> 

-----BEGIN PGP SIGNATURE-----

iQIcBAEBCgAGBQJS+qWRAAoJEJW2GBstM+nsz3sP/AsGiEPWzHAbQP5nYR9alDiL
dmMd8RB4yVYLmJJXCxLldMjNw3kuHRcZ8IrvCaxsFvUHnzdQudmqCc6uxgcWdC3Y
gqSYP2/dnG5OXsUqmRHW0yKpfrBlbOA/utRDZz9MzTx4m7sudY8y8ZEUmb2OyJOZ
CjQrW5OyHIXUxzdKMlcpiAy5+edQVWk5TBdyz6h0WVrk4A9uuAjOw/DYse05lGVF
l1d/Eto+Wui38fMTjfdVJqVcPrfy859aODf/vRkmznujd0Zumr/8OMXmEsF+Q+iv
ktRNWab39DXIArMsYbCGr7Xg7Q0ZjZB0eAjB8zxW1a0p/7V4Spf9QQu9wNHVi4sf
DOwiaU2K+2/zz/BYIyicyZN+glQMLcq+t3u8uagm6GOcHMx1ZsyFeyIhj8Gbtjfl
VUPOVZfu25dogr5GY2U68tPHoiQStsSvdSg4+jaDYK5AZcs1BGZ5i5ncArjATV1Z
KIe3ISOzu20BMhjAXHALnTNMFuBWD6+Va6ExVHWkWuz445aQ0REx3hJDqWbm7iVd
DTD2N6Bs/uL7P3aVODgz8EqQ6EMhswFYgqSirMb9w38FCLnJ56aAA31kFU00U28p
OG8kzgc3dY0II1vVfNLhrJ5kGNDOKxZ62KsXbLHPdBl3cgKweqghd53WTjU/dSo6
0NVfAqheJ3ifZ0I0yB3d
=jTIz
-----END PGP SIGNATURE-----



reply via email to

[Prev in Thread] Current Thread [Next in Thread]