[llvm] r237721 - [DWARF parser] Add basic support for DWZ DWARF multifile extensions.
Sanjay Patel
spatel at rotateright.com
Wed May 20 10:47:42 PDT 2015
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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150520/fd6bcf77/attachment.html>
More information about the llvm-commits
mailing list