MC: correct DWARF line info for PE/COFF

DWARF address ranges contain a reference to the debug_info section.  This offset
is an absolute relocation except on non-PE/COFF targets where it is section
relative.  We would emit this incorrectly, and trying to map the debug info from
the address would fail.

llvm-svn: 217317
This commit is contained in:
Saleem Abdulrasool 2014-09-06 19:57:48 +00:00
parent c839c2bc20
commit fcefa21b08
2 changed files with 8 additions and 1 deletions

View File

@ -613,7 +613,8 @@ static void EmitGenDwarfAranges(MCStreamer *MCOS,
// The 4 byte offset to the compile unit in the .debug_info from the start
// of the .debug_info.
if (InfoSectionSymbol)
MCOS->EmitSymbolValue(InfoSectionSymbol, 4);
MCOS->EmitSymbolValue(InfoSectionSymbol, 4,
asmInfo->needsDwarfSectionOffsetDirective());
else
MCOS->EmitIntValue(0, 4);
// The 1 byte size of an address.

View File

@ -14,6 +14,9 @@ _a:
# CHECK-COFF: 0x6 IMAGE_REL_I386_SECREL .debug_abbrev
# CHECK-COFF: 0xC IMAGE_REL_I386_SECREL .debug_line
# CHECK-COFF: }
# CHECK-COFF: Section {{.*}} .debug_aranges {
# CHECK-COFF: 0x6 IMAGE_REL_I386_SECREL .debug_info
# CHECK-COFF: }
# CHECK-COFF: ]
# CHECK-ELF: Relocations [
@ -21,4 +24,7 @@ _a:
# CHECK-ELF: 0x6 R_386_32 .debug_abbrev
# CHECK-ELF: 0xC R_386_32 .debug_line
# CHECK-ELF: }
# CHECK-ELF: Section {{.*}} .rel.debug_aranges {
# CHECK-ELF: 0x6 R_386_32 .debug_info
# CHECK-ELF: }
# CHECK-ELF: ]