1// REQUIRES: x86
2// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
3// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/shared.s -o %t2
4// RUN: ld.lld %t2 -soname fixed-length-string.so -o %t2.so -shared
5// RUN: ld.lld --hash-style=sysv %t %t2.so -o %t3
6// RUN: llvm-readobj -S  %t3 | FileCheck --check-prefix=SEC %s
7// RUN: llvm-objdump -s -d %t3 | FileCheck %s
8
9// SEC:      Name: .plt
10// SEC-NEXT: Type: SHT_PROGBITS
11// SEC-NEXT: Flags [
12// SEC-NEXT:   SHF_ALLOC
13// SEC-NEXT:   SHF_EXECINSTR
14// SEC-NEXT: ]
15// SEC-NEXT: Address: 0x201340
16// SEC-NEXT: Offset: 0x340
17// SEC-NEXT: Size: 48
18
19// SEC:         Name: .got
20// SEC-NEXT:   Type: SHT_PROGBITS
21// SEC-NEXT:   Flags [
22// SEC-NEXT:     SHF_ALLOC
23// SEC-NEXT:     SHF_WRITE
24// SEC-NEXT:   ]
25// SEC-NEXT:   Address: 0x202460
26// SEC-NEXT:   Offset:
27// SEC-NEXT:   Size: 8
28// SEC-NEXT:   Link: 0
29// SEC-NEXT:   Info: 0
30// SEC-NEXT:   AddressAlignment: 8
31// SEC-NEXT:   EntrySize: 0
32// SEC-NEXT: }
33
34// SEC:        Name: .got.plt
35// SEC-NEXT:   Type: SHT_PROGBITS
36// SEC-NEXT:   Flags [
37// SEC-NEXT:     SHF_ALLOC
38// SEC-NEXT:     SHF_WRITE
39// SEC-NEXT:   ]
40// SEC-NEXT:   Address: 0x203468
41// SEC-NEXT:   Offset: 0x468
42// SEC-NEXT:   Size: 40
43// SEC-NEXT:   Link: 0
44// SEC-NEXT:   Info: 0
45// SEC-NEXT:   AddressAlignment: 8
46// SEC-NEXT:   EntrySize: 0
47// SEC-NEXT:   }
48
49.section .R_X86_64_64,"a",@progbits
50.global R_X86_64_64
51R_X86_64_64:
52 .quad R_X86_64_64
53
54// CHECK:      Contents of section .R_X86_64_64:
55// CHECK-NEXT:   2002f8 f8022000 00000000
56
57.section .R_X86_64_GOTPCREL,"a",@progbits
58.global R_X86_64_GOTPCREL
59R_X86_64_GOTPCREL:
60 .long zed@gotpcrel
61
62// 0x202460(.got) - 0x200300(.R_X86_64_GOTPCREL) = 0x2160
63// CHECK:      Contents of section .R_X86_64_GOTPCREL
64// CHECK-NEXT:   200300 60210000
65
66.section .R_X86_64_GOT32,"a",@progbits
67.global R_X86_64_GOT32
68R_X86_64_GOT32:
69        .long zed@got
70
71// CHECK: Contents of section .R_X86_64_GOT32:
72// CHECK-NEXT: f8efffff
73
74
75// CHECK: Contents of section .R_X86_64_GOT64:
76// CHECK-NEXT: f8efffff ffffffff
77.section .R_X86_64_GOT64,"a",@progbits
78.global R_X86_64_GOT64
79R_X86_64_GOT64:
80        .quad zed@got
81
82.section       .text,"ax",@progbits,unique,1
83.global _start
84_start:
85  call lulz
86
87.section       .text,"ax",@progbits,unique,2
88.zero 4
89.global lulz
90lulz:
91  nop
92
93// CHECK: Disassembly of section .text:
94// CHECK-EMPTY:
95// CHECK-NEXT: <_start>:
96// CHECK-NEXT:   201310:  e8 04 00 00 00   callq 0x201319
97// CHECK-NEXT:   201315:
98
99// CHECK:      <lulz>:
100// CHECK-NEXT:   201319:  90  nop
101
102
103.section       .text2,"ax",@progbits
104.global R_X86_64_32
105R_X86_64_32:
106  movl $R_X86_64_32, %edx
107
108// FIXME: this would be far more self evident if llvm-objdump printed
109// constants in hex.
110// CHECK: Disassembly of section .text2:
111// CHECK-EMPTY:
112// CHECK-NEXT: <R_X86_64_32>:
113// CHECK-NEXT:  20131a: {{.*}} movl $2102042, %edx
114
115.section .R_X86_64_32S,"ax",@progbits
116.global R_X86_64_32S
117R_X86_64_32S:
118  movq lulz - 0x100000, %rdx
119
120// CHECK: Disassembly of section .R_X86_64_32S:
121// CHECK-EMPTY:
122// CHECK-NEXT: <R_X86_64_32S>:
123// CHECK-NEXT:  {{.*}}: {{.*}} movq 1053465, %rdx
124
125.section .R_X86_64_PC32,"ax",@progbits
126.global R_X86_64_PC32
127R_X86_64_PC32:
128 call bar
129 movl $bar, %eax
130//16 is a size of PLT[0]
131// 0x201340 + 16 - (0x201327 + 5) = 36
132// CHECK:      Disassembly of section .R_X86_64_PC32:
133// CHECK-EMPTY:
134// CHECK-NEXT: <R_X86_64_PC32>:
135// CHECK-NEXT:  201327:   {{.*}}  callq  0x201350
136// CHECK-NEXT:  20132c:   {{.*}}  movl $2102096, %eax
137
138.section .R_X86_64_32S_2,"ax",@progbits
139.global R_X86_64_32S_2
140R_X86_64_32S_2:
141  mov bar2, %eax
142// plt is  at 0x201340. The second plt entry is at 0x201360 == 2102112
143// CHECK:      Disassembly of section .R_X86_64_32S_2:
144// CHECK-EMPTY:
145// CHECK-NEXT: <R_X86_64_32S_2>:
146// CHECK-NEXT: 201331: {{.*}}  movl    2102112, %eax
147