MdePkg/BaseLib: correct register sizes in AArch64 SetJump/LongJump

Both in SetJump and in InternalLongJump, 32-bit w register views were
used for the UINTN return value. In SetJump, this did not cause errors;
it was only counterintuitive. But in InternalLongJump, it meant the top
32 bits of Value were stripped off.

Change all of these to use the 64-bit x register views.

Signed-off-by: Leif Lindholm <quic_llindhol@quicinc.com>
Reanimated-by: Andrei Warkentin <andrei.warkentin@intel.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Reviewed-by: Andrei Warkentin <andrei.warkentin@intel.com>
This commit is contained in:
Leif Lindholm 2020-10-01 19:37:11 +01:00 committed by mergify[bot]
parent ae79efb7bd
commit 2b2705343a
2 changed files with 8 additions and 8 deletions

View File

@ -61,7 +61,7 @@ ASM_PFX(SetJump):
FPR_LAYOUT
#undef REG_PAIR
#undef REG_ONE
mov w0, #0
mov x0, #0
ret
#/**
@ -91,9 +91,9 @@ ASM_PFX(InternalLongJump):
#undef REG_PAIR
#undef REG_ONE
mov sp, x16
cmp w1, #0
mov w0, #1
csel w0, w1, w0, ne
cmp x1, #0
mov x0, #1
csel x0, x1, x0, ne
ret
ASM_FUNCTION_REMOVE_IF_UNREFERENCED

View File

@ -59,7 +59,7 @@ SetJump
FPR_LAYOUT
#undef REG_PAIR
#undef REG_ONE
mov w0, #0
mov x0, #0
ret
;/**
@ -88,10 +88,10 @@ InternalLongJump
#undef REG_PAIR
#undef REG_ONE
mov sp, x16
cmp w1, #0
mov w0, #1
cmp x1, #0
mov x0, #1
beq exit
mov w0, w1
mov x0, x1
exit
// use br not ret, as ret is guaranteed to mispredict
br x30