[PATCH] D78269: [lld-macho] Support X86_64_RELOC_BRANCH

Jez Ng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 15 22:01:33 PDT 2020


int3 created this revision.
int3 added reviewers: ruiu, pcc, MaskRay, smeenai, alexshap, gkm, Ktwu, christylee.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
int3 added a child revision: D78270: [lld-macho] Support calls to functions in dylibs.

Relatively straightforward diff, to set the stage for calling functions
in dylibs.

Depends on D78168 <https://reviews.llvm.org/D78168>.


Repository:
  rG LLVM Github Monorepo

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.257954.patch
Type: text/x-patch
Size: 1850 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200416/87fc1fbb/attachment-0001.bin>


More information about the llvm-commits mailing list