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
This commit is contained in:
Eric Christopher 2011-04-03 23:51:47 +00:00
parent 33feb70690
commit 592cf78f84
3 changed files with 50 additions and 2 deletions

View File

@ -19,6 +19,7 @@
namespace llvm {
class MemoryBuffer;
class raw_ostream;
namespace object {
@ -172,8 +173,27 @@ 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

View File

@ -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";
}

View File

@ -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;