summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-dwp/llvm-dwp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-dwp/llvm-dwp.cpp')
-rw-r--r--llvm/tools/llvm-dwp/llvm-dwp.cpp12
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:
OpenPOWER on IntegriCloud