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++) { |