[compiler-rt][AArch64] Add GCS property in assembly files (#152502)

Only BTI and PAC properties were added previously.

Fixes https://github.com/llvm/llvm-project/issues/152427.
This commit is contained in:
Csanád Hajdú 2025-08-07 16:40:36 +02:00 committed by GitHub
parent f3db0cb4d8
commit c088b5ffca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 22 additions and 14 deletions

View File

@ -264,7 +264,7 @@ END_COMPILERRT_OUTLINE_FUNCTION(NAME(LDNM))
NO_EXEC_STACK_DIRECTIVE NO_EXEC_STACK_DIRECTIVE
// GNU property note for BTI and PAC // GNU property note for BTI, PAC, and GCS
GNU_PROPERTY_BTI_PAC GNU_PROPERTY_BTI_PAC_GCS
#endif // defined(__aarch64__) || defined(__arm64ec__) #endif // defined(__aarch64__) || defined(__arm64ec__)

View File

@ -371,5 +371,5 @@ END_COMPILERRT_FUNCTION(__arm_sme_restore)
NO_EXEC_STACK_DIRECTIVE NO_EXEC_STACK_DIRECTIVE
// GNU property note for BTI and PAC // GNU property note for BTI, PAC, and GCS
GNU_PROPERTY_BTI_PAC GNU_PROPERTY_BTI_PAC_GCS

View File

@ -79,11 +79,12 @@
#define FUNC_ALIGN #define FUNC_ALIGN
#endif #endif
// BTI and PAC gnu property note // BTI, PAC, and GCS gnu property note
#define NT_GNU_PROPERTY_TYPE_0 5 #define NT_GNU_PROPERTY_TYPE_0 5
#define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000 #define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000
#define GNU_PROPERTY_AARCH64_FEATURE_1_BTI 1 #define GNU_PROPERTY_AARCH64_FEATURE_1_BTI 1
#define GNU_PROPERTY_AARCH64_FEATURE_1_PAC 2 #define GNU_PROPERTY_AARCH64_FEATURE_1_PAC 2
#define GNU_PROPERTY_AARCH64_FEATURE_1_GCS 4
#if defined(__ARM_FEATURE_BTI_DEFAULT) #if defined(__ARM_FEATURE_BTI_DEFAULT)
#define BTI_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_BTI #define BTI_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_BTI
@ -97,6 +98,12 @@
#define PAC_FLAG 0 #define PAC_FLAG 0
#endif #endif
#if defined(__ARM_FEATURE_GCS_DEFAULT)
#define GCS_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_GCS
#else
#define GCS_FLAG 0
#endif
#define GNU_PROPERTY(type, value) \ #define GNU_PROPERTY(type, value) \
.pushsection .note.gnu.property, "a" SEPARATOR \ .pushsection .note.gnu.property, "a" SEPARATOR \
.p2align 3 SEPARATOR \ .p2align 3 SEPARATOR \
@ -118,11 +125,12 @@
#define BTI_J #define BTI_J
#endif #endif
#if (BTI_FLAG | PAC_FLAG) != 0 #if (BTI_FLAG | PAC_FLAG | GCS_FLAG) != 0
#define GNU_PROPERTY_BTI_PAC \ #define GNU_PROPERTY_BTI_PAC_GCS \
GNU_PROPERTY(GNU_PROPERTY_AARCH64_FEATURE_1_AND, BTI_FLAG | PAC_FLAG) GNU_PROPERTY(GNU_PROPERTY_AARCH64_FEATURE_1_AND, \
BTI_FLAG | PAC_FLAG | GCS_FLAG)
#else #else
#define GNU_PROPERTY_BTI_PAC #define GNU_PROPERTY_BTI_PAC_GCS
#endif #endif
#if defined(__clang__) || defined(__GCC_HAVE_DWARF2_CFI_ASM) #if defined(__clang__) || defined(__GCC_HAVE_DWARF2_CFI_ASM)

View File

@ -11,4 +11,4 @@
NO_EXEC_STACK_DIRECTIVE NO_EXEC_STACK_DIRECTIVE
GNU_PROPERTY_BTI_PAC GNU_PROPERTY_BTI_PAC_GCS

View File

@ -99,4 +99,4 @@ ASM_TRAMPOLINE_ALIAS(_setjmp, setjmp)
// We do not need executable stack. // We do not need executable stack.
NO_EXEC_STACK_DIRECTIVE NO_EXEC_STACK_DIRECTIVE
GNU_PROPERTY_BTI_PAC GNU_PROPERTY_BTI_PAC_GCS

View File

@ -157,4 +157,4 @@ mismatch:
// We do not need executable stack. // We do not need executable stack.
NO_EXEC_STACK_DIRECTIVE NO_EXEC_STACK_DIRECTIVE
GNU_PROPERTY_BTI_PAC GNU_PROPERTY_BTI_PAC_GCS

View File

@ -43,6 +43,6 @@ ASM_SIZE(vfork)
ASM_INTERCEPTOR_TRAMPOLINE(vfork) ASM_INTERCEPTOR_TRAMPOLINE(vfork)
ASM_TRAMPOLINE_ALIAS(vfork, vfork) ASM_TRAMPOLINE_ALIAS(vfork, vfork)
GNU_PROPERTY_BTI_PAC GNU_PROPERTY_BTI_PAC_GCS
#endif #endif

View File

@ -222,6 +222,6 @@ ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
NO_EXEC_STACK_DIRECTIVE NO_EXEC_STACK_DIRECTIVE
GNU_PROPERTY_BTI_PAC GNU_PROPERTY_BTI_PAC_GCS
#endif #endif