|
From: <sv...@va...> - 2011-10-31 15:30:44
|
Author: sewardj
Date: 2011-10-31 15:25:55 +0000 (Mon, 31 Oct 2011)
New Revision: 2230
Log:
Update comment in r2229 to place the blame in the right place.
Modified:
trunk/priv/guest_x86_helpers.c
Modified: trunk/priv/guest_x86_helpers.c
===================================================================
--- trunk/priv/guest_x86_helpers.c 2011-10-31 10:52:21 UTC (rev 2229)
+++ trunk/priv/guest_x86_helpers.c 2011-10-31 15:25:55 UTC (rev 2230)
@@ -1788,13 +1788,14 @@
/* Copy the x87 registers out of the image, into a temporary
Fpu_State struct. */
- /* 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.
- */
+ /* LLVM on Darwin turns the following loop into a movaps plus a
+ handful of scalar stores. This would work fine except for the
+ fact that VEX doesn't keep the stack correctly (16-) aligned for
+ the call, so it segfaults. Hence, split the loop into two
+ pieces (and pray LLVM doesn't merely glue them back together) so
+ it's composed only of scalar stores and so is alignment
+ insensitive. Of course this is a kludge of the lamest kind --
+ VEX should be fixed properly. */
/* 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;
|