From: Thomas Pornin Date: Mon, 17 Apr 2017 13:36:06 +0000 (+0000) Subject: Workaround for compiler bug (GCC 4.8 and 4.9 when targetting 32-bit x86). X-Git-Tag: v0.5~19 X-Git-Url: https://bearssl.org/gitweb//home/git/?p=BearSSL;a=commitdiff_plain;h=d021b7eb7fada2acbe16b1b56f6e2cbdf8eee362;ds=inline Workaround for compiler bug (GCC 4.8 and 4.9 when targetting 32-bit x86). --- diff --git a/src/hash/ghash_pclmul.c b/src/hash/ghash_pclmul.c index 7ec9823..7c8f2fa 100644 --- a/src/hash/ghash_pclmul.c +++ b/src/hash/ghash_pclmul.c @@ -35,13 +35,11 @@ #if BR_AES_X86NI_GCC_OLD #pragma GCC push_options #pragma GCC target("sse2,ssse3,pclmul") +#pragma GCC diagnostic ignored "-Wpsabi" #endif #include #include #include -#if BR_AES_X86NI_GCC_OLD -#pragma GCC pop_options -#endif #endif #if BR_AES_X86NI_MSC @@ -349,6 +347,10 @@ br_ghash_pclmul_get(void) return pclmul_supported() ? &br_ghash_pclmul : 0; } +#if BR_AES_X86NI_GCC && BR_AES_X86NI_GCC_OLD +#pragma GCC pop_options +#endif + #else /* see bearssl_hash.h */ diff --git a/src/inner.h b/src/inner.h index 3cafa42..3830c7c 100644 --- a/src/inner.h +++ b/src/inner.h @@ -157,10 +157,12 @@ * GCC versions from 4.4 to 4.8 (inclusive) must use a special #pragma * to activate extra opcodes before including the relevant intrinsic * headers. But these don't work with Clang (which does not need them - * either). + * either). We also need that #pragma for GCC 4.9 in order to work + * around a compiler bug (it tends to blow up on ghash_pclmul code + * otherwise). */ #if BR_AES_X86NI_GCC && !defined BR_AES_X86NI_GCC_OLD -#if __GNUC__ == 4 && __GNUC_MINOR__ >= 4 && __GNUC_MINOR__ <= 8 && !__clang__ +#if __GNUC__ == 4 && __GNUC_MINOR__ >= 4 && __GNUC_MINOR__ <= 9 && !__clang__ #define BR_AES_X86NI_GCC_OLD 1 #endif #endif