aarch64: Improve conditional compilation

With -Wundef one could get warnings of undefined symbols.
This patch tries to fix this issue.

Furthermore, the case where there is BTI but no Pointer Authentication
now uses GNU_PROPERTY_AARCH64_BTI in the check which should correctly
reflect that feature's enabled state.

Change-Id: I14902a64e5f403c2b6a117bc9f5fb1a4f4611ebf
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/43524
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/include/openssl/arm_arch.h b/include/openssl/arm_arch.h
index 1f16799..da69dbf 100644
--- a/include/openssl/arm_arch.h
+++ b/include/openssl/arm_arch.h
@@ -126,7 +126,7 @@
 // appropriate architecture-dependent feature bits set.
 // Read more: "ELF for the Arm® 64-bit Architecture"
 
-#if (__ARM_FEATURE_BTI_DEFAULT == 1)
+#if defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1
 #define GNU_PROPERTY_AARCH64_BTI (1 << 0)   // Has Branch Target Identification
 #define AARCH64_VALID_CALL_TARGET hint #34  // BTI 'c'
 #else
@@ -134,19 +134,21 @@
 #define AARCH64_VALID_CALL_TARGET
 #endif
 
-#if ((__ARM_FEATURE_PAC_DEFAULT & 1) == 1)  // Signed with A-key
+#if defined(__ARM_FEATURE_PAC_DEFAULT) && \
+    (__ARM_FEATURE_PAC_DEFAULT & 1) == 1  // Signed with A-key
 #define GNU_PROPERTY_AARCH64_POINTER_AUTH \
   (1 << 1)                                       // Has Pointer Authentication
 #define AARCH64_SIGN_LINK_REGISTER hint #25      // PACIASP
 #define AARCH64_VALIDATE_LINK_REGISTER hint #29  // AUTIASP
-#elif ((__ARM_FEATURE_PAC_DEFAULT & 2) == 2)     // Signed with B-key
+#elif defined(__ARM_FEATURE_PAC_DEFAULT) && \
+    (__ARM_FEATURE_PAC_DEFAULT & 2) == 2  // Signed with B-key
 #define GNU_PROPERTY_AARCH64_POINTER_AUTH \
   (1 << 1)                                       // Has Pointer Authentication
 #define AARCH64_SIGN_LINK_REGISTER hint #27      // PACIBSP
 #define AARCH64_VALIDATE_LINK_REGISTER hint #31  // AUTIBSP
 #else
 #define GNU_PROPERTY_AARCH64_POINTER_AUTH 0  // No Pointer Authentication
-#if defined(__ARM_FEATURE_BTI_DEFAULT)
+#if GNU_PROPERTY_AARCH64_BTI != 0
 #define AARCH64_SIGN_LINK_REGISTER AARCH64_VALID_CALL_TARGET
 #else
 #define AARCH64_SIGN_LINK_REGISTER
@@ -154,7 +156,7 @@
 #define AARCH64_VALIDATE_LINK_REGISTER
 #endif
 
-#if (GNU_PROPERTY_AARCH64_POINTER_AUTH != 0) || (GNU_PROPERTY_AARCH64_BTI != 0)
+#if GNU_PROPERTY_AARCH64_POINTER_AUTH != 0 || GNU_PROPERTY_AARCH64_BTI != 0
 .pushsection note.gnu.property, "a";
 .balign 8;
 .long 4;