Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 Apr 2002 15:10:48 -0500 (CDT)
From:      Larry Rosenman <ler@lerctr.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/37610: XFree86-4 x86emu needs update for new BIOS's
Message-ID:  <200204302010.g3UKAm9F000814@lerlaptop.iadfw.net>

next in thread | raw e-mail | index | archive | help

>Number:         37610
>Category:       ports
>Synopsis:       XFree86-4 x86emu needs update for new BIOS's
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-ports
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Apr 30 13:20:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Larry Rosenman
>Release:        FreeBSD 4.5-STABLE i386
>Organization:
LERCTR Consulting
>Environment:
System: FreeBSD lerlaptop 4.5-STABLE FreeBSD 4.5-STABLE #24: Tue Apr 30 07:09:14 CDT 2002 ler@lerlaptop:/usr/obj/usr/src/sys/LERLAPTOP i386


>Description:
	
        With some of the newer chip sets BIOS's using extended X86 opcodes
	and addressing modes, the XFree86 4.2.0 x86emu needs enhancement. 

	Steve Woodford <scw@netbsd.org> made the following patch, which 
	fixes this issue.  

        can this be added to the XFree86-4-Server port as a patch to
        xc/extras/x86emu/src/x86emu/decode.c ? 
>How-To-Repeat:
run on a I830MG graphics system, see the X86 ILLEGAL OPCODE (see the 
-STABLE and -MOBILE lists from yesterday (April 29, 2002) for example
logs.  

This patch fixes THAT problem. 
>Fix:
Apply this patch to xc/extras/x86emu/src/x86emu/decode.c


--- decode.c.old	Sat Apr 27 12:04:29 2002
+++ decode.c	Sat Apr 27 13:56:06 2002
@@ -734,6 +734,10 @@
 {
 	unsigned offset;
 
+	if (M.x86.mode & SYSMODE_PREFIX_ADDR) {
+		u32* rp = decode_rm_long_register(rm);
+		return (*rp);
+	}
 	switch (rm) {
       case 0:
 		DECODE_PRINTF("[BX+SI]");
@@ -782,6 +786,10 @@
 	int rm)
 {
 	int displacement = (s8)fetch_byte_imm();
+	if (M.x86.mode & SYSMODE_PREFIX_ADDR) {
+		u32* rp = decode_rm_long_register(rm);
+		return (*rp + displacement);
+	}
 	switch (rm) {
       case 0:
 		DECODE_PRINTF2("%d[BX+SI]", displacement);
@@ -830,6 +838,10 @@
 	int rm)
 {
 	unsigned displacement = (u16)fetch_word_imm();
+	if (M.x86.mode & SYSMODE_PREFIX_ADDR) {
+		u32* rp = decode_rm_long_register(rm);
+		return (*rp + displacement);
+	}
 	switch (rm) {
       case 0:
 		DECODE_PRINTF2("%04x[BX+SI]", displacement);


>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ports" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200204302010.g3UKAm9F000814>