summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2016-08-16 23:28:54 +0000
committerZachary Turner <zturner@google.com>2016-08-16 23:28:54 +0000
commit8321ba5437f7e35f37291473fc1bafc53d27c62f (patch)
tree5d60f9bcf99776b8f3215e25e764d518e2c5f6a7 /llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp
parenta36f4a25b313ddddeceb77ebc2328e22ac4fdc5b (diff)
downloadbcm5719-llvm-8321ba5437f7e35f37291473fc1bafc53d27c62f.tar.gz
bcm5719-llvm-8321ba5437f7e35f37291473fc1bafc53d27c62f.zip
Write the TPI stream from a PDB to Yaml.
Reviewed By: ruiu, rnk Differential Revision: https://reviews.llvm.org/D23226 llvm-svn: 278869
Diffstat (limited to 'llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp')
-rw-r--r--llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp b/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp
index ff3d5d1cfd9..1277b01df9e 100644
--- a/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp
+++ b/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp
@@ -16,6 +16,7 @@
#include "llvm/DebugInfo/PDB/Raw/InfoStream.h"
#include "llvm/DebugInfo/PDB/Raw/PDBFile.h"
#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
+#include "llvm/DebugInfo/PDB/Raw/TpiStream.h"
using namespace llvm;
using namespace llvm::pdb;
@@ -45,6 +46,9 @@ Error YAMLOutputStyle::dump() {
if (auto EC = dumpDbiStream())
return EC;
+ if (auto EC = dumpTpiStream())
+ return EC;
+
flush();
return Error::success();
}
@@ -150,6 +154,30 @@ Error YAMLOutputStyle::dumpDbiStream() {
return Error::success();
}
+Error YAMLOutputStyle::dumpTpiStream() {
+ if (!opts::pdb2yaml::TpiStream)
+ return Error::success();
+
+ auto TpiS = File.getPDBTpiStream();
+ if (!TpiS)
+ return TpiS.takeError();
+
+ auto &TS = TpiS.get();
+ Obj.TpiStream.emplace();
+ Obj.TpiStream->Version = TS.getTpiVersion();
+ for (auto &Record : TS.types(nullptr)) {
+ yaml::PdbTpiRecord R;
+ // It's not necessary to set R.RecordData here. That only exists as a
+ // way to have the `PdbTpiRecord` structure own the memory that `R.Record`
+ // references. In the case of reading an existing PDB though, that memory
+ // is owned by the backing stream.
+ R.Record = Record;
+ Obj.TpiStream->Records.push_back(R);
+ }
+
+ return Error::success();
+}
+
void YAMLOutputStyle::flush() {
Out << Obj;
outs().flush();
OpenPOWER on IntegriCloud