nice, can we do this for ARM too? I usually need to add DEBUG((...))'s all over the place for hours until I found the reason for a fault.
Thanks Michael On Wed, Sep 7, 2016 at 10:21 AM, Ard Biesheuvel <[email protected]> wrote: > When dumping the CPU state after an unhandled fault, walk the stack > frames and decode the return addresses so we can show a minimal > backtrace. Unfortunately, we do not have sufficient information to > show the function names, but at least we can see the modules and the > return addresses inside the modules. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ard Biesheuvel <[email protected]> > --- > > Example output: > > Synchronous Exception at 0x00000000F5EA4C8C > /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe/DEBUG/ArmVeNorFlashDxe.dll > loaded at 0x00000000F5E90000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe/DEBUG/ArmVeNorFlashDxe.dll > (0x00000000F5EA4AE8) loaded at 0x00000000F5E90000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe/DEBUG/ArmVeNorFlashDxe.dll > (0x00000000F5EA1BFC) loaded at 0x00000000F5E90000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe/DEBUG/ArmVeNorFlashDxe.dll > (0x00000000F5EA23F4) loaded at 0x00000000F5E90000 > called from /work/jenkins/workspace/ap-uefi-bin/EDK2_ARCH/ARM/EDK2_ > BINARY/FatPkg/label/sas-sw/Build/Fat/RELEASE_GCC49/ > AARCH64/FatPkg/EnhancedFatDxe/Fat/DEBUG/Fat.dll (0x00000000FADC454C) > loaded at 0x00000000FADC3000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll > (0x00000000FE47C868) loaded at 0x00000000FE471000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe/DEBUG/BdsDxe.dll > (0x00000000FAE2C50C) loaded at 0x00000000FAE01000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe/DEBUG/BdsDxe.dll > (0x00000000FAE2C674) loaded at 0x00000000FAE01000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe/DEBUG/BdsDxe.dll > (0x00000000FAE2C264) loaded at 0x00000000FAE01000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe/DEBUG/BdsDxe.dll > (0x00000000FAE36998) loaded at 0x00000000FAE01000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe/DEBUG/BdsDxe.dll > (0x00000000FAE03668) loaded at 0x00000000FAE01000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll > (0x00000000FE4733F0) loaded at 0x00000000FE471000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll > (0x00000000FE4724A0) loaded at 0x00000000FE471000 > called from /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_ > GCC5/AARCH64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll > (0x00000000FE472024) loaded at 0x00000000FE471000 > --- > .../AArch64/DefaultExceptionHandler.c | 21 > +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git > a/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/DefaultExceptionHandler.c > b/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/ > DefaultExceptionHandler.c > index 31fc936b21ff..84b442f2b6f4 100644 > --- a/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/ > DefaultExceptionHandler.c > +++ b/ArmPkg/Library/DefaultExceptionHandlerLib/AArch64/ > DefaultExceptionHandler.c > @@ -152,9 +152,30 @@ DefaultExceptionHandler ( > CHAR8 *Pdb; > UINTN ImageBase; > UINTN PeCoffSizeOfHeader; > + UINT64 *Fp; > + > Pdb = GetImageName (SystemContext.SystemContextAArch64->ELR, > &ImageBase, &PeCoffSizeOfHeader); > if (Pdb != NULL) { > DEBUG ((EFI_D_ERROR, "%a loaded at 0x%016lx \n", 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)); > + } > + for (Fp = (UINT64 *)SystemContext.SystemContextAArch64->FP; > + *Fp != 0; > + Fp = (UINT64 *)Fp[0]) { > + if (Fp[1] == SystemContext.SystemContextAArch64->LR) { > + continue; > + } > + 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)); > + } > + } > } > DEBUG_CODE_END (); > > -- > 2.7.4 > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

