diff options
| author | Rui Ueyama <ruiu@google.com> | 2016-06-06 18:39:21 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2016-06-06 18:39:21 +0000 |
| commit | ef2b48848256ce6e87ccd393d5a9cbb56a3042ef (patch) | |
| tree | d90530af5768c85c13bf502446baf9999c0d34b2 /llvm/tools | |
| parent | 77ea344786abf9e96805641868dcd04f59e452ad (diff) | |
| download | bcm5719-llvm-ef2b48848256ce6e87ccd393d5a9cbb56a3042ef.tar.gz bcm5719-llvm-ef2b48848256ce6e87ccd393d5a9cbb56a3042ef.zip | |
[pdbdump] Print out New FPO stream contents.
The data strucutre in the new FPO stream is described in the
PE/COFF spec. There is one record per function if frame pointer
is omitted.
Differential Revision: http://reviews.llvm.org/D20999
llvm-svn: 271926
Diffstat (limited to 'llvm/tools')
| -rw-r--r-- | llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp | 25 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/LLVMOutputStyle.h | 1 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/OutputStyle.h | 1 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp | 8 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/llvm-pdbdump.h | 1 |
5 files changed, 36 insertions, 0 deletions
diff --git a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp index 2c3dabf613b..1707454df66 100644 --- a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp +++ b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp @@ -669,3 +669,28 @@ Error LLVMOutputStyle::dumpSectionHeaders() { } return Error::success(); } + +Error LLVMOutputStyle::dumpFpoStream() { + if (!opts::DumpFpo) + return Error::success(); + + auto DbiS = File.getPDBDbiStream(); + if (auto EC = DbiS.takeError()) + return EC; + DbiStream &DS = DbiS.get(); + + ListScope D(P, "New FPO"); + for (const object::FpoData &Fpo : DS.getFpoRecords()) { + DictScope DD(P, ""); + P.printNumber("Offset", Fpo.Offset); + P.printNumber("Size", Fpo.Size); + P.printNumber("Number of locals", Fpo.NumLocals); + P.printNumber("Number of params", Fpo.NumParams); + P.printNumber("Size of Prolog", Fpo.getPrologSize()); + P.printNumber("Number of Saved Registers", Fpo.getNumSavedRegs()); + P.printBoolean("Has SEH", Fpo.hasSEH()); + P.printBoolean("Use BP", Fpo.useBP()); + P.printNumber("Frame Pointer", Fpo.getFP()); + } + return Error::success(); +} diff --git a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.h b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.h index 1643b42bbdf..0c601c9b9b1 100644 --- a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.h +++ b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.h @@ -33,6 +33,7 @@ public: Error dumpSectionMap() override; Error dumpPublicsStream() override; Error dumpSectionHeaders() override; + Error dumpFpoStream() override; private: PDBFile &File; diff --git a/llvm/tools/llvm-pdbdump/OutputStyle.h b/llvm/tools/llvm-pdbdump/OutputStyle.h index d8ab0d46464..c42f7d21002 100644 --- a/llvm/tools/llvm-pdbdump/OutputStyle.h +++ b/llvm/tools/llvm-pdbdump/OutputStyle.h @@ -31,6 +31,7 @@ public: virtual Error dumpSectionMap() = 0; virtual Error dumpPublicsStream() = 0; virtual Error dumpSectionHeaders() = 0; + virtual Error dumpFpoStream() = 0; }; } } diff --git a/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp b/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp index 4396c0d681b..b798929ace8 100644 --- a/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp +++ b/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp @@ -154,6 +154,8 @@ cl::opt<bool> cl::opt<bool> DumpSectionHeaders("raw-section-headers", cl::desc("dump section headers"), cl::cat(NativeOptions)); +cl::opt<bool> DumpFpo("raw-fpo", cl::desc("dump FPO records"), + cl::cat(NativeOptions)); cl::opt<bool> RawAll("raw-all", @@ -251,6 +253,9 @@ static Error dumpStructure(RawSession &RS) { if (auto EC = O->dumpSectionHeaders()) return EC; + + if (auto EC = O->dumpFpoStream()) + return EC; return Error::success(); } @@ -291,6 +296,8 @@ bool isRawDumpEnabled() { return true; if (opts::DumpLineInfo) return true; + if (opts::DumpFpo) + return true; return false; } @@ -460,6 +467,7 @@ int main(int argc_, const char *argv_[]) { opts::DumpSectionMap = true; opts::DumpSectionContribs = true; opts::DumpLineInfo = true; + opts::DumpFpo = true; } // When adding filters for excluded compilands and types, we need to remember diff --git a/llvm/tools/llvm-pdbdump/llvm-pdbdump.h b/llvm/tools/llvm-pdbdump/llvm-pdbdump.h index 4c12beadce3..4a6afaeb14e 100644 --- a/llvm/tools/llvm-pdbdump/llvm-pdbdump.h +++ b/llvm/tools/llvm-pdbdump/llvm-pdbdump.h @@ -43,6 +43,7 @@ extern llvm::cl::opt<bool> DumpLineInfo; extern llvm::cl::opt<bool> DumpSectionMap; extern llvm::cl::opt<bool> DumpSymRecordBytes; extern llvm::cl::opt<bool> DumpSectionHeaders; +extern llvm::cl::opt<bool> DumpFpo; extern llvm::cl::opt<bool> ExcludeCompilerGenerated; |

