floating point exception when Windows NT 4 guest uses its cirrus driver
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
QEMU |
Fix Released
|
Low
|
Unassigned | ||
qemu-kvm (Ubuntu) |
Fix Released
|
Medium
|
Unassigned |
Bug Description
Binary package hint: qemu-kvm
The emulation for the Cirrus Logic adapter in QEMU seems to be broken; when Windows NT 4 tries to test the display using the "cirrus compatible display adapter" driver, QEMU dies with the error "Floating point exception."
Ubuntu Version: 9.10
qemu-kvm version: 0.11.0-0ubuntu6.3
KVM: not installed
Guest OS: Windows NT 4.0 SP1
QEMU command line: qemu -m 96 -soundhw all -net nic -net user -localtime -cdrom WindowsNT4.iso nt_ii.hdd
Steps to reproduce:
1. Start to install Windows NT in QEMU.
2. Proceed until Setup shows the Display properties dialog; confirm that Windows has detected a "cirrus compatible display adapter".
3. Click the "Test" button.
Expected behavior: NT displays a test pattern, allows confirmation of display properties, and finishes setup installation
Actual behavior: QEMU closes; the terminal output is "Floating point exception"
ProblemType: Bug
Architecture: i386
Date: Wed Dec 23 18:59:50 2009
DistroRelease: Ubuntu 9.10
InstallationMedia: Kubuntu 9.10 "Karmic Koala" - Release i386 (20091028.5)
KvmCmdLine: Error: command ['ps', '-C', 'kvm', '-F'] failed with exit code 1: UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
MachineType: Gateway 510 2900626
NonfreeKernelMo
Package: qemu-kvm 0.11.0-0ubuntu6.3
ProcCmdLine: BOOT_IMAGE=
ProcEnviron:
LANG=en_US.UTF-8
SHELL=/bin/bash
ProcVersionSign
SourcePackage: qemu-kvm
Uname: Linux 2.6.31-16-generic i686
XsessionErrors:
(polkit-
(xfce4-
(<unknown>:2333): Gdk-CRITICAL **: gdk_window_
(<unknown>:2333): Gdk-CRITICAL **: gdk_window_
dmi.bios.date: 04/22/2004
dmi.bios.vendor: Intel Corp.
dmi.bios.version: BF86510A.
dmi.board.name: D865PELC
dmi.board.vendor: Intel Corporation
dmi.board.version: AAC66359-401
dmi.chassis.
dmi.chassis.type: 3
dmi.chassis.vendor: Gateway
dmi.chassis.
dmi.modalias: dmi:bvnIntelCor
dmi.product.name: 510 2900626
dmi.product.
dmi.sys.vendor: Gateway
Changed in qemu: | |
status: | New → Confirmed |
importance: | Undecided → Low |
Changed in qemu-kvm (Ubuntu): | |
status: | Incomplete → Fix Released |
Changed in qemu: | |
status: | Confirmed → Fix Released |
I am also facing this problem. :-(
I used gdb to trace it down. In hw/cirrus_vga.c the exception is hit in cirrus_do_copy:
Program received signal SIGFPE, Arithmetic exception. portage/ app-emulation/ qemu-kvm- 0.12.1. 2/work/ qemu-kvm- 0.12.1. 2/hw/cirrus_ vga.c:687 cirrus_ blt_srcpitch) ) / depth; blt_srcpitch
[Switching to Thread 0xb7dbeb90 (LWP 31952)]
0x080aaa85 in cirrus_do_copy (s=0x87474d4, dst=480000, src=0, w=2, h=9)
at /var/tmp/
687 sx = (src % ABS(s->
(gdb) print s->cirrus_
$1 = 0
(gdb) print s->vga.gr[0x26]
$16 = 0 '\000'
(gdb) print s->vga.gr[0x27]
$17 = 0 '\000'
Perhaps the registers are not properly initialized. I #defined DEBUG_BITBLT and got the following output:
rop=0x0e mode=0x00 modeext=0x00 w=2 h=9 dpitch=1 spitch=0 daddr=0x00075300 saddr=0x00000000 writemask=0x00
There is only one line of output, so it seems to be the first BLITBLT operation, that failes. This really could be a bad initial register value. Unfortunately, I have no knowledge on the cirrus chip, so I cannot fix this problem.
I hope, someone else can figure out a way to fix this.
73, Mario