VBE, int10 yeilds 0000:f8da: 00 ILLEGAL EXTENDED X86 OPCODE

Curtis Villamizar curtis at occnc.com
Tue May 19 11:05:02 PDT 2009


Apparently I'm having trouble with int10.  I'm running xorg-1.6.1,1 on
FreeBSD-7.2 using xorg-7.4.

        Driver      "openchrome"
        VendorName  "VIA Technologies, Inc."
        BoardName   "CN896/VN896/P4M900 [Chrome 9 HC]"

This works fine with the "via" driver in xorg-6.9, which is now
obsolete.  It sort of works with xorg-7.2 with the "vesa" driver but
insists on 1024x768 when the real resolution is 1280x768.  With
xorg-7.4 I get:

0000:f8da: 00 ILLEGAL EXTENDED X86 OPCODE!

Here is what I've found out so far.  I really would appreciate some
help in taking this further.

The openchrome driver falls back to VBE which puts this in the vesa
driver.

(WW) CHROME(0): Panel on K8M800, PM800, VM800, P4M890, K8M890, CX700
or P4M900 is currently not supported.
(WW) CHROME(0): Using VBE to set modes to work around this.
(II) Loading sub module "int10"
(II) LoadModule: "int10"
(II) Reloading /usr/local/lib/xorg/modules//libint10.so
(II) CHROME(0): initializing int10
(II) CHROME(0): Primary V_BIOS segment is: 0xc000
(II) CHROME(0): VESA BIOS detected
(II) CHROME(0): VESA VBE Version 3.0
(II) CHROME(0): VESA VBE Total Mem: 32768 kB
(II) CHROME(0): VESA VBE OEM: VIA N3364

(II) CHROME(0): VESA VBE OEM Software Rev: 1.0
(II) CHROME(0): VESA VBE OEM Vendor: 
(II) CHROME(0): VESA VBE OEM Product: 
(II) CHROME(0): VESA VBE OEM Product Rev: 
(II) CHROME(0): Searching for matching VESA mode(s):

[...]

(II) CHROME(0): Not using mode "1920x1200" (height too large for
virtual size)
(II) CHROME(0): Monitor[0]: Using hsync range of 30.00-62.00 kHz
(II) CHROME(0): Monitor[0]: Using vrefresh range of 43.00-60.00 Hz
(II) CHROME(0): Attempting to use 60Hz refresh for mode "1024x768"
(118)
0000:f8da: 00 ILLEGAL EXTENDED X86 OPCODE!

I stuck in an "abort()" to get a core dump.

(gdb) where
#0  0x285eae67 in kill () from /lib/libc.so.7
#1  0x285072f7 in raise () from /lib/libthr.so.3
#2  0x285e99da in abort () from /lib/libc.so.7
#3  0x2884608b in x86emuOp2_illegal_op ()
   from /usr/local/lib/xorg/modules//libint10.so
#4  0x28831f03 in x86emuOp_two_byte ()
   from /usr/local/lib/xorg/modules//libint10.so
#5  0x28843af3 in X86EMU_exec () from
/usr/local/lib/xorg/modules//libint10.so
#6  0x2882ffd5 in xf86ExecX86int10 ()
   from /usr/local/lib/xorg/modules//libint10.so
#7  0x2884b38b in VBEGetPixelClock ()
   from /usr/local/lib/xorg/modules//libvbe.so
#8  0x2884d146 in VBESetModeParameters ()
   from /usr/local/lib/xorg/modules//libvbe.so
#9  0x286c730b in ViaVbeModePreInit ()
   from /usr/local/lib/xorg/modules/drivers//openchrome_drv.so
#10 0x286bce76 in VIAPreInit ()
   from /usr/local/lib/xorg/modules/drivers//openchrome_drv.so
#11 0x080a6816 in InitOutput ()
#12 0x0806bd8b in main ()

I also added debug with --enable-debug (with the abort still in the
code since it is after the trace is done).  This adds a little
information, but not much.

(II) CHROME(0): Not using mode "1920x1200" (height too large for
virtual size)
xf86ValidateModes(0x2870e800, 0x0, 0x2870a320, 0x0,
                  0x0, 0, 2048, 1, 0, 2048, 1280, 768, 131072, 0x1)
(II) CHROME(0): Monitor[0]: Using hsync range of 30.00-62.00 kHz
(II) CHROME(0): Monitor[0]: Using vrefresh range of 43.00-60.00 Hz
xf86CheckModeForMonitor(0x28740060 1024x768, 0x2873b300 Monitor[0])
xf86CheckModeForMonitor(0x287401a0 1024x768, 0x2873b300 Monitor[0])
xf86CheckModeForMonitor(0x287402e0 1024x768, 0x2873b300 Monitor[0])
xf86CheckModeForMonitor(0x28740420 1024x768, 0x2873b300 Monitor[0])
(II) CHROME(0): Attempting to use 60Hz refresh for mode "1024x768"
(118)
0000:f8da: 00 ILLEGAL EXTENDED X86 OPCODE!
halt_sys: file ./../x86emu/ops2.c, line 66
halted
Setting clock 65.00MHz, closest is 0.00MHz
xf86CheckModeForMonitor(0x2873f8e0 800x600, 0x2873b300 Monitor[0])
xf86CheckModeForMonitor(0x2873fa20 800x600, 0x2873b300 Monitor[0])
xf86CheckModeForMonitor(0x2873fb60 800x600, 0x2873b300 Monitor[0])
xf86CheckModeForMonitor(0x2873fca0 800x600, 0x2873b300 Monitor[0])
xf86CheckModeForMonitor(0x2873fde0 800x600, 0x2873b300 Monitor[0])
(II) CHROME(0): Attempting to use 60Hz refresh for mode "800x600"
(115)

In the config there is a modeline which seems to be completely
ignored:

  Modeline      "1280x768" 77.37 1280 1344 1480 1680 768 769 772 794

That modeline came from the vendor (HP) config for xorg-6.9 (came
loaded with SLED10) so the modeline is likely to be useable (which is
more than I can say for HP's idea of a SLED distribution).

Any help is appreciated.  If there is some workaround to avoid
VBEGetPixelClock or force the result to the 77.37 value, please let me
know.  I fix would be nice, but I'd settle for a workaround.

Without the abort, the code marches on and hangs.  A SIGQUIT gets me:

(gdb) where
#0  0x28837d57 in store_data_byte ()
   from /usr/local/lib/xorg/modules//libint10.so
#1  0x28863fdc in x86emuOp_add_byte_RM_R ()
   from /usr/local/lib/xorg/modules//libint10.so
#2  0x288388e3 in X86EMU_exec () from
/usr/local/lib/xorg/modules//libint10.so
#3  0x28830f35 in xf86ExecX86int10 ()
   from /usr/local/lib/xorg/modules//libint10.so
#4  0x2886a38b in VBEGetPixelClock ()
   from /usr/local/lib/xorg/modules//libvbe.so
#5  0x2886c146 in VBESetModeParameters ()
   from /usr/local/lib/xorg/modules//libvbe.so
#6  0x286ca30b in ViaVbeModePreInit ()
   from /usr/local/lib/xorg/modules/drivers//openchrome_drv.so
#7  0x286bfe76 in VIAPreInit ()
   from /usr/local/lib/xorg/modules/drivers//openchrome_drv.so
#8  0x080a6a16 in InitOutput ()
#9  0x0806bdeb in main ()

But for some reason a different mode is picked this time:

(II) CHROME(0): Not using mode "1920x1200" (height too large for virtual size)
xf86ValidateModes(0x2870e800, 0x0, 0x2870a320, 0x0,
                  0x0, 0, 2048, 1, 0, 2048, 1280, 768, 131072, 0x1)
(II) CHROME(0): Monitor[0]: Using hsync range of 30.00-62.00 kHz
(II) CHROME(0): Monitor[0]: Using vrefresh range of 43.00-60.00 Hz
xf86CheckModeForMonitor(0x28740060 1024x768, 0x2873b300 Monitor[0])
xf86CheckModeForMonitor(0x287401a0 1024x768, 0x2873b300 Monitor[0])
xf86CheckModeForMonitor(0x287402e0 1024x768, 0x2873b300 Monitor[0])
xf86CheckModeForMonitor(0x28740420 1024x768, 0x2873b300 Monitor[0])
(II) CHROME(0): Attempting to use 60Hz refresh for mode "1024x768" (118)

What other information would be helpful in debugging this?

TIA,

Curtis



More information about the xorg mailing list