[llvm] r305744 - Fix a FIXME in llvm-objdump for the -exports-trie option that was not adding
Kevin Enderby via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 19 14:23:08 PDT 2017
Author: enderby
Date: Mon Jun 19 16:23:07 2017
New Revision: 305744
URL: http://llvm.org/viewvc/llvm-project?rev=305744&view=rev
Log:
Fix a FIXME in llvm-objdump for the -exports-trie option that was not adding
in the base address.
Without this Mach-O files, like 64-bit executables, don’t have the correct
addresses printed for their exports. As the default is to link at address
0x100000000 not zero.
Modified:
llvm/trunk/test/tools/llvm-objdump/macho-exports-trie.test
llvm/trunk/tools/llvm-objdump/MachODump.cpp
Modified: llvm/trunk/test/tools/llvm-objdump/macho-exports-trie.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/macho-exports-trie.test?rev=305744&r1=305743&r2=305744&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/macho-exports-trie.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/macho-exports-trie.test Mon Jun 19 16:23:07 2017
@@ -1,5 +1,7 @@
# RUN: llvm-objdump -macho -exports-trie -arch x86_64 \
# RUN: %p/Inputs/exports-trie.macho-x86_64 2>/dev/null | FileCheck %s
+# RUN: llvm-objdump -macho -exports-trie -arch x86_64 \
+# RUN: %p/Inputs/weak-bind.macho-x86_64 2>/dev/null | FileCheck --check-prefix=EXE %s
# CHECK:[re-export] _malloc (from libSystem)
@@ -9,3 +11,11 @@
# CHECK:0x12345678 _myAbs [absolute]
# CHECK:0x00000F60 _foo
+
+# EXE: 0x100000000 __mh_execute_header
+# EXE: 0x100000ED0 __Znwm
+# EXE: 0x100000F30 __ZdlPv
+# EXE: 0x100000F40 _main
+# EXE: 0x100001018 _p1
+# EXE: 0x100001020 _p2
+# EXE: 0x100001028 _p3
Modified: llvm/trunk/tools/llvm-objdump/MachODump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/MachODump.cpp?rev=305744&r1=305743&r2=305744&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objdump/MachODump.cpp (original)
+++ llvm/trunk/tools/llvm-objdump/MachODump.cpp Mon Jun 19 16:23:07 2017
@@ -9340,6 +9340,22 @@ void llvm::printMachOLoadCommands(const
//===----------------------------------------------------------------------===//
void llvm::printMachOExportsTrie(const object::MachOObjectFile *Obj) {
+ uint64_t BaseSegmentAddress = 0;
+ for (const auto &Command : Obj->load_commands()) {
+ if (Command.C.cmd == MachO::LC_SEGMENT) {
+ MachO::segment_command Seg = Obj->getSegmentLoadCommand(Command);
+ if (Seg.fileoff == 0 && Seg.filesize != 0) {
+ BaseSegmentAddress = Seg.vmaddr;
+ break;
+ }
+ } else if (Command.C.cmd == MachO::LC_SEGMENT_64) {
+ MachO::segment_command_64 Seg = Obj->getSegment64LoadCommand(Command);
+ if (Seg.fileoff == 0 && Seg.filesize != 0) {
+ BaseSegmentAddress = Seg.vmaddr;
+ break;
+ }
+ }
+ }
for (const llvm::object::ExportEntry &Entry : Obj->exports()) {
uint64_t Flags = Entry.flags();
bool ReExport = (Flags & MachO::EXPORT_SYMBOL_FLAGS_REEXPORT);
@@ -9353,7 +9369,7 @@ void llvm::printMachOExportsTrie(const o
outs() << "[re-export] ";
else
outs() << format("0x%08llX ",
- Entry.address()); // FIXME:add in base address
+ Entry.address() + BaseSegmentAddress);
outs() << Entry.name();
if (WeakDef || ThreadLocal || Resolver || Abs) {
bool NeedsComma = false;
More information about the llvm-commits
mailing list