[llvm] r237721 - [DWARF parser] Add basic support for DWZ DWARF multifile extensions.

Alexey Samsonov vonosmas at gmail.com
Wed May 20 11:24:54 PDT 2015


Looks like the object file added as a testcase contains invalid ELF
(.symtab section is not aligned properly). I will send the bug report to
dwz developers.

On Wed, May 20, 2015 at 10:47 AM, Sanjay Patel <spatel at rotateright.com>
wrote:

> Hi Alexey -
>
> I have zero knowledge of LLVMObject, but if I can assist by running any
> experiments / testcases, please let me know.
>
>
> On Wed, May 20, 2015 at 11:06 AM, Alexey Samsonov <vonosmas at gmail.com>
> wrote:
>
>> Interesting. This looks like a bug in LLVMObject library. I can't
>> reproduce this specific failure, but instead can make llvm-symbolizer crash
>> on the same object file.
>>
>> I'll revert the test case while I'm investigating it. Help in figuring
>> out the problem in Object library is welcome.
>>
>> On Wed, May 20, 2015 at 8:36 AM, Sanjay Patel <spatel at rotateright.com>
>> wrote:
>>
>>> Anyone else seeing this 'make check' failure? I'm running Darwin x86-64;
>>> fails the same on 2 different machines.
>>>
>>> FAIL: LLVM :: DebugInfo/dwarfdump-dwz.test (7308 of 13739)
>>> ******************** TEST 'LLVM :: DebugInfo/dwarfdump-dwz.test' FAILED
>>> ********************
>>> Script:
>>> --
>>> /Users/spatel/myllvm/build/./bin/llvm-dwarfdump
>>> /Users/spatel/myllvm/llvm/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64
>>> -debug-dump=info | /Users/spatel/myllvm/build/./bin/FileCheck
>>> /Users/spatel/myllvm/llvm/test/DebugInfo/dwarfdump-dwz.test -check-prefix
>>> DUMP_INFO
>>> --
>>> Exit Code: 2
>>>
>>> Command Output (stderr):
>>> --
>>> 0  llvm-dwarfdump           0x000000010b1e523e
>>> llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 46
>>> 1  llvm-dwarfdump           0x000000010b1e6b09
>>> PrintStackTraceSignalHandler(void*) + 25
>>> 2  llvm-dwarfdump           0x000000010b1e6f68 SignalHandler(int) + 584
>>> 3  libsystem_platform.dylib 0x00007fff8f71bf1a _sigtramp + 26
>>> 4  libsystem_platform.dylib 0x00007fff54bb0690 _sigtramp + 3309914000
>>> 5  llvm-dwarfdump           0x000000010b0dd1ba
>>> llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1,
>>> 2ul, true> >::ELFFile(llvm::StringRef, std::__1::error_code&) + 1882
>>> 6  llvm-dwarfdump           0x000000010b0d387d
>>> llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1,
>>> 2ul, true> >::ELFFile(llvm::StringRef, std::__1::error_code&) + 45
>>> 7  llvm-dwarfdump           0x000000010b0d383c
>>> llvm::object::ELFObjectFile<llvm::object::ELFType<(llvm::support::endianness)1,
>>> 2ul, true> >::ELFObjectFile(llvm::MemoryBufferRef, std::__1::error_code&) +
>>> 220
>>> 8  llvm-dwarfdump           0x000000010b0d3483
>>> llvm::object::ELFObjectFile<llvm::object::ELFType<(llvm::support::endianness)1,
>>> 2ul, true> >::ELFObjectFile(llvm::MemoryBufferRef, std::__1::error_code&) +
>>> 67
>>> 9  llvm-dwarfdump           0x000000010b0d2bfa
>>> llvm::object::ObjectFile::createELFObjectFile(llvm::MemoryBufferRef) + 1994
>>> 10 llvm-dwarfdump           0x000000010b11b834
>>> llvm::object::ObjectFile::createObjectFile(llvm::MemoryBufferRef,
>>> llvm::sys::fs::file_magic) + 308
>>> 11 llvm-dwarfdump           0x000000010b0583e6
>>> llvm::object::ObjectFile::createObjectFile(llvm::MemoryBufferRef) + 118
>>> 12 llvm-dwarfdump           0x000000010b05036e
>>> DumpInput(llvm::StringRef) + 798
>>> 13 llvm-dwarfdump           0x000000010b04ffee main + 1518
>>> 14 libdyld.dylib            0x00007fff8f1d25c9 start + 1
>>> 15 libdyld.dylib            0x0000000000000003 start + 1893915195
>>> Stack dump:
>>> 0.    Program arguments: /Users/spatel/myllvm/build/./bin/llvm-dwarfdump
>>> /Users/spatel/myllvm/llvm/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64
>>> -debug-dump=info
>>> FileCheck error: '-' is empty.
>>>
>>>
>>> On Tue, May 19, 2015 at 2:29 PM, Alexey Samsonov <vonosmas at gmail.com>
>>> wrote:
>>>
>>>> Author: samsonov
>>>> Date: Tue May 19 15:29:28 2015
>>>> New Revision: 237721
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=237721&view=rev
>>>> Log:
>>>> [DWARF parser] Add basic support for DWZ DWARF multifile extensions.
>>>>
>>>> This change implements basic support for DWARF alternate sections
>>>> proposal:
>>>> http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open
>>>>
>>>> LLVM tools now understand new forms: DW_FORM_GNU_ref_alt and
>>>> DW_FORM_GNU_strp_alt, which are used as references to .debug_info and
>>>> .debug_str sections respectively, stored in a separate file, and
>>>> possibly shared between different executables / shared objects.
>>>>
>>>> llvm-dwarfdump and llvm-symbolizer don't yet know how to access this
>>>> alternate debug file (usually pointed by .gnu_debugaltlink section),
>>>> but they can at lease properly parse and dump regular files, which
>>>> refer to it.
>>>>
>>>> This change should fix crashes of llvm-dwarfdump and llvm-symbolizer on
>>>> files produced by running "dwz" tool. Such files are already installed
>>>> on some modern Linux distributions.
>>>>
>>>> Added:
>>>>     llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64
>>>>  (with props)
>>>>     llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.dwz
>>>>     llvm/trunk/test/DebugInfo/dwarfdump-dwz.test
>>>> Modified:
>>>>     llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFFormValue.h
>>>>     llvm/trunk/include/llvm/Support/Dwarf.h
>>>>     llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugInfoEntry.cpp
>>>>     llvm/trunk/lib/DebugInfo/DWARF/DWARFFormValue.cpp
>>>>     llvm/trunk/lib/Support/Dwarf.cpp
>>>>     llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.cc
>>>>
>>>> Modified: llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFFormValue.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFFormValue.h?rev=237721&r1=237720&r2=237721&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFFormValue.h (original)
>>>> +++ llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFFormValue.h Tue May 19
>>>> 15:29:28 2015
>>>> @@ -87,6 +87,8 @@ public:
>>>>
>>>>    static ArrayRef<uint8_t> getFixedFormSizes(uint8_t AddrSize,
>>>>                                               uint16_t Version);
>>>> +private:
>>>> +  void dumpString(raw_ostream &OS, const DWARFUnit *U) const;
>>>>  };
>>>>
>>>>  }
>>>>
>>>> Modified: llvm/trunk/include/llvm/Support/Dwarf.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Dwarf.h?rev=237721&r1=237720&r2=237721&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/include/llvm/Support/Dwarf.h (original)
>>>> +++ llvm/trunk/include/llvm/Support/Dwarf.h Tue May 19 15:29:28 2015
>>>> @@ -285,7 +285,11 @@ enum Form : uint16_t {
>>>>
>>>>    // Extensions for Fission proposal
>>>>    DW_FORM_GNU_addr_index = 0x1f01,
>>>> -  DW_FORM_GNU_str_index = 0x1f02
>>>> +  DW_FORM_GNU_str_index = 0x1f02,
>>>> +
>>>> +  // Alternate debug sections proposal (output of "dwz" tool).
>>>> +  DW_FORM_GNU_ref_alt = 0x1f20,
>>>> +  DW_FORM_GNU_strp_alt = 0x1f21
>>>>  };
>>>>
>>>>  enum LocationAtom {
>>>>
>>>> Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugInfoEntry.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugInfoEntry.cpp?rev=237721&r1=237720&r2=237721&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugInfoEntry.cpp (original)
>>>> +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugInfoEntry.cpp Tue May 19
>>>> 15:29:28 2015
>>>> @@ -161,14 +161,15 @@ void DWARFDebugInfoEntryMinimal::dumpAtt
>>>>    // We have dumped the attribute raw value. For some attributes
>>>>    // having both the raw value and the pretty-printed value is
>>>>    // interesting. These attributes are handled below.
>>>> -  if ((attr == DW_AT_specification || attr == DW_AT_abstract_origin) &&
>>>> -      // The signature references aren't handled.
>>>> -      formValue.getForm() != DW_FORM_ref_sig8) {
>>>> -    uint32_t Ref = formValue.getAsReference(u).getValue();
>>>> -    DWARFDebugInfoEntryMinimal DIE;
>>>> -    if (const DWARFUnit *RefU = findUnitAndExtractFast(DIE, u, &Ref))
>>>> -      if (const char *Ref = DIE.getName(RefU, DINameKind::LinkageName))
>>>> -        OS << " \"" << Ref << '\"';
>>>> +  if (attr == DW_AT_specification || attr == DW_AT_abstract_origin) {
>>>> +    Optional<uint64_t> Ref = formValue.getAsReference(u);
>>>> +    if (Ref.hasValue()) {
>>>> +      uint32_t RefOffset = Ref.getValue();
>>>> +      DWARFDebugInfoEntryMinimal DIE;
>>>> +      if (const DWARFUnit *RefU = findUnitAndExtractFast(DIE, u,
>>>> &RefOffset))
>>>> +        if (const char *Name = DIE.getName(RefU,
>>>> DINameKind::LinkageName))
>>>> +          OS << " \"" << Name << '\"';
>>>> +    }
>>>>    } else if (attr == DW_AT_APPLE_property_attribute) {
>>>>      if (Optional<uint64_t> OptVal = formValue.getAsUnsignedConstant())
>>>>        dumpApplePropertyAttribute(OS, *OptVal);
>>>>
>>>> Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFFormValue.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFFormValue.cpp?rev=237721&r1=237720&r2=237721&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/DebugInfo/DWARF/DWARFFormValue.cpp (original)
>>>> +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFFormValue.cpp Tue May 19
>>>> 15:29:28 2015
>>>> @@ -113,14 +113,17 @@ bool DWARFFormValue::isFormClass(DWARFFo
>>>>    if (Form < ArrayRef<FormClass>(DWARF4FormClasses).size() &&
>>>>        DWARF4FormClasses[Form] == FC)
>>>>      return true;
>>>> -  // Check DW_FORM_ref_sig8 from DWARF4.
>>>> -  if (Form == DW_FORM_ref_sig8)
>>>> +  // Check more forms from DWARF4 and DWARF5 proposals.
>>>> +  switch (Form) {
>>>> +  case DW_FORM_ref_sig8:
>>>> +  case DW_FORM_GNU_ref_alt:
>>>>      return (FC == FC_Reference);
>>>> -  // Check for some DWARF5 forms.
>>>> -  if (Form == DW_FORM_GNU_addr_index)
>>>> +  case DW_FORM_GNU_addr_index:
>>>>      return (FC == FC_Address);
>>>> -  if (Form == DW_FORM_GNU_str_index)
>>>> +  case DW_FORM_GNU_str_index:
>>>> +  case DW_FORM_GNU_strp_alt:
>>>>      return (FC == FC_String);
>>>> +  }
>>>>    // In DWARF3 DW_FORM_data4 and DW_FORM_data8 served also as a
>>>> section offset.
>>>>    // Don't check for DWARF version here, as some producers may still
>>>> do this
>>>>    // by mistake.
>>>> @@ -199,15 +202,6 @@ bool DWARFFormValue::extractValue(DataEx
>>>>      case DW_FORM_sdata:
>>>>        Value.sval = data.getSLEB128(offset_ptr);
>>>>        break;
>>>> -    case DW_FORM_strp: {
>>>> -      Value.uval = data.getU32(offset_ptr);
>>>> -      if (!cu)
>>>> -        break;
>>>> -      RelocAddrMap::const_iterator AI =
>>>> cu->getRelocMap()->find(*offset_ptr-4);
>>>> -      if (AI != cu->getRelocMap()->end())
>>>> -        Value.uval += AI->second.second;
>>>> -      break;
>>>> -    }
>>>>      case DW_FORM_udata:
>>>>      case DW_FORM_ref_udata:
>>>>        Value.uval = data.getULEB128(offset_ptr);
>>>> @@ -219,14 +213,18 @@ bool DWARFFormValue::extractValue(DataEx
>>>>        Form = data.getULEB128(offset_ptr);
>>>>        indirect = true;
>>>>        break;
>>>> -    case DW_FORM_sec_offset: {
>>>> +    case DW_FORM_sec_offset:
>>>> +    case DW_FORM_strp:
>>>> +    case DW_FORM_GNU_ref_alt:
>>>> +    case DW_FORM_GNU_strp_alt: {
>>>>        // FIXME: This is 64-bit for DWARF64.
>>>>        Value.uval = data.getU32(offset_ptr);
>>>>        if (!cu)
>>>>          break;
>>>> -      RelocAddrMap::const_iterator AI =
>>>> cu->getRelocMap()->find(*offset_ptr-4);
>>>> +      RelocAddrMap::const_iterator AI =
>>>> +          cu->getRelocMap()->find(*offset_ptr - 4);
>>>>        if (AI != cu->getRelocMap()->end())
>>>> -        Value.uval +=  AI->second.second;
>>>> +        Value.uval += AI->second.second;
>>>>        break;
>>>>      }
>>>>      case DW_FORM_flag_present:
>>>> @@ -323,7 +321,6 @@ DWARFFormValue::skipValue(uint16_t form,
>>>>        return true;
>>>>
>>>>      // 4 byte values
>>>> -    case DW_FORM_strp:
>>>>      case DW_FORM_data4:
>>>>      case DW_FORM_ref4:
>>>>        *offset_ptr += 4;
>>>> @@ -353,6 +350,9 @@ DWARFFormValue::skipValue(uint16_t form,
>>>>
>>>>      // FIXME: 4 for DWARF32, 8 for DWARF64.
>>>>      case DW_FORM_sec_offset:
>>>> +    case DW_FORM_strp:
>>>> +    case DW_FORM_GNU_ref_alt:
>>>> +    case DW_FORM_GNU_strp_alt:
>>>>        *offset_ptr += 4;
>>>>        return true;
>>>>
>>>> @@ -424,24 +424,17 @@ DWARFFormValue::dump(raw_ostream &OS, co
>>>>    case DW_FORM_udata:     OS << Value.uval; break;
>>>>    case DW_FORM_strp: {
>>>>      OS << format(" .debug_str[0x%8.8x] = ", (uint32_t)uvalue);
>>>> -    Optional<const char *> DbgStr = getAsCString(cu);
>>>> -    if (DbgStr.hasValue()) {
>>>> -      raw_ostream &COS = WithColor(OS, syntax::String);
>>>> -      COS << '"';
>>>> -      COS.write_escaped(DbgStr.getValue());
>>>> -      COS << '"';
>>>> -    }
>>>> +    dumpString(OS, cu);
>>>>      break;
>>>>    }
>>>>    case DW_FORM_GNU_str_index: {
>>>>      OS << format(" indexed (%8.8x) string = ", (uint32_t)uvalue);
>>>> -    Optional<const char *> DbgStr = getAsCString(cu);
>>>> -    if (DbgStr.hasValue()) {
>>>> -      raw_ostream &COS = WithColor(OS, syntax::String);
>>>> -      COS << '"';
>>>> -      COS.write_escaped(DbgStr.getValue());
>>>> -      COS << '"';
>>>> -    }
>>>> +    dumpString(OS, cu);
>>>> +    break;
>>>> +  }
>>>> +  case DW_FORM_GNU_strp_alt: {
>>>> +    OS << format("alt indirect string, offset: 0x%" PRIx64 "", uvalue);
>>>> +    dumpString(OS, cu);
>>>>      break;
>>>>    }
>>>>    case DW_FORM_ref_addr:
>>>> @@ -467,6 +460,9 @@ DWARFFormValue::dump(raw_ostream &OS, co
>>>>      cu_relative_offset = true;
>>>>      OS << format("cu + 0x%" PRIx64, uvalue);
>>>>      break;
>>>> +  case DW_FORM_GNU_ref_alt:
>>>> +    OS << format("<alt 0x%" PRIx64 ">", uvalue);
>>>> +    break;
>>>>
>>>>      // All DW_FORM_indirect attributes should be resolved prior to
>>>> calling
>>>>      // this function
>>>> @@ -492,12 +488,23 @@ DWARFFormValue::dump(raw_ostream &OS, co
>>>>    }
>>>>  }
>>>>
>>>> +void DWARFFormValue::dumpString(raw_ostream &OS, const DWARFUnit *U)
>>>> const {
>>>> +  Optional<const char *> DbgStr = getAsCString(U);
>>>> +  if (DbgStr.hasValue()) {
>>>> +    raw_ostream &COS = WithColor(OS, syntax::String);
>>>> +    COS << '"';
>>>> +    COS.write_escaped(DbgStr.getValue());
>>>> +    COS << '"';
>>>> +  }
>>>> +}
>>>> +
>>>>  Optional<const char *> DWARFFormValue::getAsCString(const DWARFUnit
>>>> *U) const {
>>>>    if (!isFormClass(FC_String))
>>>>      return None;
>>>>    if (Form == DW_FORM_string)
>>>>      return Value.cstr;
>>>> -  if (!U)
>>>> +  // FIXME: Add support for DW_FORM_GNU_strp_alt
>>>> +  if (Form == DW_FORM_GNU_strp_alt || U == nullptr)
>>>>      return None;
>>>>    uint32_t Offset = Value.uval;
>>>>    if (Form == DW_FORM_GNU_str_index) {
>>>> @@ -539,9 +546,9 @@ Optional<uint64_t> DWARFFormValue::getAs
>>>>      return Value.uval + U->getOffset();
>>>>    case DW_FORM_ref_addr:
>>>>      return Value.uval;
>>>> -  // FIXME: Add proper support for DW_FORM_ref_sig8
>>>> +  // FIXME: Add proper support for DW_FORM_ref_sig8 and
>>>> DW_FORM_GNU_ref_alt.
>>>>    default:
>>>> -    return Value.uval;
>>>> +    return None;
>>>>    }
>>>>  }
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Support/Dwarf.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Dwarf.cpp?rev=237721&r1=237720&r2=237721&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Support/Dwarf.cpp (original)
>>>> +++ llvm/trunk/lib/Support/Dwarf.cpp Tue May 19 15:29:28 2015
>>>> @@ -233,6 +233,10 @@ const char *llvm::dwarf::FormEncodingStr
>>>>      // DWARF5 Fission Extension Forms
>>>>    case DW_FORM_GNU_addr_index:           return
>>>> "DW_FORM_GNU_addr_index";
>>>>    case DW_FORM_GNU_str_index:            return
>>>> "DW_FORM_GNU_str_index";
>>>> +
>>>> +  // Alternate debug sections proposal (output of "dwz" tool).
>>>> +  case DW_FORM_GNU_ref_alt:              return "DW_FORM_GNU_ref_alt";
>>>> +  case DW_FORM_GNU_strp_alt:             return "DW_FORM_GNU_strp_alt";
>>>>    }
>>>>    return nullptr;
>>>>  }
>>>>
>>>> Added: llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64?rev=237721&view=auto
>>>>
>>>> ==============================================================================
>>>> Binary files
>>>> llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64 (added) and
>>>> llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64 Tue May 19
>>>> 15:29:28 2015 differ
>>>>
>>>> Propchange:
>>>> llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64
>>>>
>>>> ------------------------------------------------------------------------------
>>>>     svn:executable = *
>>>>
>>>> Modified: llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.cc
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.cc?rev=237721&r1=237720&r2=237721&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.cc (original)
>>>> +++ llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.cc Tue May 19
>>>> 15:29:28 2015
>>>> @@ -21,3 +21,9 @@ int main() {
>>>>  // $ cp dwarfdump-test.cc /tmp/dbginfo
>>>>  // $ cd /tmp/dbginfo
>>>>  // $ clang++ -g dwarfdump-test.cc -o <output>
>>>> +
>>>> +// The result is also used as an input to .dwz tool:
>>>> +// $ cp <output> output1.dwz
>>>> +// $ cp <output> output2.dwz
>>>> +// $ dwz -m output.dwz -r output1.dwz output2.dwz
>>>> +// $ rm output2.dwz
>>>>
>>>> Added: llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.dwz
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.dwz?rev=237721&view=auto
>>>>
>>>> ==============================================================================
>>>> Binary files
>>>> llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.dwz (added) and
>>>> llvm/trunk/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.dwz Tue May 19
>>>> 15:29:28 2015 differ
>>>>
>>>> Added: llvm/trunk/test/DebugInfo/dwarfdump-dwz.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/dwarfdump-dwz.test?rev=237721&view=auto
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/DebugInfo/dwarfdump-dwz.test (added)
>>>> +++ llvm/trunk/test/DebugInfo/dwarfdump-dwz.test Tue May 19 15:29:28
>>>> 2015
>>>> @@ -0,0 +1,14 @@
>>>> +; RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test-dwz.elf-x86-64
>>>> -debug-dump=info | FileCheck %s -check-prefix DUMP_INFO
>>>> +
>>>> +; DUMP_INFO: .debug_info
>>>> +; DUMP_INFO: DW_TAG_compile_unit [2] *
>>>> +; DUMP_INFO-NEXT: DW_AT_producer [DW_FORM_GNU_strp_alt]     (alt
>>>> indirect string, offset: 0x0)
>>>> +; DUMP_INFO-NEXT: DW_AT_language [DW_FORM_data2]
>>>> (DW_LANG_C_plus_plus)
>>>> +; DUMP_INFO-NEXT: DW_AT_name [DW_FORM_GNU_strp_alt] (alt indirect
>>>> string, offset: 0x31)
>>>> +; DUMP_INFO-NEXT: DW_AT_low_pc [DW_FORM_addr]
>>>>  (0x0000000000000000)
>>>> +; DUMP_INFO-NEXT: DW_AT_stmt_list [DW_FORM_data4]   (0x00000000)
>>>> +; DUMP_INFO-NEXT: DW_AT_comp_dir [DW_FORM_GNU_strp_alt]     (alt
>>>> indirect string, offset: 0x6b)
>>>> +
>>>> +; DUMP_INFO: DW_TAG_imported_unit [4]
>>>> +; DUMP_INFO-NEXT: DW_AT_import [DW_FORM_GNU_ref_alt]      (<alt 0xb>)
>>>> +
>>>>
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>>
>>>
>>>
>>
>>
>> --
>> Alexey Samsonov
>> vonosmas at gmail.com
>>
>
>


-- 
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150520/e21fc09f/attachment.html>


More information about the llvm-commits mailing list