From 4d786a732bbff893d1ce6abf8b30c6d5fecf3588 Mon Sep 17 00:00:00 2001 From: Jerry Yu Date: Wed, 22 Feb 2023 11:01:07 +0800 Subject: [PATCH] Fix regression issue for clang workaround. Signed-off-by: Jerry Yu --- library/sha256.c | 17 +++++------------ library/sha512.c | 8 +++++--- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/library/sha256.c b/library/sha256.c index 8c2e6f9e07..d18f228487 100644 --- a/library/sha256.c +++ b/library/sha256.c @@ -29,24 +29,17 @@ * The intrinsic declaration are guarded with ACLE predefined macros in clang, * and those macros are only enabled with command line. Define the macros can * enable those declaration and avoid compile error on it. + * + * `arm_neon.h` might be included in any head files. On the top of this file, we + * can guarantee this workaround always work. */ #define __ARM_FEATURE_CRYPTO 1 -#pragma clang attribute push (__attribute__((target("crypto"))), apply_to=function) -#define MBEDTLS_POP_TARGET_PRAGMA +#define NEED_TARGET_OPTIONS #endif /* __aarch64__ && __clang__ && !__ARM_FEATURE_CRYPTO && __clang_major__ < 18 && __clang_major__ > 3 */ #include "common.h" -#if defined(MBEDTLS_POP_TARGET_PRAGMA) && \ - !(defined(MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT) || \ - defined(MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY)) -#if defined(__clang__) -#pragma clang attribute pop -#endif -#undef MBEDTLS_POP_TARGET_PRAGMA -#endif - #if defined(MBEDTLS_SHA256_C) || defined(MBEDTLS_SHA224_C) #include "mbedtls/sha256.h" @@ -61,7 +54,7 @@ # if defined(MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT) || \ defined(MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY) /* *INDENT-OFF* */ -# if !defined(__ARM_FEATURE_CRYPTO) +# if !defined(__ARM_FEATURE_CRYPTO) || defined(NEED_TARGET_OPTIONS) # if defined(__clang__) # if __clang_major__ < 4 # error "A more recent Clang is required for MBEDTLS_SHA256_USE_A64_CRYPTO_*" diff --git a/library/sha512.c b/library/sha512.c index 26b46318d3..919cf20410 100644 --- a/library/sha512.c +++ b/library/sha512.c @@ -30,10 +30,12 @@ * The intrinsic declaration are guarded with ACLE predefined macros in clang, * and those macros are only enabled with command line. Define the macros can * enable those declaration and avoid compile error on it. + * + * `arm_neon.h` might be included in any head files. On the top of this file, we + * can guarantee this workaround always work. */ #define __ARM_FEATURE_SHA512 1 -#pragma clang attribute push (__attribute__((target("crypto"))), apply_to=function) -#define MBEDTLS_POP_TARGET_PRAGMA +#define NEED_TARGET_OPTIONS #endif /* __aarch64__ && __clang__ && !__ARM_FEATURE_SHA512 && __clang_major__ < 18 && __clang_major__ >= 13 && __clang_minor__ > 0 && @@ -84,7 +86,7 @@ * Clang == 13.0.0 same as clang 12 (only seen on macOS) * Clang >= 13.0.1 has __ARM_FEATURE_SHA512 and intrinsics */ -# if !defined(__ARM_FEATURE_SHA512) +# if !defined(__ARM_FEATURE_SHA512) || defined(NEED_TARGET_OPTIONS) /* Test Clang first, as it defines __GNUC__ */ # if defined(__clang__) # if __clang_major__ < 7