qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [Bug 1668041] [NEW] x86 Floating point exceptions - incorre


From: Nadav Har'El
Subject: [Qemu-devel] [Bug 1668041] [NEW] x86 Floating point exceptions - incorrect support?
Date: Sun, 26 Feb 2017 11:23:49 -0000

Public bug reported:

It seems that qemu does not correctly emulate the x86 support for
optionally causing a floating-point exception (#FP) when, for example,
dividing by zero. Reports such as:

https://github.com/cloudius-systems/osv/issues/855
http://stackoverflow.com/questions/15134189/qemu-div-by-zero-mxcsr-register

suggest that setting the exception mask in the fpu cw or mxcsr (e.g.,
using a function like feenableexcept() in the guest OS) does not
generate floating point exceptions on divide by zero. The problem only
happens on pure QEMU - when a QEMU/KVM combination is used, the actual
hardware does the floating point work, and does throw the exception on
divide by zero if so requested.

Looking at the qemu (2.8.0) source code, it seems to me it really lacks
support for generating fpu exceptions: For example, helper_fdiv() in
target-i386/fpu_helper.c, when it notices the divisor is zero, seems to
set the divide-by-zero exception bit, but doesn't seem to check whether
it needs to trigger an exception (when the right bits on the x87 or SSE
control words are enabled).

** Affects: qemu
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1668041

Title:
  x86 Floating point exceptions - incorrect support?

Status in QEMU:
  New

Bug description:
  It seems that qemu does not correctly emulate the x86 support for
  optionally causing a floating-point exception (#FP) when, for example,
  dividing by zero. Reports such as:

  https://github.com/cloudius-systems/osv/issues/855
  http://stackoverflow.com/questions/15134189/qemu-div-by-zero-mxcsr-register

  suggest that setting the exception mask in the fpu cw or mxcsr (e.g.,
  using a function like feenableexcept() in the guest OS) does not
  generate floating point exceptions on divide by zero. The problem only
  happens on pure QEMU - when a QEMU/KVM combination is used, the actual
  hardware does the floating point work, and does throw the exception on
  divide by zero if so requested.

  Looking at the qemu (2.8.0) source code, it seems to me it really
  lacks support for generating fpu exceptions: For example,
  helper_fdiv() in target-i386/fpu_helper.c, when it notices the divisor
  is zero, seems to set the divide-by-zero exception bit, but doesn't
  seem to check whether it needs to trigger an exception (when the right
  bits on the x87 or SSE control words are enabled).

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1668041/+subscriptions



reply via email to

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