qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] uvesafb doesn't work with seabios


From: Kevin O'Connor
Subject: Re: [Qemu-devel] uvesafb doesn't work with seabios
Date: Tue, 13 May 2014 11:41:15 -0400
User-agent: Mutt/1.5.23 (2014-03-12)

On Tue, May 13, 2014 at 11:20:11AM +0200, Bernhard Walle wrote:
> Am 2014-05-13 07:52, schrieb Bernhard Walle:
> >* Kevin O'Connor <address@hidden> [2014-05-12 22:07]:
> >>On Mon, May 12, 2014 at 08:53:53PM +0200, Bernhard Walle wrote:
> >>> Am 2014-05-12 07:29, schrieb Kevin O'Connor:
> >>> >
> >>> >It does look like the x86emu issue.  You can try applying the
> >>> >SeaVGABIOS patch below to confirm it.
> >>>
> >>> The output doesn't appear. But I'm sure that I copied the correct files
> >>> because modifications of other strings worked.
> >>
> >>Heh - old versions of x86emu apparently don't support "rep outsb"
> >>either.  Can you test the patch below instead?
> >
> >Okay, the output appears. So that means that I should update
> >v86d (the x86emu lib included there is okay?)?
> 
> I already have the latest version of x86d from
> https://github.com/mjanusz/v86d/commits/master.

Thanks for running further tests.

Unfortunately, I don't know enough about v86d or x86emu to really help
here.  I do know that the version of x86emu that ships with Xorg was
updated several years back and no longer has trouble with the leal
instruction.

As background, the root of the problem is that SeaVGABIOS is compiled
with gcc, and gcc can emit the "leal" instruction.  The old "lgpl VGA
BIOS" uses a really old compiler (bcc) which doesn't emit that x86
instruction.  The x86emu code does not properly emulate "leal" (as
near as I can tell it treats it as a "leaw" instead), which leads to
all sorts of bizarre behavior when it tries to interpret the code.
This type of issue has occurred for a bunch of instructions (on both
x86emu and on an emulator Windows uses) and we've worked around it in
SeaVGABIOS with a combination of gcc compiler flags and by post
processing gcc's assembler to remove some troublesome instructions.
Unfortunately, I don't know of any way to convince gcc to not emit the
"leal" instruction and the instruction appears too complex to readily
patch out of the assembler.

So, my advice would be to either avoid x86emu (eg, maybe by trying the
vm86 mode of v86d, or maybe by not using uvesafb), try compiling v86d
with a newer version of x86emu, or stick with the "lgpl VGA BIOS".

-Kevin



reply via email to

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