Fix aarch64 build with GCC GCC does not have __has_feature, so writing #if __has_feature(foo), without a guard, will cause GCC to error. This is tripping the gRPC update. Prior to https://boringssl-review.googlesource.com/c/boringssl/+/60765, this worked because the preamble to every assembly file would define the missing __has_feature macro as part of detecting MSan. Now we pick up the logic in <openssl/base.h>, which tries not to stomp over symbols we don't own. This had the side effect of removing the __has_feature polyfill. Though "public", <openssl/asm_base.h> is not really a public header, so we could put the __has_feature polyfill in there. But we already have a pattern for detecting sanitizers in <openssl/target.h>, so just switch to that one. Change-Id: I747b4513f1b2f189d2df629149f22fd0fa490257 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/61565 Commit-Queue: Adam Langley <agl@google.com> Auto-Submit: David Benjamin <davidben@google.com> Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/chacha/asm/chacha-armv8.pl b/crypto/chacha/asm/chacha-armv8.pl index c3a3653..a519b5f 100755 --- a/crypto/chacha/asm/chacha-armv8.pl +++ b/crypto/chacha/asm/chacha-armv8.pl
@@ -142,7 +142,7 @@ ChaCha20_ctr32: AARCH64_VALID_CALL_TARGET cbz $len,.Labort -#if __has_feature(hwaddress_sanitizer) && __clang_major__ >= 10 +#if defined(OPENSSL_HWASAN) && __clang_major__ >= 10 adrp @x[0],:pg_hi21_nc:OPENSSL_armcap_P #else adrp @x[0],:pg_hi21:OPENSSL_armcap_P
diff --git a/crypto/fipsmodule/sha/asm/sha1-armv8.pl b/crypto/fipsmodule/sha/asm/sha1-armv8.pl index 856b819..0a7a2fc 100644 --- a/crypto/fipsmodule/sha/asm/sha1-armv8.pl +++ b/crypto/fipsmodule/sha/asm/sha1-armv8.pl
@@ -183,7 +183,7 @@ sha1_block_data_order: // Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later. AARCH64_VALID_CALL_TARGET -#if __has_feature(hwaddress_sanitizer) && __clang_major__ >= 10 +#if defined(OPENSSL_HWASAN) && __clang_major__ >= 10 adrp x16,:pg_hi21_nc:OPENSSL_armcap_P #else adrp x16,:pg_hi21:OPENSSL_armcap_P
diff --git a/crypto/fipsmodule/sha/asm/sha512-armv8.pl b/crypto/fipsmodule/sha/asm/sha512-armv8.pl index 8cb312f..0235be3 100644 --- a/crypto/fipsmodule/sha/asm/sha512-armv8.pl +++ b/crypto/fipsmodule/sha/asm/sha512-armv8.pl
@@ -187,7 +187,7 @@ $func: AARCH64_VALID_CALL_TARGET #ifndef __KERNEL__ -#if __has_feature(hwaddress_sanitizer) && __clang_major__ >= 10 +#if defined(OPENSSL_HWASAN) && __clang_major__ >= 10 adrp x16,:pg_hi21_nc:OPENSSL_armcap_P #else adrp x16,:pg_hi21:OPENSSL_armcap_P
diff --git a/include/openssl/target.h b/include/openssl/target.h index c972e83..4e12652 100644 --- a/include/openssl/target.h +++ b/include/openssl/target.h
@@ -139,6 +139,9 @@ #define OPENSSL_MSAN #define OPENSSL_ASM_INCOMPATIBLE #endif +#if __has_feature(hwaddress_sanitizer) +#define OPENSSL_HWASAN +#endif #endif #if defined(OPENSSL_ASM_INCOMPATIBLE)