summaryrefslogtreecommitdiffstats
path: root/ArmVirtPkg/PrePi/AArch64
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2018-11-16 14:52:59 -0800
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2018-11-19 11:10:10 -0800
commit81c6f1dfbac18d6469686f99ee0d9fb944de0350 (patch)
treea7e8dcffefb244e6a3ec7ca579993445130ecb42 /ArmVirtPkg/PrePi/AArch64
parent0bcf71c13c8ce9ad254da901420badb74420a6df (diff)
downloadedk2-81c6f1dfbac18d6469686f99ee0d9fb944de0350.tar.gz
edk2-81c6f1dfbac18d6469686f99ee0d9fb944de0350.tar.bz2
edk2-81c6f1dfbac18d6469686f99ee0d9fb944de0350.zip
ArmVirtPkg/PrePi: clear frame pointer in startup code
When setting up the stack in the startup code and jumping into C code for the first time, ensure that the frame pointer register is cleared so that backtraces terminate correctly. Otherwise, output like the below is shown when encountering an exception on a DEBUG build: Synchronous Exception at 0x0000000078A14780 PC 0x000078A14780 (0x000078A00000+0x00014780) [ 0] ArmVeNorFlashDxe.dll PC 0x000078A10634 (0x000078A00000+0x00010634) [ 0] ArmVeNorFlashDxe.dll PC 0x000078A11CF0 (0x000078A00000+0x00011CF0) [ 0] ArmVeNorFlashDxe.dll PC 0x000078A11DD0 (0x000078A00000+0x00011DD0) [ 0] ArmVeNorFlashDxe.dll PC 0x00007BC9D87C (0x00007BC98000+0x0000587C) [ 1] PartitionDxe.dll PC 0x00007BC99B3C (0x00007BC98000+0x00001B3C) [ 1] PartitionDxe.dll PC 0x00007F362F50 (0x00007F359000+0x00009F50) [ 2] DxeCore.dll PC 0x00007BD63BB0 (0x00007BD5B000+0x00008BB0) [ 3] BdsDxe.dll PC 0x00007BD6EE00 (0x00007BD5B000+0x00013E00) [ 3] BdsDxe.dll PC 0x00007BD67C70 (0x00007BD5B000+0x0000CC70) [ 3] BdsDxe.dll PC 0x00007F3724F0 (0x00007F359000+0x000194F0) [ 4] DxeCore.dll PC 0x00004008FC30 PC 0x000040090130 PC 0x5800F6025800F5E1 Recursive exception occurred while dumping the CPU state which is rather unhelpful, given that this prevent the remaining debug output from being printed (register dump, stack dump, fault related system registers etc) Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Acked-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Diffstat (limited to 'ArmVirtPkg/PrePi/AArch64')
-rw-r--r--ArmVirtPkg/PrePi/AArch64/ModuleEntryPoint.S3
1 files changed, 3 insertions, 0 deletions
diff --git a/ArmVirtPkg/PrePi/AArch64/ModuleEntryPoint.S b/ArmVirtPkg/PrePi/AArch64/ModuleEntryPoint.S
index 891cf1fcab..99658b9abc 100644
--- a/ArmVirtPkg/PrePi/AArch64/ModuleEntryPoint.S
+++ b/ArmVirtPkg/PrePi/AArch64/ModuleEntryPoint.S
@@ -121,6 +121,9 @@ _GetStackBase:
mov x1, x21
mov x2, x22
+ // Set the frame pointer to NULL so any backtraces terminate here
+ mov x29, xzr
+
// Jump to PrePiCore C code
// x0 = MpId
// x1 = UefiMemoryBase