test/utils.c: Make the stack unaligned only on 32 bit Windows
authorSøren Sandmann <ssp@redhat.com>
Sat, 16 Nov 2013 23:57:01 +0000 (18:57 -0500)
committerMatt Turner <mattst88@gmail.com>
Mon, 18 Nov 2013 01:44:51 +0000 (17:44 -0800)
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

test/utils.c

index 281f6b4e2266ed2c8caa910366d7f3b3ce0f47d5..ebe0ccc09e9bbba2a9b66d9a89c82c244118dfeb 100644 (file)
@@ -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"