diff options
Diffstat (limited to 'llvm/tools')
| -rw-r--r-- | llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.cpp | 32 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.h | 10 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp | 28 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp | 1 |
4 files changed, 63 insertions, 8 deletions
diff --git a/llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.cpp b/llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.cpp index 78971eb5879..3113a3250f0 100644 --- a/llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.cpp +++ b/llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.cpp @@ -10,6 +10,8 @@ #include "C13DebugFragmentVisitor.h" #include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugCrossExSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugCrossImpSubsection.h" #include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h" #include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h" #include "llvm/DebugInfo/PDB/Native/PDBFile.h" @@ -48,18 +50,34 @@ Error C13DebugFragmentVisitor::visitInlineeLines( return Error::success(); } +Error C13DebugFragmentVisitor::visitCrossModuleExports( + codeview::DebugCrossModuleExportsSubsectionRef &Exports) { + this->CrossExports.push_back(Exports); + return Error::success(); +} + +Error C13DebugFragmentVisitor::visitCrossModuleImports( + codeview::DebugCrossModuleImportsSubsectionRef &Imports) { + this->CrossImports.push_back(Imports); + return Error::success(); +} + Error C13DebugFragmentVisitor::finished() { - if (!Checksums.hasValue()) { - assert(Lines.empty()); - return Error::success(); + if (Checksums.hasValue()) { + if (auto EC = handleFileChecksums()) + return EC; + + if (auto EC = handleLines()) + return EC; + + if (auto EC = handleInlineeLines()) + return EC; } - if (auto EC = handleFileChecksums()) - return EC; - if (auto EC = handleLines()) + if (auto EC = handleCrossModuleExports()) return EC; - if (auto EC = handleInlineeLines()) + if (auto EC = handleCrossModuleImports()) return EC; return Error::success(); diff --git a/llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.h b/llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.h index a12f282c4c5..1865295da38 100644 --- a/llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.h +++ b/llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.h @@ -38,12 +38,20 @@ public: Error visitInlineeLines(codeview::DebugInlineeLinesSubsectionRef &Lines) final; + Error visitCrossModuleExports( + codeview::DebugCrossModuleExportsSubsectionRef &Lines) final; + + Error visitCrossModuleImports( + codeview::DebugCrossModuleImportsSubsectionRef &Imports) final; + Error finished() final; protected: virtual Error handleFileChecksums() { return Error::success(); } virtual Error handleLines() { return Error::success(); } virtual Error handleInlineeLines() { return Error::success(); } + virtual Error handleCrossModuleExports() { return Error::success(); } + virtual Error handleCrossModuleImports() { return Error::success(); } Expected<StringRef> getNameFromStringTable(uint32_t Offset); Expected<StringRef> getNameFromChecksumsBuffer(uint32_t Offset); @@ -51,6 +59,8 @@ protected: Optional<codeview::DebugChecksumsSubsectionRef> Checksums; std::vector<codeview::DebugInlineeLinesSubsectionRef> InlineeLines; std::vector<codeview::DebugLinesSubsectionRef> Lines; + std::vector<codeview::DebugCrossModuleExportsSubsectionRef> CrossExports; + std::vector<codeview::DebugCrossModuleImportsSubsectionRef> CrossImports; PDBFile &F; }; diff --git a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp index 31c342cd0f5..cd5bf8a095d 100644 --- a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp +++ b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp @@ -16,6 +16,8 @@ #include "llvm/DebugInfo/CodeView/CVTypeVisitor.h" #include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugCrossExSubsection.h" +#include "llvm/DebugInfo/CodeView/DebugCrossImpSubsection.h" #include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h" #include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h" #include "llvm/DebugInfo/CodeView/DebugSubsectionVisitor.h" @@ -174,6 +176,32 @@ public: return Error::success(); } + Error handleCrossModuleExports() override { + for (const auto &M : CrossExports) { + DictScope D(P, "CrossModuleExports"); + for (const auto &E : M) { + P.printHex("Local", E.Local); + P.printHex("Global", E.Global); + } + } + return Error::success(); + } + + Error handleCrossModuleImports() override { + for (const auto &M : CrossImports) { + DictScope D(P, "CrossModuleImports"); + for (const auto &ImportGroup : M) { + auto Name = + getNameFromStringTable(ImportGroup.Header->ModuleNameOffset); + if (!Name) + return Name.takeError(); + P.printString("Module", *Name); + P.printHexList("Imports", ImportGroup.Imports); + } + } + return Error::success(); + } + private: Error dumpTypeRecord(StringRef Label, TypeIndex Index) { CompactTypeDumpVisitor CTDV(IPI, Index, &P); diff --git a/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp b/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp index ee72b90b12d..c28885104ca 100644 --- a/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp +++ b/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp @@ -17,7 +17,6 @@ #include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h" #include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h" #include "llvm/DebugInfo/CodeView/DebugSubsection.h" -#include "llvm/DebugInfo/CodeView/DebugSubsectionVisitor.h" #include "llvm/DebugInfo/CodeView/DebugUnknownSubsection.h" #include "llvm/DebugInfo/CodeView/Line.h" #include "llvm/DebugInfo/MSF/MappedBlockStream.h" |

