summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeif Lindholm <quic_llindhol@quicinc.com>2020-10-01 19:37:12 +0100
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2023-10-02 15:48:02 +0000
commit1a66bd51ca21f341281d8e3157d3d3f4a94fd26c (patch)
tree662fddca4f275374c91cbac9dee83d1d9cfa1c5c
parent2b2705343a810538bc27f5e897da693984c82394 (diff)
downloadedk2-1a66bd51ca21f341281d8e3157d3d3f4a94fd26c.tar.gz
edk2-1a66bd51ca21f341281d8e3157d3d3f4a94fd26c.tar.bz2
edk2-1a66bd51ca21f341281d8e3157d3d3f4a94fd26c.zip
MdePkg/BaseLib: ensure ARM LongJump never returns 0
The ARM implementation of InternalLongJump always returned the value Value - but it is not supposed to ever return 0. Add the test to prevent that, and return 1 if Value is 0 - as is already present in AArch64. Signed-off-by: Leif Lindholm <quic_llindhol@quicinc.com> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
-rw-r--r--MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S2
-rw-r--r--MdePkg/Library/BaseLib/Arm/SetJumpLongJump.asm2
2 files changed, 4 insertions, 0 deletions
diff --git a/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S b/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S
index e913202522..14006c6123 100644
--- a/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S
+++ b/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.S
@@ -57,6 +57,8 @@ ASM_PFX(SetJump):
ASM_PFX(InternalLongJump):
ldmia r0, {r3-r12,r14}
mov r13, r3
+ cmp r1, #0
+ moveq r1, #1
mov r0, r1
bx lr
diff --git a/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.asm b/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.asm
index ef02d85e0e..15eb3dc28f 100644
--- a/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.asm
+++ b/MdePkg/Library/BaseLib/Arm/SetJumpLongJump.asm
@@ -57,6 +57,8 @@ SetJump
InternalLongJump
LDM R0, {R3-R12,R14}
MOV R13, R3
+ CMP R1, #0
+ MOVEQ R1, #1
MOV R0, R1
BX LR