summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann <ssp@redhat.com>2013-11-16 18:57:01 -0500
committerMatt Turner <mattst88@gmail.com>2013-11-17 17:45:56 -0800
commit97a655d5cafc07e9185155c885b2d4564986ef85 (patch)
treeae4b566a33df9cb0a741af68992bafc39c586da8
parent5a313af74e9afe7524909c019daebfded3bef1fa (diff)
test/utils.c: Make the stack unaligned only on 32 bit Windows
The call_test_function() contains some assembly that deliberately causes the stack to be aligned to 32 bits rather than 128 bits on x86-32. The intention is to catch bugs that surface when pixman is called from code that only uses a 32 bit alignment. However, recent versions of GCC apparently make the assumption (either accidentally or deliberately) that that the incoming stack is aligned to 128 bits, where older versions only seemed to make this assumption when compiling with -msse2. This causes the vector code in the PRNG to now segfault when called from call_test_function() on x86-32. This patch fixes that by only making the stack unaligned on 32 bit Windows, where it would definitely be incorrect for GCC to assume that the incoming stack is aligned to 128 bits. V2: Put "defined(...)" around __GNUC__ Reviewed-and-Tested-by: Matt Turner <mattst88@gmail.com> Bugzilla: https://bugs.gentoo.org/show_bug.cgi?id=491110 (cherry picked from commit f473fd1e7553a4e92a0d72bea360f05d005c9a88)
-rw-r--r--test/utils.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/test/utils.c b/test/utils.c
index 281f6b4..ebe0ccc 100644
--- a/test/utils.c
+++ b/test/utils.c
@@ -648,7 +648,7 @@ call_test_function (uint32_t (*test_function)(int testnum, int verbose),
{
uint32_t retval;
-#if defined (__GNUC__) && (defined (__i386) || defined (__i386__))
+#if defined (__GNUC__) && defined (_WIN32) && (defined (__i386) || defined (__i386__))
__asm__ (
/* Deliberately avoid aligning the stack to 16 bytes */
"pushl %1\n\t"