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 <a...@kernel.org>
---
 ArmPkg/Include/AsmMacroIoLibV8.h                          | 3 ++-
 ArmPkg/Library/ArmExceptionLib/AArch64/ExceptionSupport.S | 3 +--
 ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S                 | 4 +---
 3 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/ArmPkg/Include/AsmMacroIoLibV8.h b/ArmPkg/Include/AsmMacroIoLibV8.h
index 2c2b1cabd0537671..135aaeca5d0b986d 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 9202952ee9c0d4e5..cd9437b6aab82889 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 1a7c10cb793183e7..ab13914fd3e7a359 100644
--- a/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S
+++ b/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S
@@ -8,9 +8,7 @@
 .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
-- 
2.39.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#101933): https://edk2.groups.io/g/devel/message/101933
Mute This Topic: https://groups.io/mt/97879290/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to