aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
authorNick Kledzik <kledzik@apple.com>2014-09-12 21:34:15 +0000
committerNick Kledzik <kledzik@apple.com>2014-09-12 21:34:15 +0000
commitac43144e5a5a3e3d9e78e9d1460825498715e4a9 (patch)
treee4071699728a5fe724bc08a486b418fd2f51571d /llvm/tools/llvm-objdump/llvm-objdump.cpp
parent54b112828f8df04af8b7ab326d23789f2bea0389 (diff)
downloadllvm-ac43144e5a5a3e3d9e78e9d1460825498715e4a9.zip
llvm-ac43144e5a5a3e3d9e78e9d1460825498715e4a9.tar.gz
llvm-ac43144e5a5a3e3d9e78e9d1460825498715e4a9.tar.bz2
[llvm-objdump] support -rebase option for mach-o to dump rebasing info
Similar to my previous -exports-trie option, the -rebase option dumps info from the LC_DYLD_INFO load command. The rebasing info is a list of the the locations that dyld needs to adjust if a mach-o image is not loaded at its preferred address. Since ASLR is now the default, images almost never load at their preferred address, and thus need to be rebased by dyld. llvm-svn: 217709
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 7debbe9..2b70167 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -82,6 +82,9 @@ static cl::opt<bool>
ExportsTrie("exports-trie", cl::desc("Display mach-o exported symbols"));
static cl::opt<bool>
+Rebase("rebase", cl::desc("Display mach-o rebasing info"));
+
+static cl::opt<bool>
MachOOpt("macho", cl::desc("Use MachO specific object file parser"));
static cl::alias
MachOm("m", cl::desc("Alias for --macho"), cl::aliasopt(MachOOpt));
@@ -720,6 +723,18 @@ static void printExportsTrie(const ObjectFile *o) {
}
}
+static void printRebaseTable(const ObjectFile *o) {
+ outs() << "Rebase table:\n";
+ if (const MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
+ printMachORebaseTable(MachO);
+ else {
+ errs() << "This operation is only currently supported "
+ "for Mach-O executable files.\n";
+ return;
+ }
+}
+
+
static void printPrivateFileHeader(const ObjectFile *o) {
if (o->isELF()) {
printELFFileHeader(o);
@@ -751,6 +766,8 @@ static void DumpObject(const ObjectFile *o) {
printPrivateFileHeader(o);
if (ExportsTrie)
printExportsTrie(o);
+ if (Rebase)
+ printRebaseTable(o);
}
/// @brief Dump each object file in \a a;
@@ -833,7 +850,8 @@ int main(int argc, char **argv) {
&& !SymbolTable
&& !UnwindInfo
&& !PrivateHeaders
- && !ExportsTrie) {
+ && !ExportsTrie
+ && !Rebase) {
cl::PrintHelpMessage();
return 2;
}