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

David Blaikie dblaikie at gmail.com
Sat Jul 19 14:18:49 PDT 2014


source level debug info does this (in DwarfUnit.cpp) with this:

 Asm->EmitSectionOffset(ASectionSym, ASectionSym);

should we just do the same thing for asm debug info?

On Sat, Jul 19, 2014 at 2:11 PM, Saleem Abdulrasool
<compnerd at compnerd.org> wrote:
> On Thu, Jul 17, 2014 at 11:05 AM, Eric Christopher <echristo at gmail.com>
> wrote:
>>
>> 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?
>
>
> As discussed offline, this is indeed less than ideal.  Addressed in SVN
> r213463.  Sorry about the delay.
>
>>
>> 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
>
>
>
>
> --
> Saleem Abdulrasool
> compnerd (at) compnerd (dot) org
>
> _______________________________________________
> 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