|
From: <sv...@va...> - 2011-10-31 10:57:05
|
Author: sewardj
Date: 2011-10-31 10:52:21 +0000 (Mon, 31 Oct 2011)
New Revision: 2229
Log:
x86g_dirtyhelper_FXRSTOR: work around what looks like a LLVM bug,
that causes this routine to segfault on x86-darwin.
Modified:
trunk/priv/guest_x86_helpers.c
Modified: trunk/priv/guest_x86_helpers.c
===================================================================
--- trunk/priv/guest_x86_helpers.c 2011-10-27 10:58:38 UTC (rev 2228)
+++ trunk/priv/guest_x86_helpers.c 2011-10-31 10:52:21 UTC (rev 2229)
@@ -1787,7 +1787,19 @@
/* Copy the x87 registers out of the image, into a temporary
Fpu_State struct. */
- for (i = 0; i < 14; i++) tmp.env[i] = 0;
+
+ /* Defeat LLVM's memset-idiom recognition mechanism. It
+ appears to turn this into a misaligned movaps, which faults.
+ This is with Xcode 4.1 (Build version 4B110), on x86-darwin,
+ i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1
+ (Based on Apple Inc. build 5658) (LLVM build 2335.15.00),
+ OSX 10.7.1.
+ */
+ /* Code that seems to trigger the problem:
+ for (i = 0; i < 14; i++) tmp.env[i] = 0; */
+ for (i = 0; i < 7; i++) tmp.env[i+0] = 0;
+ for (i = 0; i < 7; i++) tmp.env[i+7] = 0;
+
for (i = 0; i < 80; i++) tmp.reg[i] = 0;
/* fill in tmp.reg[0..7] */
for (stno = 0; stno < 8; stno++) {
|