summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArd Biesheuvel <ardb@kernel.org>2023-03-27 12:10:06 +0200
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2023-03-30 11:05:22 +0000
commit48d642a310b96e68465d724644510d3f6e381b2c (patch)
tree1eb1294c05bda88363e075964e00f0c1873d7d0a
parentf8b1854b92559ad28dc6df6bb886652b87e2a422 (diff)
downloadedk2-48d642a310b96e68465d724644510d3f6e381b2c.tar.gz
edk2-48d642a310b96e68465d724644510d3f6e381b2c.tar.bz2
edk2-48d642a310b96e68465d724644510d3f6e381b2c.zip
ArmPkg: Emit BTI opcodes when BTI codegen is enabled
When building with -mbranch-protection=bti, which affects the compiler codegen only, ensure that the assembler based codegen is aligned with this, by emitting the BTI C opcode at the start of each exported function. While most exported functions are not in fact ever called indirectly, whether or not this is the case is a property of the caller so annotating every exported function is a reasonable default. While at it, fix two occurrences in ArmPkg of exported functions that did not use the ASM_FUNC() macro. 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>
-rw-r--r--ArmPkg/Include/AsmMacroIoLibV8.h3
-rw-r--r--ArmPkg/Library/ArmExceptionLib/AArch64/ExceptionSupport.S3
-rw-r--r--ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S6
3 files changed, 6 insertions, 6 deletions
diff --git a/ArmPkg/Include/AsmMacroIoLibV8.h b/ArmPkg/Include/AsmMacroIoLibV8.h
index 2c2b1cabd0..135aaeca5d 100644
--- a/ArmPkg/Include/AsmMacroIoLibV8.h
+++ b/ArmPkg/Include/AsmMacroIoLibV8.h
@@ -38,7 +38,8 @@
.global Name ; \
.section #Section, "ax" ; \
.type Name, %function ; \
- Name:
+ Name: ; \
+ AARCH64_BTI(c)
#define ASM_FUNC(Name) _ASM_FUNC(ASM_PFX(Name), .text. ## Name)
diff --git a/ArmPkg/Library/ArmExceptionLib/AArch64/ExceptionSupport.S b/ArmPkg/Library/ArmExceptionLib/AArch64/ExceptionSupport.S
index 9202952ee9..cd9437b6aa 100644
--- a/ArmPkg/Library/ArmExceptionLib/AArch64/ExceptionSupport.S
+++ b/ArmPkg/Library/ArmExceptionLib/AArch64/ExceptionSupport.S
@@ -94,7 +94,6 @@
GCC_ASM_EXPORT(ExceptionHandlersEnd)
GCC_ASM_EXPORT(CommonCExceptionHandler)
-GCC_ASM_EXPORT(RegisterEl0Stack)
.text
@@ -387,6 +386,6 @@ ASM_PFX(CommonExceptionEntry):
eret
-ASM_PFX(RegisterEl0Stack):
+ASM_FUNC(RegisterEl0Stack)
msr sp_el0, x0
ret
diff --git a/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S b/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S
index 1a7c10cb79..bdba9d7fe9 100644
--- a/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S
+++ b/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S
@@ -5,12 +5,12 @@
//
//
+#include <AsmMacroIoLibV8.h>
+
.text
.align 3
-GCC_ASM_EXPORT(ArmCallSvc)
-
-ASM_PFX(ArmCallSvc):
+ASM_FUNC(ArmCallSvc)
// Push frame pointer and return address on the stack
stp x29, x30, [sp, #-32]!
mov x29, sp