diff options
| author | Nick Kledzik <kledzik@apple.com> | 2014-09-12 21:34:15 +0000 |
|---|---|---|
| committer | Nick Kledzik <kledzik@apple.com> | 2014-09-12 21:34:15 +0000 |
| commit | ac43144e5a5a3e3d9e78e9d1460825498715e4a9 (patch) | |
| tree | e4071699728a5fe724bc08a486b418fd2f51571d /llvm/tools/llvm-objdump/llvm-objdump.cpp | |
| parent | 54b112828f8df04af8b7ab326d23789f2bea0389 (diff) | |
| download | llvm-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.cpp | 20 |
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; } |
