MdePkg/BaseMemoryLibOptDxe AARCH64: Make asm files BTI compatible

Add the BTI instructions and the associated note to make the AArch64 asm
objects compatible with BTI enforcement.

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:
Ard Biesheuvel 2023-03-25 17:37:30 +01:00 committed by mergify[bot]
parent c4c7fb2174
commit 0ee255f50a
5 changed files with 9 additions and 0 deletions

View File

@ -8,6 +8,7 @@
.align 5 .align 5
ASM_GLOBAL ASM_PFX(InternalMemCompareGuid) ASM_GLOBAL ASM_PFX(InternalMemCompareGuid)
ASM_PFX(InternalMemCompareGuid): ASM_PFX(InternalMemCompareGuid):
AARCH64_BTI(c)
mov x2, xzr mov x2, xzr
ldp x3, x4, [x0] ldp x3, x4, [x0]
cbz x1, 0f cbz x1, 0f

View File

@ -32,6 +32,7 @@
.p2align 6 .p2align 6
ASM_GLOBAL ASM_PFX(InternalMemCompareMem) ASM_GLOBAL ASM_PFX(InternalMemCompareMem)
ASM_PFX(InternalMemCompareMem): ASM_PFX(InternalMemCompareMem):
AARCH64_BTI(c)
eor tmp1, src1, src2 eor tmp1, src1, src2
tst tmp1, #7 tst tmp1, #7
b.ne .Lmisaligned8 b.ne .Lmisaligned8

View File

@ -178,6 +178,7 @@ L(copy_long):
ASM_GLOBAL ASM_PFX(InternalMemCopyMem) ASM_GLOBAL ASM_PFX(InternalMemCopyMem)
ASM_PFX(InternalMemCopyMem): ASM_PFX(InternalMemCopyMem):
AARCH64_BTI(c)
sub tmp2, dstin, src sub tmp2, dstin, src
cmp count, 96 cmp count, 96
ccmp tmp2, count, 2, hi ccmp tmp2, count, 2, hi

View File

@ -45,6 +45,7 @@
ASM_GLOBAL ASM_PFX(InternalMemScanMem8) ASM_GLOBAL ASM_PFX(InternalMemScanMem8)
ASM_PFX(InternalMemScanMem8): ASM_PFX(InternalMemScanMem8):
AARCH64_BTI(c)
// Do not dereference srcin if no bytes to compare. // Do not dereference srcin if no bytes to compare.
cbz cntin, .Lzero_length cbz cntin, .Lzero_length
// //

View File

@ -29,29 +29,34 @@
ASM_GLOBAL ASM_PFX(InternalMemSetMem16) ASM_GLOBAL ASM_PFX(InternalMemSetMem16)
ASM_PFX(InternalMemSetMem16): ASM_PFX(InternalMemSetMem16):
AARCH64_BTI(c)
dup v0.8H, valw dup v0.8H, valw
lsl count, count, #1 lsl count, count, #1
b 0f b 0f
ASM_GLOBAL ASM_PFX(InternalMemSetMem32) ASM_GLOBAL ASM_PFX(InternalMemSetMem32)
ASM_PFX(InternalMemSetMem32): ASM_PFX(InternalMemSetMem32):
AARCH64_BTI(c)
dup v0.4S, valw dup v0.4S, valw
lsl count, count, #2 lsl count, count, #2
b 0f b 0f
ASM_GLOBAL ASM_PFX(InternalMemSetMem64) ASM_GLOBAL ASM_PFX(InternalMemSetMem64)
ASM_PFX(InternalMemSetMem64): ASM_PFX(InternalMemSetMem64):
AARCH64_BTI(c)
dup v0.2D, val dup v0.2D, val
lsl count, count, #3 lsl count, count, #3
b 0f b 0f
ASM_GLOBAL ASM_PFX(InternalMemZeroMem) ASM_GLOBAL ASM_PFX(InternalMemZeroMem)
ASM_PFX(InternalMemZeroMem): ASM_PFX(InternalMemZeroMem):
AARCH64_BTI(c)
movi v0.16B, #0 movi v0.16B, #0
b 0f b 0f
ASM_GLOBAL ASM_PFX(InternalMemSetMem) ASM_GLOBAL ASM_PFX(InternalMemSetMem)
ASM_PFX(InternalMemSetMem): ASM_PFX(InternalMemSetMem):
AARCH64_BTI(c)
dup v0.16B, valw dup v0.16B, valw
0: add dstend, dstin, count 0: add dstend, dstin, count
mov val, v0.D[0] mov val, v0.D[0]