[llvm] r199990 - Use DW_AT_high_pc and DW_AT_low_pc for the high and low pc for a

Eric Christopher echristo at gmail.com
Thu Mar 20 13:14:47 PDT 2014


>> +  TextSectionBeginSym = TextSectionEndSym = 0;
>
>
> Rather than keeping track of two new symbols - can we just form this from
> the ranges data we already have? (the begin label of the first range and the
> end label of the last)
>

Very much delayed, but done :)

Also, proof I keep these emails around. ;)

-eric

>>
>>    CurFn = 0;
>>    CurMI = 0;
>>
>> @@ -1061,9 +1062,12 @@ void DwarfDebug::finalizeModuleInfo() {
>>          addSectionLabel(Asm, U, U->getUnitDie(), dwarf::DW_AT_ranges,
>>                          Asm->GetTempSymbol("cu_ranges",
>> U->getUniqueID()),
>>                          DwarfDebugRangeSectionSym);
>> -      else
>> -        U->addUInt(U->getUnitDie(), dwarf::DW_AT_low_pc,
>> dwarf::DW_FORM_addr,
>> -                   0);
>> +      else {
>> +        U->addLocalLabelAddress(U->getUnitDie(), dwarf::DW_AT_low_pc,
>> +                                TextSectionBeginSym);
>> +        U->addLocalLabelAddress(U->getUnitDie(), dwarf::DW_AT_high_pc,
>> +                                TextSectionEndSym);
>
>
> Be sort of nice if this came out in the wash & we didn't have to know at the
> call-site that we were adding something to the non-dwo unit. But yeah, short
> of having more derived classes in the DwarfUnit hierarchy (and it's sort of
> orthogonal to that - since it applies to type and compile units equally... )
> I'm not sure how to make that happen.
>
> Well, something to mull over/keep in mind.
>
>>
>> +      }
>>      }
>>    }
>>
>> @@ -1117,6 +1121,10 @@ void DwarfDebug::endSections() {
>>        Sym = Asm->GetTempSymbol("debug_end", ID);
>>        Asm->OutStreamer.SwitchSection(Section);
>>        Asm->OutStreamer.EmitLabel(Sym);
>> +      // If this is the end of the text section keep track of where the
>> end of
>> +      // the section is so that we can use it later.
>> +      if (Section == Asm->getObjFileLowering().getTextSection())
>> +        TextSectionEndSym = Sym;
>>      }
>>
>>      // Insert a final terminator.
>> @@ -2012,6 +2020,8 @@ void DwarfDebug::emitSectionLabels() {
>>
>>    DwarfDebugLocSectionSym =
>>        emitSectionSym(Asm, TLOF.getDwarfLocSection(),
>> "section_debug_loc");
>> +
>> +  TextSectionBeginSym = emitSectionSym(Asm, TLOF.getTextSection(),
>> "text_begin");
>>  }
>>
>>  // Recursively emits a debug information entry.
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=199990&r1=199989&r2=199990&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Fri Jan 24 05:40:29
>> 2014
>> @@ -432,6 +432,7 @@ class DwarfDebug : public AsmPrinterHand
>>    MCSymbol *DwarfInfoDWOSectionSym, *DwarfAbbrevDWOSectionSym;
>>    MCSymbol *DwarfStrDWOSectionSym;
>>    MCSymbol *DwarfGnuPubNamesSectionSym, *DwarfGnuPubTypesSectionSym;
>> +  MCSymbol *TextSectionBeginSym, *TextSectionEndSym;
>>
>>    // As an optimization, there is no need to emit an entry in the
>> directory
>>    // table for the same directory as DW_AT_comp_dir.
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=199990&r1=199989&r2=199990&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Fri Jan 24 05:40:29
>> 2014
>> @@ -266,21 +266,32 @@ void DwarfUnit::addSectionOffset(DIE *Di
>>  ///
>>  void DwarfCompileUnit::addLabelAddress(DIE *Die, dwarf::Attribute
>> Attribute,
>>                                         MCSymbol *Label) {
>> +  if (!DD->useSplitDwarf())
>> +    return addLocalLabelAddress(Die, Attribute, Label);
>> +
>> +  if (Label)
>> +    DD->addArangeLabel(SymbolCU(this, Label));
>> +
>> +  unsigned idx = DU->getAddrPoolIndex(Label);
>> +  DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
>> +  Die->addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
>> +}
>> +
>> +/// addLocalLabelAddress - Add a dwarf label attribute data and value
>> using
>> +/// DW_FORM_addr only.
>> +///
>> +void DwarfCompileUnit::addLocalLabelAddress(DIE *Die,
>> +                                            dwarf::Attribute Attribute,
>> +                                            MCSymbol *Label) {
>>    if (Label)
>>      DD->addArangeLabel(SymbolCU(this, Label));
>>
>> -  if (!DD->useSplitDwarf()) {
>> -    if (Label) {
>> -      DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
>> -      Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
>> -    } else {
>> -      DIEValue *Value = new (DIEValueAllocator) DIEInteger(0);
>> -      Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
>> -    }
>> +  if (Label) {
>> +    DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
>> +    Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
>>    } else {
>> -    unsigned idx = DU->getAddrPoolIndex(Label);
>> -    DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
>> -    Die->addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
>> +    DIEValue *Value = new (DIEValueAllocator) DIEInteger(0);
>> +    Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
>>    }
>>  }
>>
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h?rev=199990&r1=199989&r2=199990&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h Fri Jan 24 05:40:29 2014
>> @@ -545,6 +545,11 @@ public:
>>    /// addLabelAddress - Add a dwarf label attribute data and value using
>>    /// either DW_FORM_addr or DW_FORM_GNU_addr_index.
>>    void addLabelAddress(DIE *Die, dwarf::Attribute Attribute, MCSymbol
>> *Label);
>> +
>> +  /// addLocalLabelAddress - Add a dwarf label attribute data and value
>> using
>> +  /// DW_FORM_addr only.
>> +  void addLocalLabelAddress(DIE *Die, dwarf::Attribute Attribute,
>> +                            MCSymbol *Label);
>>  };
>>
>>  class DwarfTypeUnit : public DwarfUnit {
>>
>> Modified: llvm/trunk/test/DebugInfo/X86/concrete_out_of_line.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/concrete_out_of_line.ll?rev=199990&r1=199989&r2=199990&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/DebugInfo/X86/concrete_out_of_line.ll (original)
>> +++ llvm/trunk/test/DebugInfo/X86/concrete_out_of_line.ll Fri Jan 24
>> 05:40:29 2014
>> @@ -7,15 +7,15 @@
>>  ; first check that we have a TAG_subprogram at a given offset and it has
>>  ; AT_inline.
>>
>> -; CHECK: 0x0000011c:   DW_TAG_subprogram [17]
>> +; CHECK: 0x00000124:   DW_TAG_subprogram [17]
>>  ; CHECK-NEXT:     DW_AT_specification
>>  ; CHECK-NEXT:     DW_AT_inline
>>
>>
>>  ; and then that a TAG_subprogram refers to it with AT_abstract_origin.
>>
>> -; CHECK: 0x0000015d:   DW_TAG_subprogram [19]
>> -; CHECK-NEXT: DW_AT_abstract_origin [DW_FORM_ref4]    (cu + 0x011c =>
>> {0x0000011c})
>> +; CHECK: 0x00000165:   DW_TAG_subprogram [19]
>> +; CHECK-NEXT: DW_AT_abstract_origin [DW_FORM_ref4]    (cu + 0x0124 =>
>> {0x00000124})
>>
>>  define i32 @_ZN17nsAutoRefCnt7ReleaseEv() {
>>  entry:
>>
>> Modified: llvm/trunk/test/DebugInfo/X86/fission-cu.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/fission-cu.ll?rev=199990&r1=199989&r2=199990&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/DebugInfo/X86/fission-cu.ll (original)
>> +++ llvm/trunk/test/DebugInfo/X86/fission-cu.ll Fri Jan 24 05:40:29 2014
>> @@ -109,6 +109,8 @@
>>  ; OBJ-NEXT: R_X86_64_32 .debug_str
>>  ; OBJ-NEXT: R_X86_64_32 .debug_addr
>>  ; OBJ-NEXT: R_X86_64_32 .debug_str
>> +; OBJ-NEXT: R_X86_64_64 .text 0x0
>> +; OBJ-NEXT: R_X86_64_64 .text 0x0
>>  ; OBJ-NEXT: }
>>  ; OBJ: .debug_aranges
>>  ; OBJ-NEXT: R_X86_64_32 .debug_info 0x0
>>
>>
>> _______________________________________________
>> 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