[LLVMdev] [patch] Dwarf Debug info support for COFF object files
Devang Patel
dpatel at apple.com
Thu Feb 24 13:08:04 PST 2011
On Feb 24, 2011, at 11:52 AM, Devang Patel wrote:
>
> On Feb 24, 2011, at 11:36 AM, Devang Patel wrote:
>
>>
>> On Feb 12, 2011, at 2:07 AM, Nathan Jeffords wrote:
>>
>>> Hello All,
>>>
>>> I have created a set of patches that get dwarf debugging support working for the COFF object file. I also believe I have fixed what appears to be a bug in how line info sections are referred to from the DW_TAG_compile_unit DIE. I have run some basic tests, analyzed dumps of both the objects files and the final executables, and run a test program against mingw-gdb and everything looks to be in order.
>>>
>>> Here is a short description of what the patches accomplish
>>>
>>> die.patch:
>>> adds a new DIEValue type to represent a section relative label. (their was already a type id specified so I provided a class modeled after DIELabel)
>>>
>>> secrel-fixup.patch:
>>> creats a new target specific fixup type (reloc_coff_secrel32) to represent COFF Section Relative relocations and updats the COFF object writer to write it as COFF_IMAGE_REL_AMD64_SREL32
>>>
>>> secrel-streamer.patch
>>> adds a new directive in the MCStreamer interface to allow the AsmPrinter to emit a section relative label and provides implementations for all existings Streamer (all but WinCOFF either forward or error on it)
>>>
>>> secrel-dwarf.patch
>>> updates dwarf printing code to make use of the new directive & DIE value where appropriate (this is where the bug fix is)
>>>
>>> coff-debug.patch
>>> turns the dwarf output on in the X86/COFF AsmInfo classes
>>
>> This patches look fine. I am curious, how are you testing debug info support for COFF ?
>
> Well, this patch fails following FE tests on darwin.
> LLVM :: FrontendC++/2006-11-06-StackTrace.cpp
> LLVM :: FrontendC++/2006-11-30-Pubnames.cpp
> LLVM :: FrontendC++/2010-08-31-ByValArg.cpp
> LLVM :: FrontendC/2009-02-17-BitField-dbg.c
> LLVM :: FrontendC/2010-01-14-StaticVariable.c
> LLVM :: FrontendC/2010-02-16-DbgVarScope.c
> LLVM :: FrontendObjC/2009-08-17-DebugInfo.m
This is because of
@@ -1903,7 +1912,8 @@
addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_addr,
Asm->GetTempSymbol("section_line"));
else
- addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
+ addSectionOffset(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_addr,
+ Asm->GetTempSymbol("section_line"));
if (!Dir.empty())
addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
You probably wanted to do...
@@ -1904,8 +1913,8 @@
// DW_AT_stmt_list is a offset of line number information for this
// compile unit in debug_line section.
if (Asm->MAI->doesDwarfUsesAbsoluteLabelForStmtList())
- addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_addr,
- Asm->GetTempSymbol("section_line"));
+ addSectionOffset(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_addr,
+ Asm->GetTempSymbol("section_line"));
else
addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
I updated this part and applied your patch. r126425
Thanks for the contribution!
-
Devang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110224/f64e8829/attachment.html>
More information about the llvm-dev
mailing list