[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