mirror of https://github.com/acidanthera/audk.git
MdePkg/ProcessorBind AARCH64: Add asm macro to emit GNU BTI note
Implement a CPP macro that can be called from .S files to emit the .note section carrying the annotation that informs the linker that the object file is compatible with BTI control flow integrity checks. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com> Reviewed-by: Oliver Smith-Denny <osd@smith-denny.com>
This commit is contained in:
parent
e3e88d90e8
commit
6521e4d202
|
@ -186,6 +186,40 @@ typedef INT64 INTN;
|
|||
#define GCC_ASM_IMPORT(func__) \
|
||||
.extern _CONCATENATE (__USER_LABEL_PREFIX__, func__)
|
||||
|
||||
#if defined (__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1
|
||||
#define AARCH64_BTI_NOTE() \
|
||||
.ifndef .Lgnu_bti_notesize ;\
|
||||
.pushsection .note.gnu.property, "a" ;\
|
||||
.set NT_GNU_PROPERTY_TYPE_0, 0x5 ;\
|
||||
.set GNU_PROPERTY_AARCH64_FEATURE_1_AND, 0xc0000000 ;\
|
||||
.set GNU_PROPERTY_AARCH64_FEATURE_1_BTI, 0x1 ;\
|
||||
.align 3 ;\
|
||||
.long .Lnamesize ;\
|
||||
.long .Lgnu_bti_notesize ;\
|
||||
.long NT_GNU_PROPERTY_TYPE_0 ;\
|
||||
0: .asciz "GNU" ;\
|
||||
.set .Lnamesize, . - 0b ;\
|
||||
.align 3 ;\
|
||||
1: .long GNU_PROPERTY_AARCH64_FEATURE_1_AND ;\
|
||||
.long .Lvalsize ;\
|
||||
2: .long GNU_PROPERTY_AARCH64_FEATURE_1_BTI ;\
|
||||
.set .Lvalsize, . - 2b ;\
|
||||
.align 3 ;\
|
||||
.set .Lgnu_bti_notesize, . - 1b ;\
|
||||
.popsection ;\
|
||||
.endif
|
||||
|
||||
#define AARCH64_BTI(__type) \
|
||||
AARCH64_BTI_NOTE() ;\
|
||||
bti __type
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef AARCH64_BTI
|
||||
#define AARCH64_BTI_NOTE()
|
||||
#define AARCH64_BTI(__type)
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue