Skip to content

Commit

Permalink
MdePkg/BaseLib: correct register sizes in AArch64 SetJump/LongJump
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reanimated-by: Andrei Warkentin <[email protected]>
Cc: Ard Biesheuvel <[email protected]>
Cc: Sami Mujawar <[email protected]>
Reviewed-by: Sami Mujawar <[email protected]>
Reviewed-by: Andrei Warkentin <[email protected]>
  • Loading branch information
leiflindholm authored and mergify[bot] committed Oct 2, 2023
1 parent ae79efb commit 2b27053
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
8 changes: 4 additions & 4 deletions MdePkg/Library/BaseLib/AArch64/SetJumpLongJump.S
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ ASM_PFX(SetJump):
FPR_LAYOUT
#undef REG_PAIR
#undef REG_ONE
mov w0, #0
mov x0, #0
ret

#/**
Expand Down Expand Up @@ -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
8 changes: 4 additions & 4 deletions MdePkg/Library/BaseLib/AArch64/SetJumpLongJump.asm
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ SetJump
FPR_LAYOUT
#undef REG_PAIR
#undef REG_ONE
mov w0, #0
mov x0, #0
ret

;/**
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 2b27053

Please sign in to comment.