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