[llvm] r203192 - DebugInfo: Limit r203187 to non-darwin as lldb can't handle this yet

Adrian Prantl aprantl at apple.com
Fri Mar 7 14:11:35 PST 2014


r203297.

On Mar 7, 2014, at 14:07, Adrian Prantl <aprantl at apple.com> wrote:

> Autocorrect combined with my lazy typing results in funny sentences.
> 
> On Mar 7, 2014, at 14:03, Adrian Prantl <aprantl at apple.com> wrote:
> 
>> If this was on lab.llvm.org:8013 I can offer an explanation.
>> 
>> The machines in the public lab run relatively old versions of LLDB and definitely don’t have any changes from July 2013 in them. The thing is, with the change that Oliver requested (machining this feature contingent on DWARF4) this should work fine, because the old buildbots will of DWARF 2 by default.
>> 
>> I will try to make that change and see if my theory is correct.
>> 
>> -- adrian
>> 
>> On Mar 7, 2014, at 13:56, Eric Christopher <echristo at gmail.com> wrote:
>> 
>>> Bunch of things in the debuginfo-tests directory were failing after the commit.
>>> 
>>> -eric
>>> 
>>> On Fri, Mar 7, 2014 at 1:55 PM, Greg Clayton <gclayton at apple.com> wrote:
>>>> Here was the change from back in July 2013:
>>>> 
>>>> Author: athirumu
>>>> Date: Thu Jul 25 10:13:50 2013
>>>> New Revision: 187125
>>>> 
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=187125&view=rev
>>>> Log:
>>>> Fixes LLDB address ranges with gcc 4.8
>>>> - Modifies the DWARF parser for DWARF 4 specification of hi_pc as an offset-from-low-pc.
>>>> 
>>>> Modified:
>>>> lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
>>>> lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h
>>>> 
>>>> Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp?rev=187125&r1=187124&r2=187125&view=diff
>>>> ==============================================================================
>>>> --- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp (original)
>>>> +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp Thu Jul 25 10:13:50 2013
>>>> @@ -774,6 +774,8 @@ DWARFDebugInfoEntry::GetDIENamesAndRange
>>>>      uint32_t i;
>>>>      dw_attr_t attr;
>>>>      dw_form_t form;
>>>> +        bool do_offset = false;
>>>> +
>>>>      for (i=0; i<numAttributes; ++i)
>>>>      {
>>>>          abbrevDecl->GetAttrAndFormByIndexUnchecked(i, attr, form);
>>>> @@ -783,12 +785,24 @@ DWARFDebugInfoEntry::GetDIENamesAndRange
>>>>              switch (attr)
>>>>              {
>>>>              case DW_AT_low_pc:
>>>> +                    lo_pc = form_value.Unsigned();
>>>> +
>>>> +                    if (do_offset)
>>>> +                        hi_pc += lo_pc;
>>>> +                    do_offset = false;
>>>> +                    break;
>>>> +
>>>>              case DW_AT_entry_pc:
>>>>                  lo_pc = form_value.Unsigned();
>>>>                  break;
>>>> 
>>>>              case DW_AT_high_pc:
>>>>                  hi_pc = form_value.Unsigned();
>>>> +                    if (form_value.Form() != DW_FORM_addr)
>>>> +                        if (lo_pc == LLDB_INVALID_ADDRESS)
>>>> +                            do_offset = hi_pc != LLDB_INVALID_ADDRESS;
>>>> +                        else
>>>> +                            hi_pc += lo_pc; // DWARF 4 introduces <offset-from-lo-pc> to save on relocations
>>>>                  break;
>>>> 
>>>>              case DW_AT_ranges:
>>>> @@ -1410,6 +1424,64 @@ DWARFDebugInfoEntry::GetAttributeValueAs
>>>> }
>>>> 
>>>> //----------------------------------------------------------------------
>>>> +// GetAttributeHighPC
>>>> +//
>>>> +// Get the hi_pc, adding hi_pc to lo_pc when specified
>>>> +// as an <offset-from-low-pc>.
>>>> +//
>>>> +// Returns the hi_pc or fail_value.
>>>> +//----------------------------------------------------------------------
>>>> +dw_addr_t
>>>> +DWARFDebugInfoEntry::GetAttributeHighPC
>>>> +(
>>>> +    SymbolFileDWARF* dwarf2Data,
>>>> +    const DWARFCompileUnit* cu,
>>>> +    dw_addr_t lo_pc,
>>>> +    uint64_t fail_value
>>>> +) const
>>>> +{
>>>> +    DWARFFormValue form_value;
>>>> +
>>>> +    if (GetAttributeValue(dwarf2Data, cu, DW_AT_high_pc, form_value))
>>>> +    {
>>>> +        dw_addr_t hi_pc = form_value.Unsigned();
>>>> +        if (form_value.Form() != DW_FORM_addr)
>>>> +            hi_pc += lo_pc; // DWARF4 can specify the hi_pc as an <offset-from-lowpc>
>>>> +        return hi_pc;
>>>> +    }
>>>> +    return fail_value;
>>>> +}
>>>> +
>>>> +//----------------------------------------------------------------------
>>>> +// GetAttributeAddressRange
>>>> +//
>>>> +// Get the lo_pc and hi_pc, adding hi_pc to lo_pc when specified
>>>> +// as an <offset-from-low-pc>.
>>>> +//
>>>> +// Returns true or sets lo_pc and hi_pc to fail_value.
>>>> +//----------------------------------------------------------------------
>>>> +bool
>>>> +DWARFDebugInfoEntry::GetAttributeAddressRange
>>>> +(
>>>> +    SymbolFileDWARF* dwarf2Data,
>>>> +    const DWARFCompileUnit* cu,
>>>> +    dw_addr_t& lo_pc,
>>>> +    dw_addr_t& hi_pc,
>>>> +    uint64_t fail_value
>>>> +) const
>>>> +{
>>>> +    lo_pc = GetAttributeValueAsUnsigned(dwarf2Data, cu, DW_AT_low_pc, fail_value);
>>>> +    if (lo_pc != fail_value)
>>>> +    {
>>>> +        hi_pc = GetAttributeHighPC(dwarf2Data, cu, lo_pc, fail_value);
>>>> +        if (hi_pc != fail_value)
>>>> +          return true;
>>>> +    }
>>>> +    lo_pc = fail_value;
>>>> +    hi_pc = fail_value;
>>>> +    return false;
>>>> +}
>>>> +//----------------------------------------------------------------------
>>>> // GetAttributeValueAsLocation
>>>> //
>>>> // Get the value of an attribute as reference and fix up and compile
>>>> @@ -1740,13 +1812,11 @@ DWARFDebugInfoEntry::BuildAddressRangeTa
>>>>  {
>>>>      if (m_tag == DW_TAG_subprogram)
>>>>      {
>>>> +            dw_addr_t lo_pc = LLDB_INVALID_ADDRESS;
>>>>          dw_addr_t hi_pc = LLDB_INVALID_ADDRESS;
>>>> -            dw_addr_t lo_pc = GetAttributeValueAsUnsigned(dwarf2Data, cu, DW_AT_low_pc, LLDB_INVALID_ADDRESS);
>>>> -            if (lo_pc != LLDB_INVALID_ADDRESS)
>>>> -                hi_pc = GetAttributeValueAsUnsigned(dwarf2Data, cu, DW_AT_high_pc, LLDB_INVALID_ADDRESS);
>>>> -            if (hi_pc != LLDB_INVALID_ADDRESS)
>>>> +            if (GetAttributeAddressRange(dwarf2Data, cu, lo_pc, hi_pc, LLDB_INVALID_ADDRESS))
>>>>          {
>>>> -            /// printf("BuildAddressRangeTable() 0x%8.8x: %30s: [0x%8.8x - 0x%8.8x)\n", m_offset, DW_TAG_value_to_name(tag), lo_pc, hi_pc);
>>>> +                /// printf("BuildAddressRangeTable() 0x%8.8x: %30s: [0x%8.8x - 0x%8.8x)\n", m_offset, DW_TAG_value_to_name(tag), lo_pc, hi_pc);
>>>>              debug_aranges->AppendRange (cu->GetOffset(), lo_pc, hi_pc);
>>>>          }
>>>>      }
>>>> @@ -1781,11 +1851,9 @@ DWARFDebugInfoEntry::BuildFunctionAddres
>>>>  {
>>>>      if (m_tag == DW_TAG_subprogram)
>>>>      {
>>>> +            dw_addr_t lo_pc = LLDB_INVALID_ADDRESS;
>>>>          dw_addr_t hi_pc = LLDB_INVALID_ADDRESS;
>>>> -            dw_addr_t lo_pc = GetAttributeValueAsUnsigned(dwarf2Data, cu, DW_AT_low_pc, LLDB_INVALID_ADDRESS);
>>>> -            if (lo_pc != LLDB_INVALID_ADDRESS)
>>>> -                hi_pc = GetAttributeValueAsUnsigned(dwarf2Data, cu, DW_AT_high_pc, LLDB_INVALID_ADDRESS);
>>>> -            if (hi_pc != LLDB_INVALID_ADDRESS)
>>>> +            if (GetAttributeAddressRange(dwarf2Data, cu, lo_pc, hi_pc, LLDB_INVALID_ADDRESS))
>>>>          {
>>>>          //  printf("BuildAddressRangeTable() 0x%8.8x: [0x%16.16" PRIx64 " - 0x%16.16" PRIx64 ")\n", m_offset, lo_pc, hi_pc); // DEBUG ONLY
>>>>              debug_aranges->AppendRange (GetOffset(), lo_pc, hi_pc);
>>>> @@ -2075,7 +2143,7 @@ DWARFDebugInfoEntry::LookupAddress
>>>>          dw_addr_t lo_pc = GetAttributeValueAsUnsigned(dwarf2Data, cu, DW_AT_low_pc, LLDB_INVALID_ADDRESS);
>>>>          if (lo_pc != LLDB_INVALID_ADDRESS)
>>>>          {
>>>> -                dw_addr_t hi_pc = GetAttributeValueAsUnsigned(dwarf2Data, cu, DW_AT_high_pc, LLDB_INVALID_ADDRESS);
>>>> +                dw_addr_t hi_pc = GetAttributeHighPC(dwarf2Data, cu, lo_pc, LLDB_INVALID_ADDRESS);
>>>>              if (hi_pc != LLDB_INVALID_ADDRESS)
>>>>              {
>>>>                  //  printf("\n0x%8.8x: %30s: address = 0x%8.8x  [0x%8.8x - 0x%8.8x) ", m_offset, DW_TAG_value_to_name(tag), address, lo_pc, hi_pc);
>>>> 
>>>> Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h
>>>> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h?rev=187125&r1=187124&r2=187125&view=diff
>>>> ==============================================================================
>>>> --- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h (original)
>>>> +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h Thu Jul 25 10:13:50 2013
>>>> @@ -197,6 +197,19 @@ public:
>>>>                  const dw_attr_t attr,
>>>>                  int64_t fail_value) const;
>>>> 
>>>> +    dw_addr_t   GetAttributeHighPC(
>>>> +                    SymbolFileDWARF* dwarf2Data,
>>>> +                    const DWARFCompileUnit* cu,
>>>> +                    dw_addr_t lo_pc,
>>>> +                    uint64_t fail_value) const;
>>>> +
>>>> +    bool        GetAttributeAddressRange(
>>>> +                    SymbolFileDWARF* dwarf2Data,
>>>> +                    const DWARFCompileUnit* cu,
>>>> +                    dw_addr_t& lo_pc,
>>>> +                    dw_addr_t& hi_pc,
>>>> +                    uint64_t fail_value) const;
>>>> +
>>>>  dw_offset_t GetAttributeValueAsLocation(
>>>>                  SymbolFileDWARF* dwarf2Data,
>>>>                  const DWARFCompileUnit* cu,
>>>> 
>>>> 
>>>> _______________________________________________
>>>> lldb-commits mailing list
>>>> lldb-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>>>> 
>>>> On Mar 7, 2014, at 1:53 PM, Greg Clayton <gclayton at apple.com> wrote:
>>>> 
>>>>> I just looked at the code and we do have code in LLDB to handle this already. Were you seeing errors on the LLDB test suite?
>>>>> 
>>>>> On Mar 6, 2014, at 6:29 PM, David Blaikie <dblaikie at gmail.com> wrote:
>>>>> 
>>>>>> On Thu, Mar 6, 2014 at 6:19 PM, David Blaikie <dblaikie at gmail.com> wrote:
>>>>>>> Author: dblaikie
>>>>>>> Date: Thu Mar  6 20:19:41 2014
>>>>>>> New Revision: 203192
>>>>>>> 
>>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=203192&view=rev
>>>>>>> Log:
>>>>>>> DebugInfo: Limit r203187 to non-darwin as lldb can't handle this yet
>>>>>> 
>>>>>> Adrian, Greg,
>>>>>> 
>>>>>> You guys might want to consider supporting this in lld as it'll reduce
>>>>>> the number of relocations for debug info quite substantially (I
>>>>>> haven't gathered numbers yet, but working on it - we're over 50%
>>>>>> higher on relocations in debug_info than GCC ToT, we're hoping this
>>>>>> issue is most of that)
>>>>>> 
>>>>>>> 
>>>>>>> Modified:
>>>>>>> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>>>>>>> llvm/trunk/test/DebugInfo/X86/dbg-value-location.ll
>>>>>>> 
>>>>>>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=203192&r1=203191&r2=203192&view=diff
>>>>>>> ==============================================================================
>>>>>>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
>>>>>>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Thu Mar  6 20:19:41 2014
>>>>>>> @@ -413,8 +413,11 @@ DIE *DwarfDebug::updateSubprogramScopeDI
>>>>>>> }
>>>>>>> 
>>>>>>> SPCU->addLabelAddress(SPDie, dwarf::DW_AT_low_pc, FunctionBeginSym);
>>>>>>> -  SPCU->addLabelDelta(SPDie, dwarf::DW_AT_high_pc, FunctionEndSym,
>>>>>>> -                      FunctionBeginSym);
>>>>>>> +  if (Triple(Asm->getTargetTriple()).isOSDarwin())
>>>>>>> +    SPCU->addLabelAddress(SPDie, dwarf::DW_AT_high_pc, FunctionEndSym);
>>>>>>> +  else
>>>>>>> +    SPCU->addLabelDelta(SPDie, dwarf::DW_AT_high_pc, FunctionEndSym,
>>>>>>> +                        FunctionBeginSym);
>>>>>>> 
>>>>>>> const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
>>>>>>> MachineLocation Location(RI->getFrameRegister(*Asm->MF));
>>>>>>> 
>>>>>>> Modified: llvm/trunk/test/DebugInfo/X86/dbg-value-location.ll
>>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-value-location.ll?rev=203192&r1=203191&r2=203192&view=diff
>>>>>>> ==============================================================================
>>>>>>> --- llvm/trunk/test/DebugInfo/X86/dbg-value-location.ll (original)
>>>>>>> +++ llvm/trunk/test/DebugInfo/X86/dbg-value-location.ll Thu Mar  6 20:19:41 2014
>>>>>>> @@ -4,7 +4,7 @@ target datalayout = "e-p:64:64:64-i1:8:8
>>>>>>> target triple = "x86_64-apple-darwin10.0.0"
>>>>>>> ;Radar 8950491
>>>>>>> 
>>>>>>> -;CHECK: .long Lset6
>>>>>>> +;CHECK: .long Lset5
>>>>>>> ;CHECK-NEXT:        ## DW_AT_decl_file
>>>>>>> ;CHECK-NEXT:        ## DW_AT_decl_line
>>>>>>> ;CHECK-NEXT:        ## DW_AT_type
>>>>>>> 
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> llvm-commits mailing list
>>>>>>> llvm-commits at cs.uiuc.edu
>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>>> 
>>>> 
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> 
> _______________________________________________
> 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