[llvm] r213275 - MC: correct DWARF header for PE/COFF assembly input

Eric Christopher echristo at gmail.com
Thu Jul 17 11:05:31 PDT 2014


On Thu, Jul 17, 2014 at 9:27 AM, Saleem Abdulrasool
<compnerd at compnerd.org> wrote:
> Author: compnerd
> Date: Thu Jul 17 11:27:44 2014
> New Revision: 213275
>
> URL: http://llvm.org/viewvc/llvm-project?rev=213275&view=rev
> Log:
> MC: correct DWARF header for PE/COFF assembly input
>
> The header contains an offset to the DWARF abbreviations for the CU.  The offset
> must be section relative for COFF and absolute for others.  The non-assembly
> code path for the DWARF header generation already had the correct emission for
> the headers.  This corrects just the assembly path.  Due to the invalid
> relocation, processing of the debug information would halt previously on the
> first assembly input as the associated abbreviations would be out of range as
> they would have the location increased by image base and the section offset.
>
> This address PR20332.
>
> Added:
>     llvm/trunk/test/DebugInfo/X86/dbg-asm.s
> Modified:
>     llvm/trunk/lib/MC/MCDwarf.cpp
>
> Modified: llvm/trunk/lib/MC/MCDwarf.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=213275&r1=213274&r2=213275&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCDwarf.cpp (original)
> +++ llvm/trunk/lib/MC/MCDwarf.cpp Thu Jul 17 11:27:44 2014
> @@ -657,11 +657,12 @@ static void EmitGenDwarfInfo(MCStreamer
>
>    // 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);
>

Having the explicit COFF call in here is a bit weird. Can you abstract
this out a bit?

Thanks!

-eric

>    const MCAsmInfo *asmInfo = context.getAsmInfo();
>    int AddrSize = asmInfo->getPointerSize();
>
> Added: llvm/trunk/test/DebugInfo/X86/dbg-asm.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-asm.s?rev=213275&view=auto
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/dbg-asm.s (added)
> +++ llvm/trunk/test/DebugInfo/X86/dbg-asm.s Thu Jul 17 11:27:44 2014
> @@ -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: ]
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list