Skip to content

Commit

Permalink
[lld-macho] Support X86_64_RELOC_BRANCH
Browse files Browse the repository at this point in the history
Relatively straightforward diff, to set the stage for calling functions
in dylibs.

Differential Revision: https://reviews.llvm.org/D78269
  • Loading branch information
int3 authored and smeenai committed Apr 29, 2020
1 parent df92377 commit e82c5e1
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 4 deletions.
2 changes: 2 additions & 0 deletions lld/MachO/Arch/X86_64.cpp
Expand Up @@ -31,6 +31,7 @@ X86_64::X86_64() {

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);
Expand All @@ -42,6 +43,7 @@ uint64_t X86_64::getImplicitAddend(const uint8_t *loc, uint8_t type) const {

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
Expand Down
23 changes: 19 additions & 4 deletions 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: __cstring {{[0-9a-z]+}} [[#%x, CSTRING_ADDR:]]

# CHECK-LABEL: SYMBOL TABLE:
# CHECK: [[#%x, F_ADDR:]] {{.*}} _f

# CHECK-LABEL: <_main>:
## 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
Expand Down

0 comments on commit e82c5e1

Please sign in to comment.