hi, Andrew:
Thanks for your response!
I found gcc has "-g " parameter in tools_def.txt.
So, it means :
the produced efi image file has included debug info sections?
And the efi code could retrieve the symbol file from the loaded EFI image?
best wishes,
发件人: Andrew Fish [mailto:af...@apple.com]
发送时间:2012年11月27日 4:05
收件人: edk2-devel@lists.sourceforge.net
主题: Re: [edk2] objcopy option "--add-gnu-debuglink"
Nicolas,
I don't know the specific answer for your tools, but I can give you a hint on
how things work in general.
The general answer is no one actually uses the debug definitions defined in
COFF or PE/COFF. The PE/COFF file points to another file that contains the
debug information. For Visual Studio this is a .PDB file, for clang we point
to a DWARF or DSYM (DWARF + objects).
If you look in the PE/COFF specification
(http://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx) there
is something called the Optional Header Data Directories, the term optional
here is confusing as it is optional for COFF, but required for PE/COFF. For
most EFI images you will see a Base Relocation Entry, and Debug Data
Directories entries (assuming it is debug build). The Base Relocation Entry
contains the fix up info so an image can be loaded at other than its linked
address (usually zero). The Debug Data Directory entry looks like
EFI_IMAGE_DEBUG_DIRECTORY_ENTRY
and it points to a EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY or one of the other
types you can find in
https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/MdePkg/Include/IndustryStandard/PeImage.h.
Basically a EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY contains the file name of the
symbols. So loading symbols in EFI usually involves walking the PE/COFF image
to find the PDB (or other debug file path and name), and this combined with the
load address of the PE/COFF image is enough to load symbols in a debugger.
There are library functions that do all this, and you can find them by
searching for one of the PE/COFF structures I mention in this mail.
On a related side note PE/COFF differs from ELF and Mach-O in that the file
header is loaded into system memory. Why do I mention this? Well if the build
system is converting EFL/Mach-O files to PE/COFF you generally have to link the
ELF/Mach-O file not at zero, but use the size of the PE/COFF header as the link
address. The reason I mention this is that sometimes when you load symbols you
need to add back in the size of the PE/COFF header to the PE/COFF image load
address to get the correct symbol addresses. This shift is only required for
PE/COFF images that are converted from ELF or Mach-O.
Thanks,
Andrew Fish
On Nov 22, 2012, at 9:40 PM, nicolas wrote:
hi, experts:
I found a line in tools_def.txt :
DEBUG_*_*_OBJCOPY_ADDDEBUGFLAG =
--add-gnu-debuglink=$(DEBUG_DIR)\$(MODULE_NAME).debug
Will it merge debug info file into efi binary?
Or it will produce a separate debug info file?
best wishes,
------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
Keep yourself connected to Go Parallel:
VERIFY Test and improve your parallel project with help from experts
and peers. http://goparallel.sourceforge.net
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel