diff mbox

[edk2] ArmPkg/DefaultExceptionHandlerLib: trim module name in backtrace output

Message ID 1473406521-6216-1-git-send-email-ard.biesheuvel@linaro.org
State Accepted
Commit 1f8f4e33a139845bd73cc1ab2fdfc83e5f0ce56d
Headers show

Commit Message

Ard Biesheuvel Sept. 9, 2016, 7:35 a.m. UTC
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>

---
 ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c | 24 +++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

-- 
2.7.4

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

Comments

Leif Lindholm Sept. 9, 2016, 11:26 a.m. UTC | #1
On Fri, Sep 09, 2016 at 08:35:21AM +0100, Ard Biesheuvel wrote:
> 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>


Yes, that is cleaner.
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>


> ---

>  ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c | 24 +++++++++++++++++---

>  1 file changed, 21 insertions(+), 3 deletions(-)

> 

> diff --git a/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c b/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c

> index 84b442f2b6f4..177231dbdb97 100644

> --- a/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c

> +++ b/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c

> @@ -119,6 +119,24 @@ DescribeExceptionSyndrome (

>    DEBUG ((EFI_D_ERROR, "\n %a \n", Message));

>  }

>  

> +STATIC

> +CONST CHAR8 *

> +BaseName (

> +  IN  CONST CHAR8 *FullName

> +  )

> +{

> +  CONST CHAR8 *Str;

> +

> +  Str = FullName + AsciiStrLen (FullName);

> +

> +  while (--Str > FullName) {

> +    if (*Str == '/' || *Str == '\\') {

> +      return Str + 1;

> +    }

> +  }

> +  return Str;

> +}

> +

>  /**

>    This is the default action to take on an unexpected exception

>  

> @@ -156,13 +174,13 @@ DefaultExceptionHandler (

>  

>      Pdb = GetImageName (SystemContext.SystemContextAArch64->ELR, &ImageBase, &PeCoffSizeOfHeader);

>      if (Pdb != NULL) {

> -      DEBUG ((EFI_D_ERROR, "%a loaded at 0x%016lx \n", Pdb, ImageBase));

> +      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",

> -          Pdb, SystemContext.SystemContextAArch64->LR, ImageBase));

> +          BaseName (Pdb), SystemContext.SystemContextAArch64->LR, ImageBase));

>        }

>        for (Fp = (UINT64 *)SystemContext.SystemContextAArch64->FP;

>             *Fp != 0;

> @@ -173,7 +191,7 @@ DefaultExceptionHandler (

>          Pdb = GetImageName (Fp[1], &ImageBase, &PeCoffSizeOfHeader);

>          if (Pdb != NULL) {

>            DEBUG ((EFI_D_ERROR, "called from %a (0x%016lx) loaded at 0x%016lx \n",

> -            Pdb, Fp[1], ImageBase));

> +            BaseName (Pdb), Fp[1], ImageBase));

>          }

>        }

>      }

> -- 

> 2.7.4

> 

_______________________________________________
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 84b442f2b6f4..177231dbdb97 100644
--- a/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c
+++ b/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c
@@ -119,6 +119,24 @@  DescribeExceptionSyndrome (
   DEBUG ((EFI_D_ERROR, "\n %a \n", Message));
 }
 
+STATIC
+CONST CHAR8 *
+BaseName (
+  IN  CONST CHAR8 *FullName
+  )
+{
+  CONST CHAR8 *Str;
+
+  Str = FullName + AsciiStrLen (FullName);
+
+  while (--Str > FullName) {
+    if (*Str == '/' || *Str == '\\') {
+      return Str + 1;
+    }
+  }
+  return Str;
+}
+
 /**
   This is the default action to take on an unexpected exception
 
@@ -156,13 +174,13 @@  DefaultExceptionHandler (
 
     Pdb = GetImageName (SystemContext.SystemContextAArch64->ELR, &ImageBase, &PeCoffSizeOfHeader);
     if (Pdb != NULL) {
-      DEBUG ((EFI_D_ERROR, "%a loaded at 0x%016lx \n", Pdb, ImageBase));
+      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",
-          Pdb, SystemContext.SystemContextAArch64->LR, ImageBase));
+          BaseName (Pdb), SystemContext.SystemContextAArch64->LR, ImageBase));
       }
       for (Fp = (UINT64 *)SystemContext.SystemContextAArch64->FP;
            *Fp != 0;
@@ -173,7 +191,7 @@  DefaultExceptionHandler (
         Pdb = GetImageName (Fp[1], &ImageBase, &PeCoffSizeOfHeader);
         if (Pdb != NULL) {
           DEBUG ((EFI_D_ERROR, "called from %a (0x%016lx) loaded at 0x%016lx \n",
-            Pdb, Fp[1], ImageBase));
+            BaseName (Pdb), Fp[1], ImageBase));
         }
       }
     }