[PATCH] D78269: [lld-macho] Support X86_64_RELOC_BRANCH
Jez Ng via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 27 13:28:19 PDT 2020
int3 updated this revision to Diff 260437.
int3 added a comment.
rebase
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D78269/new/
https://reviews.llvm.org/D78269
Files:
lld/MachO/Arch/X86_64.cpp
lld/test/MachO/relocations.s
Index: lld/test/MachO/relocations.s
===================================================================
--- lld/test/MachO/relocations.s
+++ lld/test/MachO/relocations.s
@@ -1,19 +1,34 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o
# RUN: lld -flavor darwinnew -o %t %t.o
-# RUN: llvm-objdump -d %t | FileCheck %s
+# RUN: llvm-objdump --section-headers --syms -d %t | FileCheck %s
-# CHECK: leaq 17(%rip), %rsi
+# CHECK-LABEL: Sections:
+# CHECK-DAG: __cstring {{[0-9a-z]+}} [[#%x, CSTRING_ADDR:]]
+
+# CHECK-LABEL: SYMBOL TABLE:
+# CHECK-DAG: [[#%x, F_ADDR:]] {{.*}} _f
+
+# CHECK-LABEL: Disassembly of section __TEXT,__text:
+## Test X86_64_RELOC_BRANCH
+# CHECK: callq 0x[[#%x, F_ADDR]] <_f>
+## Test X86_64_RELOC_SIGNED
+# CHECK: leaq [[#%u, STR_OFF:]](%rip), %rsi
+# CHECK-NEXT: [[#%x, CSTRING_ADDR - STR_OFF]]
.section __TEXT,__text
-.globl _main
+.globl _main, _f
_main:
+ callq _f
+ mov $0, %rax
+ ret
+
+_f:
movl $0x2000004, %eax # write() syscall
mov $1, %rdi # stdout
leaq str(%rip), %rsi
mov $13, %rdx # length of str
syscall
- mov $0, %rax
ret
.section __TEXT,__cstring
Index: lld/MachO/Arch/X86_64.cpp
===================================================================
--- lld/MachO/Arch/X86_64.cpp
+++ lld/MachO/Arch/X86_64.cpp
@@ -31,6 +31,7 @@
uint64_t X86_64::getImplicitAddend(const uint8_t *loc, uint8_t type) const {
switch (type) {
+ case X86_64_RELOC_BRANCH:
case X86_64_RELOC_SIGNED:
case X86_64_RELOC_GOT_LOAD:
return read32le(loc);
@@ -42,6 +43,7 @@
void X86_64::relocateOne(uint8_t *loc, uint8_t type, uint64_t val) const {
switch (type) {
+ case X86_64_RELOC_BRANCH:
case X86_64_RELOC_SIGNED:
case X86_64_RELOC_GOT_LOAD:
// These types are only used for pc-relative relocations, so offset by 4
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78269.260437.patch
Type: text/x-patch
Size: 1850 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200427/8acfb43e/attachment.bin>
More information about the llvm-commits
mailing list