summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-pdbdump
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-pdbdump')
-rw-r--r--llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.cpp32
-rw-r--r--llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.h10
-rw-r--r--llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp28
-rw-r--r--llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp1
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"
OpenPOWER on IntegriCloud