On Thu, Mar 15, 2012 at 10:39 PM, Julian Pidancet julian.pidancet@gmail.com wrote:
On Fri, Mar 9, 2012 at 2:08 AM, Guillem Jover guillem@hadrons.org wrote:
On Fri, 2012-03-09 at 00:02:55 +0000, Julian Pidancet wrote:
Some instructions are not emulated correctly by x86emu when they are prefixed by the 0x66 opcode. I've identified problems in the emulation of these intructions: ret, enter, leave, iret and some forms of call.
Most of the time, the problem is that these instructions should push or pop 32-bit values to/from the stack, instead of 16bit, when they are prefixed by the 0x66 special opcode.
The SeaBIOS project aims to produce a complete legacy BIOS implementation as well as a VGA option ROM, entirely written in C and using the GCC compiler.
In 16bit code produced by the GCC compiler, the 0x66 prefix is used almost everywhere. This patch is necessary to allow the SeaBIOS VGA option ROM to function with Xorg when using the vesa driver.
v2: - Decrement BP instead of EBP in accordance with the Intel Manual - Assign EIP instead of IP when poping the return address from the stack in 32-bit operand size mode in ret_far_IMM, ret_far, and iret - When poping EFLAGS from the stack in iret in 32-bit operand size mode, apply some mask to preserve Read-only flags.
Signed-off-by: Julian Pidancet julian.pidancet@gmail.com
Looks good to me:
Reviewed-by: Guillem Jover guillem@hadrons.org
thanks, guillem
Anyone interested in this ? Is there a maintainer for x86emu ? The MAINTAINERS file in xorg-docs doesn't mention anything about it.
CCed: Adam Jackson
Adam, you seem to be the maintainer of the xorg vesa driver. I think this patch is closely related. Would you mind taking a look at it ?
Thanks,