baf4b3336b7ab2cc8f2b7d23b3a542272325bc09
[lldb.git] / lld / test / MachO / local-got.s
1 # REQUIRES: x86
2 # RUN: mkdir -p %t
3 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %p/Inputs/libhello.s \
4 # RUN:   -o %t/libhello.o
5 # RUN: lld -flavor darwinnew -L%S/Inputs/MacOSX.sdk/usr/lib -lSystem -dylib -install_name \
6 # RUN:   @executable_path/libhello.dylib %t/libhello.o -o %t/libhello.dylib
7 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o
8 # RUN: lld -flavor darwinnew -L%S/Inputs/MacOSX.sdk/usr/lib -lSystem -o %t/test %t/test.o -L%t -lhello
9 # RUN: llvm-objdump --full-contents --bind %t/test | FileCheck %s --match-full-lines
10
11 ## Check that the GOT references the cstrings. --full-contents displays the
12 ## address offset and the contents at that address very similarly, so am using
13 ## --match-full-lines to make sure we match on the right thing.
14 # CHECK:      Contents of section __cstring:
15 # CHECK-NEXT: 1000003ec {{.*}}
16
17 ## 1st 8 bytes refer to the start of __cstring + 0xe, 2nd 8 bytes refer to the
18 ## start of __cstring
19 # CHECK:      Contents of section __got:
20 # CHECK-NEXT: [[#%X,ADDR:]]  fa030000 01000000 ec030000 01000000 {{.*}}
21 # CHECK-NEXT: [[#ADDR + 16]] 00000000 00000000 {{.*}}
22
23 ## Check that a non-locally-defined symbol is still bound at the correct offset:
24 # CHECK: Bind table:
25 # CHECK-NEXT: segment      section  address         type     addend  dylib     symbol
26 # CHECK-NEXT: __DATA_CONST __got    0x[[#ADDR+16]]  pointer  0       libhello  _hello_its_me
27
28 .globl _main
29
30 .text
31 _main:
32   movl $0x2000004, %eax # write() syscall
33   mov $1, %rdi # stdout
34   movq _hello_its_me@GOTPCREL(%rip), %rsi
35   mov $15, %rdx # length of str
36   syscall
37
38   movl $0x2000004, %eax # write() syscall
39   mov $1, %rdi # stdout
40   movq _hello_world@GOTPCREL(%rip), %rsi
41   mov $13, %rdx # length of str
42   syscall
43
44   movl $0x2000004, %eax # write() syscall
45   mov $1, %rdi # stdout
46   movq _goodbye_world@GOTPCREL(%rip), %rsi
47   mov $15, %rdx # length of str
48   syscall
49
50   mov $0, %rax
51   ret
52
53 .section __TEXT,__cstring
54 _hello_world:
55   .asciz "Hello world!\n"
56
57 _goodbye_world:
58   .asciz "Goodbye world!\n"