diff options
author | Zachary Turner <zturner@google.com> | 2017-05-03 17:11:11 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2017-05-03 17:11:11 +0000 |
commit | 2d5c2cd3ce208ebfac2bceb4c73157bef4e00fdc (patch) | |
tree | f3a5c0de380443aa47cc2d67fc0badacbceaf3d9 /llvm/tools/llvm-pdbdump | |
parent | 761bcdaf066f55075989dac2dbf0ebb148198ee0 (diff) | |
download | bcm5719-llvm-2d5c2cd3ce208ebfac2bceb4c73157bef4e00fdc.tar.gz bcm5719-llvm-2d5c2cd3ce208ebfac2bceb4c73157bef4e00fdc.zip |
[llvm-readobj] Update readobj to re-use parsing code.
llvm-readobj hand rolls some CodeView parsing code for string
tables, so this patch updates it to re-use some of the newly
introduced parsing code in LLVMDebugInfoCodeView.
Differential Revision: https://reviews.llvm.org/D32772
llvm-svn: 302052
Diffstat (limited to 'llvm/tools/llvm-pdbdump')
-rw-r--r-- | llvm/tools/llvm-pdbdump/Diff.cpp | 26 | ||||
-rw-r--r-- | llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp | 26 | ||||
-rw-r--r-- | llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp | 9 |
3 files changed, 42 insertions, 19 deletions
diff --git a/llvm/tools/llvm-pdbdump/Diff.cpp b/llvm/tools/llvm-pdbdump/Diff.cpp index ddae9b708b6..418c2361ac3 100644 --- a/llvm/tools/llvm-pdbdump/Diff.cpp +++ b/llvm/tools/llvm-pdbdump/Diff.cpp @@ -394,11 +394,17 @@ Error DiffStyle::diffStringTable() { StringRef S1, S2; if (I < IdList1.size()) { Id1 = IdList1[I]; - S1 = ST1.getStringForID(*Id1); + if (auto Result = ST1.getStringForID(*Id1)) + S1 = *Result; + else + return Result.takeError(); } if (I < IdList2.size()) { Id2 = IdList2[I]; - S2 = ST2.getStringForID(*Id2); + if (auto Result = ST2.getStringForID(*Id2)) + S2 = *Result; + else + return Result.takeError(); } if (Id1 == Id2 && S1 == S2) continue; @@ -418,10 +424,18 @@ Error DiffStyle::diffStringTable() { std::vector<StringRef> Strings1, Strings2; Strings1.reserve(IdList1.size()); Strings2.reserve(IdList2.size()); - for (auto ID : IdList1) - Strings1.push_back(ST1.getStringForID(ID)); - for (auto ID : IdList2) - Strings2.push_back(ST2.getStringForID(ID)); + for (auto ID : IdList1) { + auto S = ST1.getStringForID(ID); + if (!S) + return S.takeError(); + Strings1.push_back(*S); + } + for (auto ID : IdList2) { + auto S = ST2.getStringForID(ID); + if (!S) + return S.takeError(); + Strings2.push_back(*S); + } SmallVector<StringRef, 64> OnlyP; SmallVector<StringRef, 64> OnlyQ; diff --git a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp index f3e28e0b08f..ec1325ff233 100644 --- a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp +++ b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp @@ -525,14 +525,17 @@ Error LLVMOutputStyle::dumpStringTable() { DictScope D(P, "String Table"); for (uint32_t I : IS->name_ids()) { - StringRef S = IS->getStringForID(I); - if (!S.empty()) { - llvm::SmallString<32> Str; - Str.append("'"); - Str.append(S); - Str.append("'"); - P.printString(Str); - } + auto ES = IS->getStringForID(I); + if (!ES) + return ES.takeError(); + + if (ES->empty()) + continue; + llvm::SmallString<32> Str; + Str.append("'"); + Str.append(*ES); + Str.append("'"); + P.printString(Str); } return Error::success(); } @@ -688,8 +691,11 @@ Error LLVMOutputStyle::dumpTpiStream(uint32_t StreamIdx) { const auto &ST = *ExpectedST; for (const auto &E : Tpi->getHashAdjusters()) { DictScope DHA(P); - StringRef Name = ST.getStringForID(E.first); - P.printString("Type", Name); + auto Name = ST.getStringForID(E.first); + if (!Name) + return Name.takeError(); + + P.printString("Type", *Name); P.printHex("TI", E.second); } } diff --git a/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp b/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp index 807d7f8b82e..b94b5a4abf3 100644 --- a/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp +++ b/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp @@ -233,9 +233,12 @@ Error YAMLOutputStyle::dumpStringTable() { const auto &ST = ExpectedST.get(); for (auto ID : ST.name_ids()) { - StringRef S = ST.getStringForID(ID); - if (!S.empty()) - Obj.StringTable->push_back(S); + auto S = ST.getStringForID(ID); + if (!S) + return S.takeError(); + if (S->empty()) + continue; + Obj.StringTable->push_back(*S); } return Error::success(); } |