diff --git a/lib/csu/aarch64/crt1_s.S b/lib/csu/aarch64/crt1_s.S index 97b4bff35a0..981cf4653ef 100644 --- a/lib/csu/aarch64/crt1_s.S +++ b/lib/csu/aarch64/crt1_s.S @@ -30,6 +30,8 @@ */ #include +#include + /* * The program entry point * void _start(char **ap, void (*cleanup)(void)) __dead2 @@ -62,3 +64,5 @@ eprol: END(_start) .section .note.GNU-stack,"",@progbits + +GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL) diff --git a/lib/csu/aarch64/crti.S b/lib/csu/aarch64/crti.S index 0a20f4c5e31..8bd2dfac149 100644 --- a/lib/csu/aarch64/crti.S +++ b/lib/csu/aarch64/crti.S @@ -28,11 +28,14 @@ */ #include +#include + .section .init,"ax",@progbits .align 4 .globl _init .type _init,@function _init: + PAC_LR_SIGN stp x29, x30, [sp, #-16]! mov x29, sp @@ -41,6 +44,8 @@ _init: .globl _fini .type _fini,@function _fini: + PAC_LR_SIGN stp x29, x30, [sp, #-16]! mov x29, sp +GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL) diff --git a/lib/csu/aarch64/crtn.S b/lib/csu/aarch64/crtn.S index 924aa36aa04..441411f0ab8 100644 --- a/lib/csu/aarch64/crtn.S +++ b/lib/csu/aarch64/crtn.S @@ -28,13 +28,19 @@ */ #include +#include + .section .init,"ax",@progbits ldp x29, x30, [sp], #16 + PAC_LR_AUTH ret .section .fini,"ax",@progbits ldp x29, x30, [sp], #16 + PAC_LR_AUTH ret .section .note.GNU-stack,"",%progbits + +GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL) diff --git a/lib/csu/common/crtbrand.S b/lib/csu/common/crtbrand.S index 0ed86bfba2b..b59e2fd8056 100644 --- a/lib/csu/common/crtbrand.S +++ b/lib/csu/common/crtbrand.S @@ -47,3 +47,8 @@ 4: .section .note.GNU-stack,"",%progbits + +#ifdef __aarch64__ +/* This is needed in all objects for BTI to be used in the linked elf file */ +GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL) +#endif diff --git a/lib/csu/common/feature_note.S b/lib/csu/common/feature_note.S index 343d2a9262e..5c1d56d4cde 100644 --- a/lib/csu/common/feature_note.S +++ b/lib/csu/common/feature_note.S @@ -40,3 +40,8 @@ 4: .section .note.GNU-stack,"",%progbits + +#ifdef __aarch64__ +/* This is needed in all objects for BTI to be used in the linked elf file */ +GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL) +#endif diff --git a/lib/csu/common/ignore_init_note.S b/lib/csu/common/ignore_init_note.S index fa37a899053..57fb4e8f4d5 100644 --- a/lib/csu/common/ignore_init_note.S +++ b/lib/csu/common/ignore_init_note.S @@ -41,3 +41,8 @@ 4: .section .note.GNU-stack,"",%progbits + +#ifdef __aarch64__ +/* This is needed in all objects for BTI to be used in the linked elf file */ +GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL) +#endif