xref: /llvm-project/llvm/test/MC/ELF/section.s (revision 7b23f413d1f76532825e470b523e971818d453ca)
1// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -S - | FileCheck %s
2// RUN: llvm-mc -filetype=asm -triple x86_64-pc-linux-gnu %s -o - |  FileCheck %s --check-prefix=ASM
3
4/// The second .text has no effect, therefore it is not printed.
5// ASM:       .text
6// ASM-EMPTY:
7.text
8.text
9
10// Test that these names are accepted.
11
12.section	.note.GNU-stack,"",@progbits
13.section	.note.GNU-stack2,"",%progbits
14.section	.note.GNU-,"",@progbits
15.section	-.note.GNU,"","progbits"
16.section	src/stack.c,"",@progbits
17.section	~!@$%^&*()_-+={[}]|\\:<>,"",@progbits
18
19// CHECK: Name: .note.GNU-stack
20// CHECK: Name: .note.GNU-stack2
21// CHECK: Name: .note.GNU-
22// CHECK: Name: -.note.GNU
23// CHECK: Name: src/stack.c
24// CHECK: Name: ~!@$%^&*()_-+={[}]|\\:<>
25
26// Test that the defaults are used
27
28.section	.init
29.section	.fini
30.section	.rodata
31.section	zed, ""
32
33// CHECK:        Section {
34// CHECK:          Name: .init
35// CHECK-NEXT:     Type: SHT_PROGBITS
36// CHECK-NEXT:     Flags [
37// CHECK-NEXT:       SHF_ALLOC
38// CHECK-NEXT:       SHF_EXECINSTR
39// CHECK-NEXT:     ]
40// CHECK-NEXT:     Address: 0x0
41// CHECK-NEXT:     Offset:
42// CHECK-NEXT:     Size: 0
43// CHECK-NEXT:     Link: 0
44// CHECK-NEXT:     Info: 0
45// CHECK-NEXT:     AddressAlignment: 1
46// CHECK-NEXT:     EntrySize: 0
47// CHECK-NEXT:   }
48// CHECK-NEXT:   Section {
49// CHECK-NEXT:     Index:
50// CHECK-NEXT:     Name: .fini
51// CHECK-NEXT:     Type: SHT_PROGBITS
52// CHECK-NEXT:     Flags [
53// CHECK-NEXT:       SHF_ALLOC
54// CHECK-NEXT:       SHF_EXECINSTR
55// CHECK-NEXT:     ]
56// CHECK-NEXT:     Address: 0x0
57// CHECK-NEXT:     Offset:
58// CHECK-NEXT:     Size: 0
59// CHECK-NEXT:     Link: 0
60// CHECK-NEXT:     Info: 0
61// CHECK-NEXT:     AddressAlignment: 1
62// CHECK-NEXT:     EntrySize: 0
63// CHECK-NEXT:   }
64// CHECK-NEXT:   Section {
65// CHECK-NEXT:     Index:
66// CHECK-NEXT:     Name: .rodata
67// CHECK-NEXT:     Type: SHT_PROGBITS
68// CHECK-NEXT:     Flags [
69// CHECK-NEXT:       SHF_ALLOC
70// CHECK-NEXT:     ]
71// CHECK-NEXT:     Address: 0x0
72// CHECK-NEXT:     Offset:
73// CHECK-NEXT:     Size: 0
74// CHECK-NEXT:     Link: 0
75// CHECK-NEXT:     Info: 0
76// CHECK-NEXT:     AddressAlignment: 1
77// CHECK-NEXT:     EntrySize: 0
78// CHECK-NEXT:   }
79// CHECK-NEXT:   Section {
80// CHECK-NEXT:     Index:
81// CHECK-NEXT:     Name: zed
82// CHECK-NEXT:     Type: SHT_PROGBITS
83// CHECK-NEXT:     Flags [
84// CHECK-NEXT:     ]
85// CHECK-NEXT:     Address: 0x0
86// CHECK-NEXT:     Offset:
87// CHECK-NEXT:     Size: 0
88// CHECK-NEXT:     Link: 0
89// CHECK-NEXT:     Info: 0
90// CHECK-NEXT:     AddressAlignment: 1
91// CHECK-NEXT:     EntrySize: 0
92// CHECK-NEXT:   }
93
94.section	.note.test,"",@note
95// CHECK:        Section {
96// CHECK:          Name: .note.test
97// CHECK-NEXT:     Type: SHT_NOTE
98// CHECK-NEXT:     Flags [
99// CHECK-NEXT:     ]
100// CHECK-NEXT:     Address: 0x0
101// CHECK-NEXT:     Offset:
102// CHECK-NEXT:     Size: 0
103// CHECK-NEXT:     Link: 0
104// CHECK-NEXT:     Info: 0
105// CHECK-NEXT:     AddressAlignment: 1
106// CHECK-NEXT:     EntrySize: 0
107// CHECK-NEXT:   }
108
109// Test that we can parse these
110foo:
111bar:
112.section        .text.foo,"axG",@progbits,foo,comdat
113.section        .text.bar,"axMG",@progbits,42,bar,comdat
114
115// Test that the default values are not used
116
117.section .eh_frame,"a",@unwind
118
119// CHECK:        Section {
120// CHECK:          Name: .eh_frame
121// CHECK-NEXT:     Type: SHT_X86_64_UNWIND
122// CHECK-NEXT:     Flags [
123// CHECK-NEXT:       SHF_ALLOC
124// CHECK-NEXT:     ]
125// CHECK-NEXT:     Address: 0x0
126// CHECK-NEXT:     Offset:
127// CHECK-NEXT:     Size: 0
128// CHECK-NEXT:     Link: 0
129// CHECK-NEXT:     Info: 0
130// CHECK-NEXT:     AddressAlignment: 1
131// CHECK-NEXT:     EntrySize: 0
132// CHECK-NEXT:   }
133
134.section .excluded,"e",@progbits
135
136// CHECK:      Section {
137// CHECK:        Name: .excluded
138// CHECK-NEXT:   Type: SHT_PROGBITS (0x1)
139// CHECK-NEXT:   Flags [ (0x80000000)
140// CHECK-NEXT:     SHF_EXCLUDE (0x80000000)
141// CHECK-NEXT:   ]
142// CHECK-NEXT:   Address: 0x0
143// CHECK-NEXT:   Offset:
144// CHECK-NEXT:   Size: 0
145// CHECK-NEXT:   Link: 0
146// CHECK-NEXT:   Info: 0
147// CHECK-NEXT:   AddressAlignment: 1
148// CHECK-NEXT:   EntrySize: 0
149// CHECK-NEXT: }
150
151// Test that we handle the strings like gas
152.section bar-"foo"
153.section "fooo"
154
155
156// CHECK:        Section {
157// CHECK:          Name: bar-"foo"
158// CHECK:        Section {
159// CHECK:          Name: fooo
160
161// Test SHF_LINK_ORDER
162
163.section .shf_metadata_target1, "a"
164        .quad 0
165.section .shf_metadata_target2, "a", @progbits, unique, 1
166.Lshf_metadata_target2_1:
167        .quad 0
168.section .shf_metadata_target2, "a", @progbits, unique, 2
169.Lshf_metadata_target2_2:
170        .quad 0
171
172.section .shf_metadata1,"ao",@progbits,.Lshf_metadata_target2_1
173.section .shf_metadata2,"ao",@progbits,.Lshf_metadata_target2_2
174.section .shf_metadata3,"ao",@progbits,.shf_metadata_target1
175.section .linkorder_group_zero,"aoG",@progbits,.shf_metadata_target1,foo
176// ASM: .section .shf_metadata1,"ao",@progbits,.Lshf_metadata_target2_1
177// ASM: .section .shf_metadata2,"ao",@progbits,.Lshf_metadata_target2_2
178// ASM: .section .shf_metadata3,"ao",@progbits,.shf_metadata_target1
179// ASM: .section .linkorder_group_zero,"aoG",@progbits,.shf_metadata_target1,foo{{$}}
180
181// CHECK:      Section {
182// CHECK:        Index: 22
183// CHECK-NEXT:   Name: .shf_metadata_target1
184
185// CHECK:      Section {
186// CHECK:        Index: 23
187// CHECK-NEXT:   Name: .shf_metadata_target2
188
189// CHECK:      Section {
190// CHECK:        Index: 24
191// CHECK-NEXT:   Name: .shf_metadata_target2
192
193// CHECK:      Section {
194// CHECK:        Name: .shf_metadata1
195// CHECK-NEXT:   Type: SHT_PROGBITS
196// CHECK-NEXT:   Flags [
197// CHECK-NEXT:     SHF_ALLOC
198// CHECK-NEXT:     SHF_LINK_ORDER
199// CHECK-NEXT:   ]
200// CHECK-NEXT:   Address:
201// CHECK-NEXT:   Offset:
202// CHECK-NEXT:   Size:
203// CHECK-NEXT:   Link:    23
204// CHECK-NEXT:   Info:    0
205
206// CHECK:      Section {
207// CHECK:        Name: .shf_metadata2
208// CHECK-NEXT:   Type: SHT_PROGBITS
209// CHECK-NEXT:   Flags [
210// CHECK-NEXT:     SHF_ALLOC
211// CHECK-NEXT:     SHF_LINK_ORDER
212// CHECK-NEXT:   ]
213// CHECK-NEXT:   Address:
214// CHECK-NEXT:   Offset:
215// CHECK-NEXT:   Size:
216// CHECK-NEXT:   Link:    24
217// CHECK-NEXT:   Info:    0
218
219// CHECK:      Section {
220// CHECK:        Name: .shf_metadata3
221// CHECK-NEXT:   Type: SHT_PROGBITS
222// CHECK-NEXT:   Flags [
223// CHECK-NEXT:     SHF_ALLOC
224// CHECK-NEXT:     SHF_LINK_ORDER
225// CHECK-NEXT:   ]
226// CHECK-NEXT:   Address:
227// CHECK-NEXT:   Offset:
228// CHECK-NEXT:   Size:
229// CHECK-NEXT:   Link:    22
230// CHECK-NEXT:   Info:    0
231
232// CHECK:      Section {
233// CHECK:        Name: .linkorder_group_zero
234// CHECK-NEXT:   Type: SHT_PROGBITS
235// CHECK-NEXT:   Flags [
236// CHECK-NEXT:     SHF_ALLOC
237// CHECK-NEXT:     SHF_GROUP
238// CHECK-NEXT:     SHF_LINK_ORDER
239// CHECK-NEXT:   ]
240// CHECK-NEXT:   Address:
241// CHECK-NEXT:   Offset:
242// CHECK-NEXT:   Size:
243// CHECK-NEXT:   Link:    22
244// CHECK-NEXT:   Info:    0
245
246.section	.text.foo
247// CHECK:        Section {
248// CHECK:          Name: .text.foo
249// CHECK-NEXT:     Type: SHT_PROGBITS
250// CHECK-NEXT:     Flags [
251// CHECK-NEXT:       SHF_ALLOC
252// CHECK-NEXT:       SHF_EXECINSTR
253// CHECK-NEXT:     ]
254
255.section .bss
256// CHECK:        Section {
257// CHECK:          Name: .bss
258// CHECK-NEXT:     Type: SHT_NOBITS
259// CHECK-NEXT:     Flags [
260// CHECK-NEXT:       SHF_ALLOC
261// CHECK-NEXT:       SHF_WRITE
262// CHECK-NEXT:     ]
263
264.section .bss.foo
265// CHECK:        Section {
266// CHECK:          Name: .bss.foo
267// CHECK-NEXT:     Type: SHT_NOBITS
268// CHECK-NEXT:     Flags [
269// CHECK-NEXT:       SHF_ALLOC
270// CHECK-NEXT:       SHF_WRITE
271// CHECK-NEXT:     ]
272
273.section .tbss
274// CHECK:        Section {
275// CHECK:          Name: .tbss
276// CHECK-NEXT:     Type: SHT_NOBITS
277// CHECK-NEXT:     Flags [
278// CHECK-NEXT:       SHF_ALLOC
279// CHECK-NEXT:       SHF_TLS
280// CHECK-NEXT:       SHF_WRITE
281// CHECK-NEXT:     ]
282
283.section .tbss.foo
284// CHECK:        Section {
285// CHECK:          Name: .tbss.foo
286// CHECK-NEXT:     Type: SHT_NOBITS
287// CHECK-NEXT:     Flags [
288// CHECK-NEXT:       SHF_ALLOC
289// CHECK-NEXT:       SHF_TLS
290// CHECK-NEXT:       SHF_WRITE
291// CHECK-NEXT:     ]
292
293.section .large,"l"
294// ASM: .section .large,"l"
295
296// CHECK:        Section {
297// CHECK:          Name: .large
298// CHECK-NEXT:     Type: SHT_PROGBITS
299// CHECK-NEXT:     Flags [
300// CHECK-NEXT:       SHF_X86_64_LARGE
301// CHECK-NEXT:     ]
302
303// Test SHT_LLVM_ODRTAB
304
305.section .odrtab,"e",@llvm_odrtab
306// ASM: .section .odrtab,"e",@llvm_odrtab
307
308// CHECK:        Section {
309// CHECK:          Name: .odrtab
310// CHECK-NEXT:     Type: SHT_LLVM_ODRTAB
311// CHECK-NEXT:     Flags [
312// CHECK-NEXT:       SHF_EXCLUDE
313// CHECK-NEXT:     ]
314
315// Test SHT_LLVM_LINKER_OPTIONS
316
317.section ".linker-options","e",@llvm_linker_options
318// ASM: .section ".linker-options","e",@llvm_linker_options
319
320// CHECK: Section {
321// CHECK:   Name: .linker-options
322// CHECK-NEXT:   Type: SHT_LLVM_LINKER_OPTIONS
323// CHECK-NEXT:   Flags [
324// CHECK-NEXT:     SHF_EXCLUDE
325// CHECK-NEXT:   ]
326// CHECK: }
327
328// Test SHT_LLVM_DEPENDENT_LIBRARIES
329
330.section .deplibs,"MS",@llvm_dependent_libraries,1
331// ASM: .section .deplibs,"MS",@llvm_dependent_libraries,1
332
333// CHECK: Section {
334// CHECK:   Name: .deplibs
335// CHECK-NEXT:   Type: SHT_LLVM_DEPENDENT_LIBRARIES
336// CHECK-NEXT:   Flags [
337// CHECK-NEXT:       SHF_MERGE
338// CHECK-NEXT:       SHF_STRINGS
339// CHECK-NEXT:   ]
340// CHECK: }
341
342// Test SHT_LLVM_SYMPART
343
344.section .llvm_sympart,"",@llvm_sympart
345// ASM: .section .llvm_sympart,"",@llvm_sympart
346
347// CHECK: Section {
348// CHECK:   Name: .llvm_sympart
349// CHECK-NEXT:   Type: SHT_LLVM_SYMPART
350// CHECK-NEXT:   Flags [
351// CHECK-NEXT:   ]
352// CHECK: }
353
354.section .llvm.lto,"e",@llvm_lto
355// ASM: .section .llvm.lto,"e",@llvm_lto
356
357// CHECK:      Section {
358// CHECK:        Name: .llvm.lto
359// CHECK-NEXT:   Type: SHT_LLVM_LTO
360// CHECK-NEXT:   Flags [
361// CHECK-NEXT:     SHF_EXCLUDE
362// CHECK-NEXT:   ]
363// CHECK:      }
364