diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index b14a452d85d..ae276868198 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -657,11 +657,12 @@ static void EmitGenDwarfInfo(MCStreamer *MCOS, // The 4 byte offset to the debug abbrevs from the start of the .debug_abbrev, // it is at the start of that section so this is zero. - if (AbbrevSectionSymbol) { - MCOS->EmitSymbolValue(AbbrevSectionSymbol, 4); - } else { + if (AbbrevSectionSymbol == nullptr) MCOS->EmitIntValue(0, 4); - } + else if (context.getAsmInfo()->needsDwarfSectionOffsetDirective()) + MCOS->EmitCOFFSecRel32(AbbrevSectionSymbol); + else + MCOS->EmitSymbolValue(AbbrevSectionSymbol, 4); const MCAsmInfo *asmInfo = context.getAsmInfo(); int AddrSize = asmInfo->getPointerSize(); diff --git a/test/DebugInfo/X86/dbg-asm.s b/test/DebugInfo/X86/dbg-asm.s new file mode 100644 index 00000000000..66a0292461d --- /dev/null +++ b/test/DebugInfo/X86/dbg-asm.s @@ -0,0 +1,22 @@ +# RUN: llvm-mc -triple i686-windows-gnu -g %s -filetype obj -o - \ +# RUN: | llvm-readobj -r - | FileCheck -check-prefix CHECK-COFF %s +# RUN: llvm-mc -triple i686-windows-itanium -g %s -filetype obj -o - \ +# RUN: | llvm-readobj -r - | FileCheck -check-prefix CHECK-COFF %s +# RUN: llvm-mc -triple i686-linux-gnu -g %s -filetype obj -o - \ +# RUN: | llvm-readobj -r - | FileCheck -check-prefix CHECK-ELF %s + +_a: + movl $65, %eax + ret + +# CHECK-COFF: Relocations [ +# CHECK-COFF: Section {{.*}} .debug_info { +# CHECK-COFF: 0x6 IMAGE_REL_I386_SECREL .debug_abbrev +# CHECK-COFF: } +# CHECK-COFF: ] + +# CHECK-ELF: Relocations [ +# CHECK-ELF: Section {{.*}} .rel.debug_info { +# CHECK-ELF: 0x6 R_386_32 .debug_abbrev +# CHECK-ELF: } +# CHECK-ELF: ]