diff options
author | David Blaikie <dblaikie@gmail.com> | 2016-04-05 20:16:38 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2016-04-05 20:16:38 +0000 |
commit | 60fbd3bdb78c0b220f63fa886c877ac7adc6bca7 (patch) | |
tree | bbb0248d642591519e9e2fe85664dae0d8258168 /llvm/tools/llvm-dwp/llvm-dwp.cpp | |
parent | ee5417da8fd793f30779d54044728ce5d6bff6b7 (diff) | |
download | bcm5719-llvm-60fbd3bdb78c0b220f63fa886c877ac7adc6bca7.tar.gz bcm5719-llvm-60fbd3bdb78c0b220f63fa886c877ac7adc6bca7.zip |
llvm-dwp: Handle dwo files produced by GCC
To start with, handle DW_FORM_string names. Follow up commit will handle
the interesting quirk with type units I was originally aiming for here.
llvm-svn: 265452
Diffstat (limited to 'llvm/tools/llvm-dwp/llvm-dwp.cpp')
-rw-r--r-- | llvm/tools/llvm-dwp/llvm-dwp.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/llvm/tools/llvm-dwp/llvm-dwp.cpp b/llvm/tools/llvm-dwp/llvm-dwp.cpp index 737e396ed74..f9dada2075b 100644 --- a/llvm/tools/llvm-dwp/llvm-dwp.cpp +++ b/llvm/tools/llvm-dwp/llvm-dwp.cpp @@ -126,8 +126,13 @@ struct CompileUnitIdentifiers { const char *DWOName = ""; }; -static const char *getIndexedString(uint32_t StrIndex, StringRef StrOffsets, +static const char *getIndexedString(uint32_t Form, DataExtractor InfoData, + uint32_t &InfoOffset, StringRef StrOffsets, StringRef Str) { + if (Form == dwarf::DW_FORM_string) + return InfoData.getCStr(&InfoOffset); + assert(Form == dwarf::DW_FORM_GNU_str_index); + auto StrIndex = InfoData.getULEB128(&InfoOffset); DataExtractor StrOffsetsData(StrOffsets, true, 0); uint32_t StrOffsetsOffset = 4 * StrIndex; uint32_t StrOffset = StrOffsetsData.getU32(&StrOffsetsOffset); @@ -163,12 +168,11 @@ static CompileUnitIdentifiers getCUIdentifiers(StringRef Abbrev, StringRef Info, (Name != 0 || Form != 0)) { switch (Name) { case dwarf::DW_AT_name: { - ID.Name = getIndexedString(InfoData.getULEB128(&Offset), StrOffsets, Str); + ID.Name = getIndexedString(Form, InfoData, Offset, StrOffsets, Str); break; } case dwarf::DW_AT_GNU_dwo_name: { - ID.DWOName = - getIndexedString(InfoData.getULEB128(&Offset), StrOffsets, Str); + ID.DWOName = getIndexedString(Form, InfoData, Offset, StrOffsets, Str); break; } case dwarf::DW_AT_GNU_dwo_id: |