diff mbox

[edk2] ArmPkg/DefaultExceptionHandlerLib: improve formatting of backtrace

Message ID 1473444037-15016-1-git-send-email-ard.biesheuvel@linaro.org
State Accepted
Commit 062f9fd2cfaad09f6dd0e302094bc030827eb706
Headers show

Commit Message

Ard Biesheuvel Sept. 9, 2016, 6 p.m. UTC
Implement the backtrace formattting suggested by Andrew, i.e.,

  IRQ Exception at 0x000000005BE182B0
  PC 0x00005BE182B0 (0x00005BE14000+0x000042B0) [ 0] ArmCpuDxe.dll
  PC 0x00005BE15770 (0x00005BE14000+0x00001770) [ 0] ArmCpuDxe.dll
  PC 0x00005EF08CC8 (0x00005EEEB000+0x0001DCC8) [ 1] DxeCore.dll
  PC 0x00005EF09008 (0x00005EEEB000+0x0001E008) [ 1] DxeCore.dll
  PC 0x00005EEF6ACC (0x00005EEEB000+0x0000BACC) [ 1] DxeCore.dll
  PC 0x00005EF0963C (0x00005EEEB000+0x0001E63C) [ 1] DxeCore.dll
  PC 0x00005EF09A38 (0x00005EEEB000+0x0001EA38) [ 1] DxeCore.dll
  PC 0x00005EF01560 (0x00005EEEB000+0x00016560) [ 1] DxeCore.dll
  PC 0x00005EF02FB4 (0x00005EEEB000+0x00017FB4) [ 1] DxeCore.dll
  PC 0x00005EF03098 (0x00005EEEB000+0x00018098) [ 1] DxeCore.dll
  PC 0x00005EF0460C (0x00005EEEB000+0x0001960C) [ 1] DxeCore.dll
  PC 0x00005EF005C4 (0x00005EEEB000+0x000155C4) [ 1] DxeCore.dll
  PC 0x00005EF00360 (0x00005EEEB000+0x00015360) [ 1] DxeCore.dll
  PC 0x00005EF003C8 (0x00005EEEB000+0x000153C8) [ 1] DxeCore.dll
  PC 0x00005EF128D0 (0x00005EEEB000+0x000278D0) [ 1] DxeCore.dll
  PC 0x00005EF12930 (0x00005EEEB000+0x00027930) [ 1] DxeCore.dll
  PC 0x00005EEEF594 (0x00005EEEB000+0x00004594) [ 1] DxeCore.dll
  PC 0x00005EF0CF18 (0x00005EEEB000+0x00021F18) [ 1] DxeCore.dll
  PC 0x00005EF1A310 (0x00005EEEB000+0x0002F310) [ 1] DxeCore.dll
  PC 0x00005EEF1808 (0x00005EEEB000+0x00006808) [ 1] DxeCore.dll
  PC 0x00005EEF1E48 (0x00005EEEB000+0x00006E48) [ 1] DxeCore.dll
  PC 0x00005EF0A838 (0x00005EEEB000+0x0001F838) [ 1] DxeCore.dll
  PC 0x00005EEED70C (0x00005EEEB000+0x0000270C) [ 1] DxeCore.dll
  PC 0x00005EEEC93C (0x00005EEEB000+0x0000193C) [ 1] DxeCore.dll
  PC 0x00005EEEC024 (0x00005EEEB000+0x00001024) [ 1] DxeCore.dll

  [ 0] /home/ard/build/edk2/Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/AARCH64/ArmPkg/Drivers/CpuDxe/CpuDxe/DEBUG/ArmCpuDxe.dll
  [ 1] /home/ard/build/edk2/Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/AARCH64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 .../AArch64/DefaultExceptionHandler.c              | 56 ++++++++++++++--------
 1 file changed, 37 insertions(+), 19 deletions(-)

-- 
2.7.4

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Ard Biesheuvel Sept. 12, 2016, 8:32 a.m. UTC | #1
On 10 September 2016 at 01:23, Andrew Fish <afish@apple.com> wrote:
>

>

>> On Sep 9, 2016, at 11:00 AM, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:

>>

>> Implement the backtrace formattting suggested by Andrew, i.e.,

>>

>>  IRQ Exception at 0x000000005BE182B0

>>  PC 0x00005BE182B0 (0x00005BE14000+0x000042B0) [ 0] ArmCpuDxe.dll

>>  PC 0x00005BE15770 (0x00005BE14000+0x00001770) [ 0] ArmCpuDxe.dll

>>  PC 0x00005EF08CC8 (0x00005EEEB000+0x0001DCC8) [ 1] DxeCore.dll

>>  PC 0x00005EF09008 (0x00005EEEB000+0x0001E008) [ 1] DxeCore.dll

>>  PC 0x00005EEF6ACC (0x00005EEEB000+0x0000BACC) [ 1] DxeCore.dll

>>  PC 0x00005EF0963C (0x00005EEEB000+0x0001E63C) [ 1] DxeCore.dll

>>  PC 0x00005EF09A38 (0x00005EEEB000+0x0001EA38) [ 1] DxeCore.dll

>>  PC 0x00005EF01560 (0x00005EEEB000+0x00016560) [ 1] DxeCore.dll

>>  PC 0x00005EF02FB4 (0x00005EEEB000+0x00017FB4) [ 1] DxeCore.dll

>>  PC 0x00005EF03098 (0x00005EEEB000+0x00018098) [ 1] DxeCore.dll

>>  PC 0x00005EF0460C (0x00005EEEB000+0x0001960C) [ 1] DxeCore.dll

>>  PC 0x00005EF005C4 (0x00005EEEB000+0x000155C4) [ 1] DxeCore.dll

>>  PC 0x00005EF00360 (0x00005EEEB000+0x00015360) [ 1] DxeCore.dll

>>  PC 0x00005EF003C8 (0x00005EEEB000+0x000153C8) [ 1] DxeCore.dll

>>  PC 0x00005EF128D0 (0x00005EEEB000+0x000278D0) [ 1] DxeCore.dll

>>  PC 0x00005EF12930 (0x00005EEEB000+0x00027930) [ 1] DxeCore.dll

>>  PC 0x00005EEEF594 (0x00005EEEB000+0x00004594) [ 1] DxeCore.dll

>>  PC 0x00005EF0CF18 (0x00005EEEB000+0x00021F18) [ 1] DxeCore.dll

>>  PC 0x00005EF1A310 (0x00005EEEB000+0x0002F310) [ 1] DxeCore.dll

>>  PC 0x00005EEF1808 (0x00005EEEB000+0x00006808) [ 1] DxeCore.dll

>>  PC 0x00005EEF1E48 (0x00005EEEB000+0x00006E48) [ 1] DxeCore.dll

>>  PC 0x00005EF0A838 (0x00005EEEB000+0x0001F838) [ 1] DxeCore.dll

>>  PC 0x00005EEED70C (0x00005EEEB000+0x0000270C) [ 1] DxeCore.dll

>>  PC 0x00005EEEC93C (0x00005EEEB000+0x0000193C) [ 1] DxeCore.dll

>>  PC 0x00005EEEC024 (0x00005EEEB000+0x00001024) [ 1] DxeCore.dll

>>

>>  [ 0] /home/ard/build/edk2/Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/AARCH64/ArmPkg/Drivers/CpuDxe/CpuDxe/DEBUG/ArmCpuDxe.dll

>>  [ 1] /home/ard/build/edk2/Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/AARCH64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll

>>

>

> Ard,

>

> I was just trying to start a conversation, but I can't complain about a patch.

>


Yeah, well, you made a good point.

> Given I seem to be having a good day with "The Force"(tm)... To process the clipboard Python tkinter makes it easy it does. So you can cut the backtrace from the terminal and run the script to symbolicate, or use a file as input.

>


That sounds straightforward enough. Still, I am going to let someone
with better python foo pick up that part

Thanks,
Ard.
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ard Biesheuvel Sept. 14, 2016, 1:28 p.m. UTC | #2
On 12 September 2016 at 09:32, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
> On 10 September 2016 at 01:23, Andrew Fish <afish@apple.com> wrote:

>>

>>

>>> On Sep 9, 2016, at 11:00 AM, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:

>>>

>>> Implement the backtrace formattting suggested by Andrew, i.e.,

>>>

>>>  IRQ Exception at 0x000000005BE182B0

>>>  PC 0x00005BE182B0 (0x00005BE14000+0x000042B0) [ 0] ArmCpuDxe.dll

>>>  PC 0x00005BE15770 (0x00005BE14000+0x00001770) [ 0] ArmCpuDxe.dll

>>>  PC 0x00005EF08CC8 (0x00005EEEB000+0x0001DCC8) [ 1] DxeCore.dll

>>>  PC 0x00005EF09008 (0x00005EEEB000+0x0001E008) [ 1] DxeCore.dll

>>>  PC 0x00005EEF6ACC (0x00005EEEB000+0x0000BACC) [ 1] DxeCore.dll

>>>  PC 0x00005EF0963C (0x00005EEEB000+0x0001E63C) [ 1] DxeCore.dll

>>>  PC 0x00005EF09A38 (0x00005EEEB000+0x0001EA38) [ 1] DxeCore.dll

>>>  PC 0x00005EF01560 (0x00005EEEB000+0x00016560) [ 1] DxeCore.dll

>>>  PC 0x00005EF02FB4 (0x00005EEEB000+0x00017FB4) [ 1] DxeCore.dll

>>>  PC 0x00005EF03098 (0x00005EEEB000+0x00018098) [ 1] DxeCore.dll

>>>  PC 0x00005EF0460C (0x00005EEEB000+0x0001960C) [ 1] DxeCore.dll

>>>  PC 0x00005EF005C4 (0x00005EEEB000+0x000155C4) [ 1] DxeCore.dll

>>>  PC 0x00005EF00360 (0x00005EEEB000+0x00015360) [ 1] DxeCore.dll

>>>  PC 0x00005EF003C8 (0x00005EEEB000+0x000153C8) [ 1] DxeCore.dll

>>>  PC 0x00005EF128D0 (0x00005EEEB000+0x000278D0) [ 1] DxeCore.dll

>>>  PC 0x00005EF12930 (0x00005EEEB000+0x00027930) [ 1] DxeCore.dll

>>>  PC 0x00005EEEF594 (0x00005EEEB000+0x00004594) [ 1] DxeCore.dll

>>>  PC 0x00005EF0CF18 (0x00005EEEB000+0x00021F18) [ 1] DxeCore.dll

>>>  PC 0x00005EF1A310 (0x00005EEEB000+0x0002F310) [ 1] DxeCore.dll

>>>  PC 0x00005EEF1808 (0x00005EEEB000+0x00006808) [ 1] DxeCore.dll

>>>  PC 0x00005EEF1E48 (0x00005EEEB000+0x00006E48) [ 1] DxeCore.dll

>>>  PC 0x00005EF0A838 (0x00005EEEB000+0x0001F838) [ 1] DxeCore.dll

>>>  PC 0x00005EEED70C (0x00005EEEB000+0x0000270C) [ 1] DxeCore.dll

>>>  PC 0x00005EEEC93C (0x00005EEEB000+0x0000193C) [ 1] DxeCore.dll

>>>  PC 0x00005EEEC024 (0x00005EEEB000+0x00001024) [ 1] DxeCore.dll

>>>

>>>  [ 0] /home/ard/build/edk2/Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/AARCH64/ArmPkg/Drivers/CpuDxe/CpuDxe/DEBUG/ArmCpuDxe.dll

>>>  [ 1] /home/ard/build/edk2/Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/AARCH64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll

>>>

>>


Leif: any comments?
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Leif Lindholm Sept. 14, 2016, 1:35 p.m. UTC | #3
On Wed, Sep 14, 2016 at 02:28:37PM +0100, Ard Biesheuvel wrote:
> On 12 September 2016 at 09:32, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:

> > On 10 September 2016 at 01:23, Andrew Fish <afish@apple.com> wrote:

> >>

> >>

> >>> On Sep 9, 2016, at 11:00 AM, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:

> >>>

> >>> Implement the backtrace formattting suggested by Andrew, i.e.,

> >>>

> >>>  IRQ Exception at 0x000000005BE182B0

> >>>  PC 0x00005BE182B0 (0x00005BE14000+0x000042B0) [ 0] ArmCpuDxe.dll

> >>>  PC 0x00005BE15770 (0x00005BE14000+0x00001770) [ 0] ArmCpuDxe.dll

> >>>  PC 0x00005EF08CC8 (0x00005EEEB000+0x0001DCC8) [ 1] DxeCore.dll

> >>>  PC 0x00005EF09008 (0x00005EEEB000+0x0001E008) [ 1] DxeCore.dll

> >>>  PC 0x00005EEF6ACC (0x00005EEEB000+0x0000BACC) [ 1] DxeCore.dll

> >>>  PC 0x00005EF0963C (0x00005EEEB000+0x0001E63C) [ 1] DxeCore.dll

> >>>  PC 0x00005EF09A38 (0x00005EEEB000+0x0001EA38) [ 1] DxeCore.dll

> >>>  PC 0x00005EF01560 (0x00005EEEB000+0x00016560) [ 1] DxeCore.dll

> >>>  PC 0x00005EF02FB4 (0x00005EEEB000+0x00017FB4) [ 1] DxeCore.dll

> >>>  PC 0x00005EF03098 (0x00005EEEB000+0x00018098) [ 1] DxeCore.dll

> >>>  PC 0x00005EF0460C (0x00005EEEB000+0x0001960C) [ 1] DxeCore.dll

> >>>  PC 0x00005EF005C4 (0x00005EEEB000+0x000155C4) [ 1] DxeCore.dll

> >>>  PC 0x00005EF00360 (0x00005EEEB000+0x00015360) [ 1] DxeCore.dll

> >>>  PC 0x00005EF003C8 (0x00005EEEB000+0x000153C8) [ 1] DxeCore.dll

> >>>  PC 0x00005EF128D0 (0x00005EEEB000+0x000278D0) [ 1] DxeCore.dll

> >>>  PC 0x00005EF12930 (0x00005EEEB000+0x00027930) [ 1] DxeCore.dll

> >>>  PC 0x00005EEEF594 (0x00005EEEB000+0x00004594) [ 1] DxeCore.dll

> >>>  PC 0x00005EF0CF18 (0x00005EEEB000+0x00021F18) [ 1] DxeCore.dll

> >>>  PC 0x00005EF1A310 (0x00005EEEB000+0x0002F310) [ 1] DxeCore.dll

> >>>  PC 0x00005EEF1808 (0x00005EEEB000+0x00006808) [ 1] DxeCore.dll

> >>>  PC 0x00005EEF1E48 (0x00005EEEB000+0x00006E48) [ 1] DxeCore.dll

> >>>  PC 0x00005EF0A838 (0x00005EEEB000+0x0001F838) [ 1] DxeCore.dll

> >>>  PC 0x00005EEED70C (0x00005EEEB000+0x0000270C) [ 1] DxeCore.dll

> >>>  PC 0x00005EEEC93C (0x00005EEEB000+0x0000193C) [ 1] DxeCore.dll

> >>>  PC 0x00005EEEC024 (0x00005EEEB000+0x00001024) [ 1] DxeCore.dll

> >>>

> >>>  [ 0] /home/ard/build/edk2/Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/AARCH64/ArmPkg/Drivers/CpuDxe/CpuDxe/DEBUG/ArmCpuDxe.dll

> >>>  [ 1] /home/ard/build/edk2/Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/AARCH64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll

> >>>

> >>

> 

> Leif: any comments?


Was just hanging back to see if there was more discussion forthcoming.
Looks good to me:
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
diff mbox

Patch

diff --git a/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c b/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c
index 1251bb8bd6fa..2f9c2ede37c1 100644
--- a/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c
+++ b/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c
@@ -169,31 +169,49 @@  DefaultExceptionHandler (
   SerialPortWrite ((UINT8 *) Buffer, CharCount);
 
   DEBUG_CODE_BEGIN ();
-    CHAR8  *Pdb;
+    CHAR8  *Pdb, *PrevPdb;
     UINTN  ImageBase;
     UINTN  PeCoffSizeOfHeader;
     UINT64 *Fp;
+    UINT64 RootFp[2];
+    UINTN  Idx;
 
-    Pdb = GetImageName (SystemContext.SystemContextAArch64->ELR, &ImageBase, &PeCoffSizeOfHeader);
+    PrevPdb = Pdb = GetImageName (SystemContext.SystemContextAArch64->ELR, &ImageBase, &PeCoffSizeOfHeader);
     if (Pdb != NULL) {
-      DEBUG ((EFI_D_ERROR, "%a loaded at 0x%016lx \n", BaseName (Pdb), ImageBase));
-
-      Pdb = GetImageName (SystemContext.SystemContextAArch64->LR, &ImageBase,
-              &PeCoffSizeOfHeader);
-      if (Pdb != NULL) {
-        DEBUG ((EFI_D_ERROR, "called from %a (0x%016lx) loaded at 0x%016lx \n",
-          BaseName (Pdb), SystemContext.SystemContextAArch64->LR, ImageBase));
-      }
-      for (Fp = (UINT64 *)SystemContext.SystemContextAArch64->FP;
-           *Fp != 0;
-           Fp = (UINT64 *)Fp[0]) {
-        if (Fp[1] == SystemContext.SystemContextAArch64->LR) {
-         continue;
+      DEBUG ((EFI_D_ERROR, "PC 0x%012lx (0x%012lx+0x%08x) [ 0] %a\n",
+        SystemContext.SystemContextAArch64->ELR, ImageBase,
+        SystemContext.SystemContextAArch64->ELR - ImageBase, BaseName (Pdb)));
+
+      if ((UINT64 *)SystemContext.SystemContextAArch64->FP != 0) {
+        Idx = 0;
+
+        RootFp[0] = ((UINT64 *)SystemContext.SystemContextAArch64->FP)[0];
+        RootFp[1] = ((UINT64 *)SystemContext.SystemContextAArch64->FP)[1];
+        if (RootFp[1] != SystemContext.SystemContextAArch64->LR) {
+          RootFp[0] = SystemContext.SystemContextAArch64->FP;
+          RootFp[1] = SystemContext.SystemContextAArch64->LR;
+        }
+        for (Fp = RootFp; Fp[0] != 0; Fp = (UINT64 *)Fp[0]) {
+          Pdb = GetImageName (Fp[1], &ImageBase, &PeCoffSizeOfHeader);
+          if (Pdb != NULL) {
+            if (Pdb != PrevPdb) {
+              Idx++;
+              PrevPdb = Pdb;
+            }
+            DEBUG ((EFI_D_ERROR, "PC 0x%012lx (0x%012lx+0x%08x) [% 2d] %a\n",
+              Fp[1], ImageBase, Fp[1] - ImageBase, Idx, BaseName (Pdb)));
+          }
         }
-        Pdb = GetImageName (Fp[1], &ImageBase, &PeCoffSizeOfHeader);
-        if (Pdb != NULL) {
-          DEBUG ((EFI_D_ERROR, "called from %a (0x%016lx) loaded at 0x%016lx \n",
-            BaseName (Pdb), Fp[1], ImageBase));
+        PrevPdb = Pdb = GetImageName (SystemContext.SystemContextAArch64->ELR, &ImageBase, &PeCoffSizeOfHeader);
+        DEBUG ((EFI_D_ERROR, "\n[ 0] %a\n", Pdb));
+
+        Idx = 0;
+        for (Fp = RootFp; Fp[0] != 0; Fp = (UINT64 *)Fp[0]) {
+          Pdb = GetImageName (Fp[1], &ImageBase, &PeCoffSizeOfHeader);
+          if (Pdb != NULL && Pdb != PrevPdb) {
+            DEBUG ((EFI_D_ERROR, "[% 2d] %a\n", ++Idx, Pdb));
+            PrevPdb = Pdb;
+          }
         }
       }
     }