1# REQUIRES: x86
2# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
3# RUN: ld.lld -r %t -o %tout
4# RUN: llvm-objdump -d %tout | FileCheck --check-prefix=DISASM %s
5# RUN: llvm-readobj -r %t | FileCheck -check-prefix=RELOC %s
6# RUN: llvm-readobj --symbols -r %tout | FileCheck -check-prefix=SYMBOL %s
7
8# DISASM:      <_start>:
9# DISASM-NEXT:   0: {{.*}} callq 0
10# DISASM-NEXT:   5: {{.*}} callq 0
11# DISASM-NEXT:   a: {{.*}} callq 0
12# DISASM-NEXT:   f: {{.*}} callq 0
13# DISASM-NEXT:  14: {{.*}} callq 0
14# DISASM-NEXT:  19: {{.*}} callq 0
15# DISASM-NEXT:  1e: {{.*}} callq 0
16# DISASM-NEXT:  23: {{.*}} callq 0
17# DISASM-NEXT:  28: {{.*}} callq 0
18# DISASM-NEXT:  2d: {{.*}} callq 0
19# DISASM-NEXT:  32: {{.*}} callq 0
20# DISASM-NEXT:  37: {{.*}} callq 0
21# DISASM-EMPTY:
22# DISASM-NEXT: Disassembly of section foo:
23# DISASM-EMPTY:
24# DISASM-NEXT: <foo>:
25# DISASM-NEXT:  0: 90 nop
26# DISASM-NEXT:  1: 90 nop
27# DISASM-NEXT:  2: 90 nop
28# DISASM-EMPTY:
29# DISASM-NEXT: Disassembly of section bar:
30# DISASM-EMPTY:
31# DISASM-NEXT: <bar>:
32# DISASM-NEXT:  0: 90 nop
33# DISASM-NEXT:  1: 90 nop
34# DISASM-NEXT:  2: 90 nop
35
36# RELOC:      Relocations [
37# RELOC-NEXT:   Section ({{.*}}) .rela.text {
38# RELOC-NEXT:     0x1 R_X86_64_PC32 __start_foo 0xFFFFFFFFFFFFFFFC
39# RELOC-NEXT:     0x6 R_X86_64_PC32 __stop_foo 0xFFFFFFFFFFFFFFFC
40# RELOC-NEXT:     0xB R_X86_64_PC32 __start_bar 0xFFFFFFFFFFFFFFFC
41# RELOC-NEXT:     0x10 R_X86_64_PC32 __stop_bar 0xFFFFFFFFFFFFFFFC
42# RELOC-NEXT:     0x15 R_X86_64_PC32 __start_doo 0xFFFFFFFFFFFFFFFC
43# RELOC-NEXT:     0x1A R_X86_64_PC32 __stop_doo 0xFFFFFFFFFFFFFFFC
44# RELOC-NEXT:     0x1F R_X86_64_PC32 __preinit_array_start 0xFFFFFFFFFFFFFFFC
45# RELOC-NEXT:     0x24 R_X86_64_PC32 __preinit_array_end 0xFFFFFFFFFFFFFFFC
46# RELOC-NEXT:     0x29 R_X86_64_PC32 __init_array_start 0xFFFFFFFFFFFFFFFC
47# RELOC-NEXT:     0x2E R_X86_64_PC32 __init_array_end 0xFFFFFFFFFFFFFFFC
48# RELOC-NEXT:     0x33 R_X86_64_PC32 __fini_array_start 0xFFFFFFFFFFFFFFFC
49# RELOC-NEXT:     0x38 R_X86_64_PC32 __fini_array_end 0xFFFFFFFFFFFFFFFC
50# RELOC-NEXT:   }
51# RELOC-NEXT: ]
52
53# SYMBOL:      Relocations [
54# SYMBOL-NEXT:  Section ({{.*}}) .rela.text {
55# SYMBOL-NEXT:     0x1 R_X86_64_PC32 __start_foo 0xFFFFFFFFFFFFFFFC
56# SYMBOL-NEXT:     0x6 R_X86_64_PC32 __stop_foo 0xFFFFFFFFFFFFFFFC
57# SYMBOL-NEXT:     0xB R_X86_64_PC32 __start_bar 0xFFFFFFFFFFFFFFFC
58# SYMBOL-NEXT:     0x10 R_X86_64_PC32 __stop_bar 0xFFFFFFFFFFFFFFFC
59# SYMBOL-NEXT:     0x15 R_X86_64_PC32 __start_doo 0xFFFFFFFFFFFFFFFC
60# SYMBOL-NEXT:     0x1A R_X86_64_PC32 __stop_doo 0xFFFFFFFFFFFFFFFC
61# SYMBOL-NEXT:     0x1F R_X86_64_PC32 __preinit_array_start 0xFFFFFFFFFFFFFFFC
62# SYMBOL-NEXT:     0x24 R_X86_64_PC32 __preinit_array_end 0xFFFFFFFFFFFFFFFC
63# SYMBOL-NEXT:     0x29 R_X86_64_PC32 __init_array_start 0xFFFFFFFFFFFFFFFC
64# SYMBOL-NEXT:     0x2E R_X86_64_PC32 __init_array_end 0xFFFFFFFFFFFFFFFC
65# SYMBOL-NEXT:     0x33 R_X86_64_PC32 __fini_array_start 0xFFFFFFFFFFFFFFFC
66# SYMBOL-NEXT:     0x38 R_X86_64_PC32 __fini_array_end 0xFFFFFFFFFFFFFFFC
67# SYMBOL-NEXT:   }
68# SYMBOL-NEXT: ]
69# SYMBOL:      Symbol {
70# SYMBOL:        Name: __fini_array_end
71# SYMBOL-NEXT:   Value: 0x0
72# SYMBOL-NEXT:   Size: 0
73# SYMBOL-NEXT:   Binding: Global
74# SYMBOL-NEXT:   Type: None
75# SYMBOL-NEXT:   Other: 0
76# SYMBOL-NEXT:   Section: Undefined
77# SYMBOL-NEXT: }
78# SYMBOL-NEXT: Symbol {
79# SYMBOL-NEXT:   Name: __fini_array_start
80# SYMBOL-NEXT:   Value: 0x0
81# SYMBOL-NEXT:   Size: 0
82# SYMBOL-NEXT:   Binding: Global
83# SYMBOL-NEXT:   Type: None
84# SYMBOL-NEXT:   Other: 0
85# SYMBOL-NEXT:   Section: Undefined
86# SYMBOL-NEXT: }
87# SYMBOL-NEXT: Symbol {
88# SYMBOL-NEXT:   Name: __init_array_end
89# SYMBOL-NEXT:   Value: 0x0
90# SYMBOL-NEXT:   Size: 0
91# SYMBOL-NEXT:   Binding: Global
92# SYMBOL-NEXT:   Type: None
93# SYMBOL-NEXT:   Other: 0
94# SYMBOL-NEXT:   Section: Undefined
95# SYMBOL-NEXT: }
96# SYMBOL-NEXT: Symbol {
97# SYMBOL-NEXT:   Name: __init_array_start
98# SYMBOL-NEXT:   Value: 0x0
99# SYMBOL-NEXT:   Size: 0
100# SYMBOL-NEXT:   Binding: Global
101# SYMBOL-NEXT:   Type: None
102# SYMBOL-NEXT:   Other: 0
103# SYMBOL-NEXT:   Section: Undefined
104# SYMBOL-NEXT: }
105# SYMBOL-NEXT: Symbol {
106# SYMBOL-NEXT:   Name: __preinit_array_end
107# SYMBOL-NEXT:   Value: 0x0
108# SYMBOL-NEXT:   Size: 0
109# SYMBOL-NEXT:   Binding: Global
110# SYMBOL-NEXT:   Type: None
111# SYMBOL-NEXT:   Other: 0
112# SYMBOL-NEXT:   Section: Undefined
113# SYMBOL-NEXT: }
114# SYMBOL-NEXT: Symbol {
115# SYMBOL-NEXT:   Name: __preinit_array_start
116# SYMBOL-NEXT:   Value: 0x0
117# SYMBOL-NEXT:   Size: 0
118# SYMBOL-NEXT:   Binding: Global
119# SYMBOL-NEXT:   Type: None
120# SYMBOL-NEXT:   Other: 0
121# SYMBOL-NEXT:   Section: Undefined
122# SYMBOL-NEXT: }
123# SYMBOL-NEXT: Symbol {
124# SYMBOL-NEXT:   Name: __start_bar
125# SYMBOL-NEXT:   Value: 0x0
126# SYMBOL-NEXT:   Size: 0
127# SYMBOL-NEXT:   Binding: Global
128# SYMBOL-NEXT:   Type: None
129# SYMBOL-NEXT:   Other: 0
130# SYMBOL-NEXT:   Section: Undefined
131# SYMBOL-NEXT: }
132# SYMBOL-NEXT: Symbol {
133# SYMBOL-NEXT:   Name: __start_doo
134# SYMBOL-NEXT:   Value: 0x0
135# SYMBOL-NEXT:   Size: 0
136# SYMBOL-NEXT:   Binding: Global
137# SYMBOL-NEXT:   Type: None
138# SYMBOL-NEXT:   Other: 0
139# SYMBOL-NEXT:   Section: Undefined
140# SYMBOL-NEXT: }
141# SYMBOL-NEXT: Symbol {
142# SYMBOL-NEXT:   Name: __start_foo
143# SYMBOL-NEXT:   Value: 0x0
144# SYMBOL-NEXT:   Size: 0
145# SYMBOL-NEXT:   Binding: Global
146# SYMBOL-NEXT:   Type: None
147# SYMBOL-NEXT:   Other: 0
148# SYMBOL-NEXT:   Section: Undefined
149# SYMBOL-NEXT: }
150# SYMBOL-NEXT: Symbol {
151# SYMBOL-NEXT:   Name: __stop_bar
152# SYMBOL-NEXT:   Value: 0x0
153# SYMBOL-NEXT:   Size: 0
154# SYMBOL-NEXT:   Binding: Global
155# SYMBOL-NEXT:   Type: None
156# SYMBOL-NEXT:   Other: 0
157# SYMBOL-NEXT:   Section: Undefined
158# SYMBOL-NEXT: }
159# SYMBOL-NEXT: Symbol {
160# SYMBOL-NEXT:   Name: __stop_doo
161# SYMBOL-NEXT:   Value: 0x0
162# SYMBOL-NEXT:   Size: 0
163# SYMBOL-NEXT:   Binding: Global
164# SYMBOL-NEXT:   Type: None
165# SYMBOL-NEXT:   Other: 0
166# SYMBOL-NEXT:   Section: Undefined
167# SYMBOL-NEXT: }
168# SYMBOL-NEXT: Symbol {
169# SYMBOL-NEXT:   Name: __stop_foo
170# SYMBOL-NEXT:   Value: 0x0
171# SYMBOL-NEXT:   Size: 0
172# SYMBOL-NEXT:   Binding: Global
173# SYMBOL-NEXT:   Type: None
174# SYMBOL-NEXT:   Other: 0
175# SYMBOL-NEXT:   Section: Undefined
176# SYMBOL-NEXT: }
177
178.global _start
179.text
180_start:
181 .byte 0xe8
182 .long __start_foo - . -4
183 .byte 0xe8
184 .long __stop_foo - . -4
185
186 .byte 0xe8
187 .long __start_bar - . -4
188 .byte 0xe8
189 .long __stop_bar - . -4
190
191 .byte 0xe8
192 .long __start_doo - . -4
193 .byte 0xe8
194 .long __stop_doo - . -4
195
196 .byte 0xe8
197 .long __preinit_array_start - . -4
198 .byte 0xe8
199 .long __preinit_array_end - . -4
200 .byte 0xe8
201 .long __init_array_start - . -4
202 .byte 0xe8
203 .long __init_array_end - . -4
204 .byte 0xe8
205 .long __fini_array_start - . -4
206 .byte 0xe8
207 .long __fini_array_end - . -4
208
209.section foo,"ax"
210 nop
211 nop
212 nop
213
214.section bar,"ax"
215 nop
216 nop
217 nop
218