[edk2-devel] Debug OVMF

Andrew Fish via groups.io afish=apple.com at groups.io
Mon May 9 18:18:07 UTC 2022


Sebastien,

The UEFI ROMs generally contain sets of PE/COFF images (drivers, apps, etc) that execute not at their linked address. These PE/COFF images have been stripped of debug information and optionally contain a PE/COFF debug directory entry that points to a file that contains the debug info. Generally for Windows this is a PDB file, for macOS it is a dSYM, for Linux it is the ELF. Given this we have to teach debuggers how to load EFI symbols.

The idea behind efi_gdb.py is to add a gdb command that can load EFI symbols. The idea is to take the PC/address/frame address and walk backwards to find the PE/COFF header. The PE/COFF header start gives you the load address and the PE/COFF debug directory entry lets you point gdb at the file with the symbols. If you are into EFI proper (DXE) you can also pass an —extended flag and the gdb command will use symbols from the frame to try and find the EFI System Table that contains a list of the load address of all the modules, and then load symbols for everything. 

Assuming you tell QEMU to create a gdb remote stub (-gdb tcp::9000)… TL;DR….

When OVMF is running from another terminal window gdb -ex "target remote localhost:9000" -ex "source efi_gdb.py” and that should connect to OVMF and load the EFI Symbols. 

There are some basic instructions in the header of the Python script. 
https://github.com/tianocore/edk2/blob/master/BaseTools/Scripts/efi_gdb.py

The efi_gdb.py script also adds some other useful EFI related gdb commands to dump things like Device Path, HOB, guid, and EFI System Tables. 

Caveat emptor there is a debugger agnostic script, efi_debugging.py, that needs to be next to efi_gdb.py. My daily driver is lldb so I wrote these scripts for lldb, and then ported to gdb with lots of interweb searching. But even if something goes wrong I can probably help out on the mailing list. 

Thanks,

Andrew Fish

PS It should be possible to use the efi_debugging.py Python classes with any debugger that supports Python, or to use the services from other gdb debugging scripts etc. 

> On May 9, 2022, at 3:00 AM, Boeuf, Sebastien <sebastien.boeuf at intel.com> wrote:
> 
> On Mon, 2022-05-09 at 11:49 +0200, kraxel at redhat.com <mailto:kraxel at redhat.com> wrote:
>> On Mon, May 09, 2022 at 09:32:52AM +0000, Boeuf, Sebastien wrote:
>>> Hi,
>>> 
>>> I'm trying to debug OVMF with gdb connected to Cloud Hypervisor but
>>> the
>>> problem is that the debug binary that I have generated doesn't
>>> contain
>>> any symbols. Do you know how to generate debug symbols for OVMF?
>> 
>> Build/OvmfX64/DEBUG_GCC5/X64/*.debug
>> 
>> You might want checkout BaseTools/Scripts/efi_*.py too (didn't try
>> them
>> myself yet).
> 
> Ah thanks for the pointers, I'll try these :)
> 
> Sebastien
> 
>> 
>> take care,
>>   Gerd
>> 
> 
> ---------------------------------------------------------------------
> Intel Corporation SAS (French simplified joint stock company)
> Registered headquarters: "Les Montalets"- 2, rue de Paris, 
> 92196 Meudon Cedex, France
> Registration Number:  302 456 199 R.C.S. NANTERRE
> Capital: 5 208 026.16 Euros
> 
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#89621): https://edk2.groups.io/g/devel/message/89621
Mute This Topic: https://groups.io/mt/90985478/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/edk2-devel-archive/attachments/20220509/fade2d9d/attachment-0001.htm>


More information about the edk2-devel-archive mailing list