]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPkg/DefaultExceptionHandlerLib: trim module name in backtrace output
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Fri, 9 Sep 2016 07:28:53 +0000 (08:28 +0100)
committerArd Biesheuvel <ard.biesheuvel@linaro.org>
Fri, 9 Sep 2016 13:03:15 +0000 (14:03 +0100)
As reported by Vishal, the new backtrace output would be more useful if
it did not contain the full absolute path of each module in the list.
So strip off everything up to the last forward slash or backslash in the
string.

Example output:

  IRQ Exception at 0x000000005EF110E0
  DxeCore.dll loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EF121F0) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EF1289C) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEFB6B4) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEFAA44) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEFB450) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEF938C) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEF8D04) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEFA8E8) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEF3C14) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEF3E48) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EF0C838) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEEF70C) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEEE93C) loaded at 0x000000005EEED000
  called from DxeCore.dll (0x000000005EEEE024) loaded at 0x000000005EEED000

Suggested-by: "Oliyil Kunnil, Vishal" <vishalo@qti.qualcomm.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c

index 84b442f2b6f48dbb557fa7d816ded2601bb0d2e1..1251bb8bd6fa9617f4b52e2124d11b4a217fefa0 100644 (file)
@@ -119,6 +119,26 @@ DescribeExceptionSyndrome (
   DEBUG ((EFI_D_ERROR, "\n %a \n", Message));\r
 }\r
 \r
+#ifndef MDEPKG_NDEBUG\r
+STATIC\r
+CONST CHAR8 *\r
+BaseName (\r
+  IN  CONST CHAR8 *FullName\r
+  )\r
+{\r
+  CONST CHAR8 *Str;\r
+\r
+  Str = FullName + AsciiStrLen (FullName);\r
+\r
+  while (--Str > FullName) {\r
+    if (*Str == '/' || *Str == '\\') {\r
+      return Str + 1;\r
+    }\r
+  }\r
+  return Str;\r
+}\r
+#endif\r
+\r
 /**\r
   This is the default action to take on an unexpected exception\r
 \r
@@ -156,13 +176,13 @@ DefaultExceptionHandler (
 \r
     Pdb = GetImageName (SystemContext.SystemContextAArch64->ELR, &ImageBase, &PeCoffSizeOfHeader);\r
     if (Pdb != NULL) {\r
-      DEBUG ((EFI_D_ERROR, "%a loaded at 0x%016lx \n", Pdb, ImageBase));\r
+      DEBUG ((EFI_D_ERROR, "%a loaded at 0x%016lx \n", BaseName (Pdb), ImageBase));\r
 \r
       Pdb = GetImageName (SystemContext.SystemContextAArch64->LR, &ImageBase,\r
               &PeCoffSizeOfHeader);\r
       if (Pdb != NULL) {\r
         DEBUG ((EFI_D_ERROR, "called from %a (0x%016lx) loaded at 0x%016lx \n",\r
-          Pdb, SystemContext.SystemContextAArch64->LR, ImageBase));\r
+          BaseName (Pdb), SystemContext.SystemContextAArch64->LR, ImageBase));\r
       }\r
       for (Fp = (UINT64 *)SystemContext.SystemContextAArch64->FP;\r
            *Fp != 0;\r
@@ -173,7 +193,7 @@ DefaultExceptionHandler (
         Pdb = GetImageName (Fp[1], &ImageBase, &PeCoffSizeOfHeader);\r
         if (Pdb != NULL) {\r
           DEBUG ((EFI_D_ERROR, "called from %a (0x%016lx) loaded at 0x%016lx \n",\r
-            Pdb, Fp[1], ImageBase));\r
+            BaseName (Pdb), Fp[1], ImageBase));\r
         }\r
       }\r
     }\r