> On Sep 7, 2016, at 1: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. >
Ard, In these kind of dumps I find it useful to also display the offset into the PE/COFF image. ArmVeNorFlashDxe.dll (0x00000000F5EA4AE8) loaded at 0x00000000F5E90000 offset 0x00014AE9 The reason is it makes it easy to use the gdb list command to display the C source code. gdb /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_GCC5/AARCH64/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe/DEBUG/ArmVeNorFlashDxe.dll (gdb) list * 0x14AE9 This assumes the .dll is the ELF linked near zero to accommodate the PE/COFF header, or PE/COFF. For TE you need to know the adjustment value from the TE header. Seems like it would be possible to write a script to symbolicate the stack trace on the build machine. It might be more useful to have the summary 1st (I have to admit I like things to line up in columns): Synchronous Exception at 0x00000000F5EA4C8C PC 0x00000000F5EA4C8C (0x00000000F5E90000+0x00014C8C) ArmVeNorFlashDxe.dll /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_GCC5/AARCH64/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe/DEBUG PC 0x00000000F5EA4AE8 (0x00000000F5E90000+0x00014AE9) ArmVeNorFlashDxe.dll /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_GCC5/AARCH64/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe/DEBUG PC 0x00000000F5EA1BFC (0x00000000F5E90000+0x00011BFC) ArmVeNorFlashDxe.dll /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_GCC5/AARCH64/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe/DEBUG In the example above I also made the the exception line the summary and showed that location like the rest of the frame. This seems to be the way debuggers like to do it so it seems to match with what a developer would expect. Thanks, Andrew Fish PS. Just saw the remove the path commit. So maybe something like: Synchronous Exception at 0x00000000F5EA4C8C PC 0x00000000F5EA4C8C (0x00000000F5E90000+0x00014C8C) ArmVeNorFlashDxe.dll [1] PC 0x00000000F5EA4AE8 (0x00000000F5E90000+0x00014AE9) ArmVeNorFlashDxe.dll [1] PC 0x00000000F5EA1BFC (0x00000000F5E90000+0x00011BFC) ArmVeNorFlashDxe.dll [1] PC 0x00000000FADC454C (0x00000000FADC3000+0x0000154C) Fat.dll [2] [1] /home/ard/build/edk2/Build/ArmVExpress-FVP-AArch64/DEBUG_GCC5/AARCH64/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe/DEBUG [2] /work/jenkins/workspace/ap-uefi-bin/EDK2_ARCH/ARM/EDK2_BINARY/FatPkg/label/sas-sw/Build/Fat/RELEASE_GCC49/AARCH64/FatPkg/EnhancedFatDxe/Fat/DEBUG/ I think your example points out why it is useful. Also the Shell or application running at he Shell could come from different locations, but still be on your system. Not to mention if you are debugging you might as well dump out all the information you have. > 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

