summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Object/MachOObjectFile.cpp6
-rwxr-xr-xllvm/test/tools/llvm-objdump/Inputs/bind2.macho-x86_64bin0 -> 8376 bytes
-rw-r--r--llvm/test/tools/llvm-objdump/macho-bind2.test5
3 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index 4435815b899..6e83d8182a4 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -1974,20 +1974,20 @@ void MachOBindEntry::moveNext() {
SegmentOffset) << "\n");
return;
case MachO::BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB:
- AdvanceAmount = readULEB128();
+ AdvanceAmount = readULEB128() + PointerSize;
RemainingLoopCount = 0;
if (TableKind == Kind::Lazy)
Malformed = true;
DEBUG_WITH_TYPE(
"mach-o-bind",
- llvm::dbgs() << "BIND_OPCODE_DO_BIND_IMM_TIMES: "
+ llvm::dbgs() << "BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB: "
<< format("SegmentOffset=0x%06X", SegmentOffset)
<< ", AdvanceAmount=" << AdvanceAmount
<< ", RemainingLoopCount=" << RemainingLoopCount
<< "\n");
return;
case MachO::BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED:
- AdvanceAmount = ImmValue * PointerSize;
+ AdvanceAmount = ImmValue * PointerSize + PointerSize;
RemainingLoopCount = 0;
if (TableKind == Kind::Lazy)
Malformed = true;
diff --git a/llvm/test/tools/llvm-objdump/Inputs/bind2.macho-x86_64 b/llvm/test/tools/llvm-objdump/Inputs/bind2.macho-x86_64
new file mode 100755
index 00000000000..f756fbb4a93
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/Inputs/bind2.macho-x86_64
Binary files differ
diff --git a/llvm/test/tools/llvm-objdump/macho-bind2.test b/llvm/test/tools/llvm-objdump/macho-bind2.test
new file mode 100644
index 00000000000..2eee2fcb60b
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/macho-bind2.test
@@ -0,0 +1,5 @@
+# RUN: llvm-objdump -macho -bind %p/Inputs/bind2.macho-x86_64 | FileCheck %s
+
+# CHECK: __DATA __data 0x00001008 pointer 0 libSystem _malloc
+# CHECK: __DATA __data 0x00001050 pointer 0 libSystem _malloc
+# CHECK: __DATA __data 0x00001458 pointer 0 libSystem _malloc
OpenPOWER on IntegriCloud