diff options
author | Eric Christopher <echristo@apple.com> | 2011-04-03 23:51:47 +0000 |
---|---|---|
committer | Eric Christopher <echristo@apple.com> | 2011-04-03 23:51:47 +0000 |
commit | 592cf78f842999d3b6c958822927790bc3f45c62 (patch) | |
tree | 6640d22b8e90ad74a37fdc048de08473da3933b1 | |
parent | 33feb706901bc674d30e9d82b6baff7e9c634366 (diff) | |
download | external_llvm-592cf78f842999d3b6c958822927790bc3f45c62.zip external_llvm-592cf78f842999d3b6c958822927790bc3f45c62.tar.gz external_llvm-592cf78f842999d3b6c958822927790bc3f45c62.tar.bz2 |
Start migrating mach-o dumping facilities to the object file out of a
separate executable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128801 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Object/MachOObject.h | 20 | ||||
-rw-r--r-- | lib/Object/MachOObject.cpp | 28 | ||||
-rw-r--r-- | tools/macho-dump/macho-dump.cpp | 4 |
3 files changed, 50 insertions, 2 deletions
diff --git a/include/llvm/Object/MachOObject.h b/include/llvm/Object/MachOObject.h index 03d9c14..19a399e 100644 --- a/include/llvm/Object/MachOObject.h +++ b/include/llvm/Object/MachOObject.h @@ -19,6 +19,7 @@ namespace llvm { class MemoryBuffer; +class raw_ostream; namespace object { @@ -172,7 +173,26 @@ public: InMemoryStruct<macho::Symbol64TableEntry> &Res) const; /// @} + + /// @name Object Dump Facilities + /// @{ + /// dump - Support for debugging, callable in GDB: V->dump() + // + void dump() const; + void dumpHeader() const; + + /// print - Implement operator<< on Value. + /// + void print(raw_ostream &O) const; + void printHeader(raw_ostream &O) const; + + /// @} }; + +inline raw_ostream &operator<<(raw_ostream &OS, const MachOObject &V) { + V.print(OS); + return OS; +} } // end namespace object } // end namespace llvm diff --git a/lib/Object/MachOObject.cpp b/lib/Object/MachOObject.cpp index 5e64d63..9890feb 100644 --- a/lib/Object/MachOObject.cpp +++ b/lib/Object/MachOObject.cpp @@ -12,6 +12,8 @@ #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Host.h" #include "llvm/Support/SwapByteOrder.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/Support/Debug.h" using namespace llvm; using namespace llvm::object; @@ -340,3 +342,29 @@ void MachOObject::ReadSymbol64TableEntry(uint64_t SymbolTableOffset, Index * sizeof(macho::Symbol64TableEntry)); ReadInMemoryStruct(*this, Buffer->getBuffer(), Offset, Res); } + +/* ** */ +// Object Dumping Facilities +void MachOObject::dump() const { print(dbgs()); dbgs() << '\n'; } +void MachOObject::dumpHeader() const { printHeader(dbgs()); dbgs() << '\n'; } + +void MachOObject::printHeader(raw_ostream &O) const { + O << "('cputype', " << Header.CPUType << ")\n"; + O << "('cpusubtype', " << Header.CPUSubtype << ")\n"; + O << "('filetype', " << Header.FileType << ")\n"; + O << "('num_load_commands', " << Header.NumLoadCommands << ")\n"; + O << "('load_commands_size', " << Header.SizeOfLoadCommands << ")\n"; + O << "('flag', " << Header.Flags << ")\n"; + + // Print extended header if 64-bit. + if (is64Bit()) + O << "('reserved', " << Header64Ext.Reserved << ")\n"; +} + +void MachOObject::print(raw_ostream &O) const { + O << "Header:\n"; + printHeader(O); + O << "Load Commands:\n"; + + O << "Buffer:\n"; +} diff --git a/tools/macho-dump/macho-dump.cpp b/tools/macho-dump/macho-dump.cpp index c4c558d..a69368b 100644 --- a/tools/macho-dump/macho-dump.cpp +++ b/tools/macho-dump/macho-dump.cpp @@ -376,8 +376,8 @@ int main(int argc, char **argv) { if (!InputObject) return Error("unable to load object: '" + ErrorStr + "'"); - if (int Res = DumpHeader(*InputObject)) - return Res; + // Print the header + InputObject->printHeader(outs()); // Print the load commands. int Res = 0; |