|  | // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s | FileCheck %s | 
|  | // RUN: llvm-mc -filetype=asm -triple x86_64-pc-linux-gnu %s -o - |  FileCheck %s --check-prefix=ASM | 
|  |  | 
|  | // Test that these names are accepted. | 
|  |  | 
|  | .section	.note.GNU-stack,"",@progbits | 
|  | .section	.note.GNU-stack2,"",%progbits | 
|  | .section	.note.GNU-,"",@progbits | 
|  | .section	-.note.GNU,"","progbits" | 
|  | .section	src/stack.c,"",@progbits | 
|  | .section	~!@$%^&*()_-+={[}]|\\:<>,"",@progbits | 
|  |  | 
|  | // CHECK: Name: .note.GNU-stack | 
|  | // CHECK: Name: .note.GNU-stack2 | 
|  | // CHECK: Name: .note.GNU- | 
|  | // CHECK: Name: -.note.GNU | 
|  | // CHECK: Name: src/stack.c | 
|  | // CHECK: Name: ~!@$%^&*()_-+={[}]|\\:<> | 
|  |  | 
|  | // Test that the defaults are used | 
|  |  | 
|  | .section	.init | 
|  | .section	.fini | 
|  | .section	.rodata | 
|  | .section	zed, "" | 
|  |  | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: .init | 
|  | // CHECK-NEXT:     Type: SHT_PROGBITS | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:       SHF_ALLOC | 
|  | // CHECK-NEXT:       SHF_EXECINSTR | 
|  | // CHECK-NEXT:     ] | 
|  | // CHECK-NEXT:     Address: 0x0 | 
|  | // CHECK-NEXT:     Offset: | 
|  | // CHECK-NEXT:     Size: 0 | 
|  | // CHECK-NEXT:     Link: 0 | 
|  | // CHECK-NEXT:     Info: 0 | 
|  | // CHECK-NEXT:     AddressAlignment: 1 | 
|  | // CHECK-NEXT:     EntrySize: 0 | 
|  | // CHECK-NEXT:   } | 
|  | // CHECK-NEXT:   Section { | 
|  | // CHECK-NEXT:     Index: | 
|  | // CHECK-NEXT:     Name: .fini | 
|  | // CHECK-NEXT:     Type: SHT_PROGBITS | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:       SHF_ALLOC | 
|  | // CHECK-NEXT:       SHF_EXECINSTR | 
|  | // CHECK-NEXT:     ] | 
|  | // CHECK-NEXT:     Address: 0x0 | 
|  | // CHECK-NEXT:     Offset: | 
|  | // CHECK-NEXT:     Size: 0 | 
|  | // CHECK-NEXT:     Link: 0 | 
|  | // CHECK-NEXT:     Info: 0 | 
|  | // CHECK-NEXT:     AddressAlignment: 1 | 
|  | // CHECK-NEXT:     EntrySize: 0 | 
|  | // CHECK-NEXT:   } | 
|  | // CHECK-NEXT:   Section { | 
|  | // CHECK-NEXT:     Index: | 
|  | // CHECK-NEXT:     Name: .rodata | 
|  | // CHECK-NEXT:     Type: SHT_PROGBITS | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:       SHF_ALLOC | 
|  | // CHECK-NEXT:     ] | 
|  | // CHECK-NEXT:     Address: 0x0 | 
|  | // CHECK-NEXT:     Offset: | 
|  | // CHECK-NEXT:     Size: 0 | 
|  | // CHECK-NEXT:     Link: 0 | 
|  | // CHECK-NEXT:     Info: 0 | 
|  | // CHECK-NEXT:     AddressAlignment: 1 | 
|  | // CHECK-NEXT:     EntrySize: 0 | 
|  | // CHECK-NEXT:   } | 
|  | // CHECK-NEXT:   Section { | 
|  | // CHECK-NEXT:     Index: | 
|  | // CHECK-NEXT:     Name: zed | 
|  | // CHECK-NEXT:     Type: SHT_PROGBITS | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:     ] | 
|  | // CHECK-NEXT:     Address: 0x0 | 
|  | // CHECK-NEXT:     Offset: | 
|  | // CHECK-NEXT:     Size: 0 | 
|  | // CHECK-NEXT:     Link: 0 | 
|  | // CHECK-NEXT:     Info: 0 | 
|  | // CHECK-NEXT:     AddressAlignment: 1 | 
|  | // CHECK-NEXT:     EntrySize: 0 | 
|  | // CHECK-NEXT:   } | 
|  |  | 
|  | .section	.note.test,"",@note | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: .note.test | 
|  | // CHECK-NEXT:     Type: SHT_NOTE | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:     ] | 
|  | // CHECK-NEXT:     Address: 0x0 | 
|  | // CHECK-NEXT:     Offset: | 
|  | // CHECK-NEXT:     Size: 0 | 
|  | // CHECK-NEXT:     Link: 0 | 
|  | // CHECK-NEXT:     Info: 0 | 
|  | // CHECK-NEXT:     AddressAlignment: 1 | 
|  | // CHECK-NEXT:     EntrySize: 0 | 
|  | // CHECK-NEXT:   } | 
|  |  | 
|  | // Test that we can parse these | 
|  | foo: | 
|  | bar: | 
|  | .section        .text.foo,"axG",@progbits,foo,comdat | 
|  | .section        .text.bar,"axMG",@progbits,42,bar,comdat | 
|  |  | 
|  | // Test that the default values are not used | 
|  |  | 
|  | .section .eh_frame,"a",@unwind | 
|  |  | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: .eh_frame | 
|  | // CHECK-NEXT:     Type: SHT_X86_64_UNWIND | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:       SHF_ALLOC | 
|  | // CHECK-NEXT:     ] | 
|  | // CHECK-NEXT:     Address: 0x0 | 
|  | // CHECK-NEXT:     Offset: | 
|  | // CHECK-NEXT:     Size: 0 | 
|  | // CHECK-NEXT:     Link: 0 | 
|  | // CHECK-NEXT:     Info: 0 | 
|  | // CHECK-NEXT:     AddressAlignment: 1 | 
|  | // CHECK-NEXT:     EntrySize: 0 | 
|  | // CHECK-NEXT:   } | 
|  |  | 
|  | .section .excluded,"e",@progbits | 
|  |  | 
|  | // CHECK:      Section { | 
|  | // CHECK:        Name: .excluded | 
|  | // CHECK-NEXT:   Type: SHT_PROGBITS (0x1) | 
|  | // CHECK-NEXT:   Flags [ (0x80000000) | 
|  | // CHECK-NEXT:     SHF_EXCLUDE (0x80000000) | 
|  | // CHECK-NEXT:   ] | 
|  | // CHECK-NEXT:   Address: 0x0 | 
|  | // CHECK-NEXT:   Offset: | 
|  | // CHECK-NEXT:   Size: 0 | 
|  | // CHECK-NEXT:   Link: 0 | 
|  | // CHECK-NEXT:   Info: 0 | 
|  | // CHECK-NEXT:   AddressAlignment: 1 | 
|  | // CHECK-NEXT:   EntrySize: 0 | 
|  | // CHECK-NEXT: } | 
|  |  | 
|  | // Test that we handle the strings like gas | 
|  | .section bar-"foo" | 
|  | .section "fooo" | 
|  |  | 
|  |  | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: bar-"foo" | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: fooo | 
|  |  | 
|  | // Test SHF_LINK_ORDER | 
|  |  | 
|  | .section .shf_metadata_target1, "a" | 
|  | .quad 0 | 
|  | .section .shf_metadata_target2, "a", @progbits, unique, 1 | 
|  | .Lshf_metadata_target2_1: | 
|  | .quad 0 | 
|  | .section .shf_metadata_target2, "a", @progbits, unique, 2 | 
|  | .Lshf_metadata_target2_2: | 
|  | .quad 0 | 
|  |  | 
|  | .section .shf_metadata1,"ao",@progbits,.Lshf_metadata_target2_1 | 
|  | .section .shf_metadata2,"ao",@progbits,.Lshf_metadata_target2_2 | 
|  | .section .shf_metadata3,"ao",@progbits,.shf_metadata_target1 | 
|  | // ASM: .section .shf_metadata1,"ao",@progbits,.Lshf_metadata_target2_1 | 
|  | // ASM: .section .shf_metadata2,"ao",@progbits,.Lshf_metadata_target2_2 | 
|  | // ASM: .section .shf_metadata3,"ao",@progbits,.shf_metadata_target1 | 
|  |  | 
|  | // CHECK:      Section { | 
|  | // CHECK:        Index: 22 | 
|  | // CHECK-NEXT:   Name: .shf_metadata_target1 | 
|  |  | 
|  | // CHECK:      Section { | 
|  | // CHECK:        Index: 23 | 
|  | // CHECK-NEXT:   Name: .shf_metadata_target2 | 
|  |  | 
|  | // CHECK:      Section { | 
|  | // CHECK:        Index: 24 | 
|  | // CHECK-NEXT:   Name: .shf_metadata_target2 | 
|  |  | 
|  | // CHECK:      Section { | 
|  | // CHECK:        Name: .shf_metadata1 | 
|  | // CHECK-NEXT:   Type: SHT_PROGBITS | 
|  | // CHECK-NEXT:   Flags [ | 
|  | // CHECK-NEXT:     SHF_ALLOC | 
|  | // CHECK-NEXT:     SHF_LINK_ORDER | 
|  | // CHECK-NEXT:   ] | 
|  | // CHECK-NEXT:   Address: | 
|  | // CHECK-NEXT:   Offset: | 
|  | // CHECK-NEXT:   Size: | 
|  | // CHECK-NEXT:   Link:    23 | 
|  | // CHECK-NEXT:   Info:    0 | 
|  |  | 
|  | // CHECK:      Section { | 
|  | // CHECK:        Name: .shf_metadata2 | 
|  | // CHECK-NEXT:   Type: SHT_PROGBITS | 
|  | // CHECK-NEXT:   Flags [ | 
|  | // CHECK-NEXT:     SHF_ALLOC | 
|  | // CHECK-NEXT:     SHF_LINK_ORDER | 
|  | // CHECK-NEXT:   ] | 
|  | // CHECK-NEXT:   Address: | 
|  | // CHECK-NEXT:   Offset: | 
|  | // CHECK-NEXT:   Size: | 
|  | // CHECK-NEXT:   Link:    24 | 
|  | // CHECK-NEXT:   Info:    0 | 
|  |  | 
|  | // CHECK:      Section { | 
|  | // CHECK:        Name: .shf_metadata3 | 
|  | // CHECK-NEXT:   Type: SHT_PROGBITS | 
|  | // CHECK-NEXT:   Flags [ | 
|  | // CHECK-NEXT:     SHF_ALLOC | 
|  | // CHECK-NEXT:     SHF_LINK_ORDER | 
|  | // CHECK-NEXT:   ] | 
|  | // CHECK-NEXT:   Address: | 
|  | // CHECK-NEXT:   Offset: | 
|  | // CHECK-NEXT:   Size: | 
|  | // CHECK-NEXT:   Link:    22 | 
|  | // CHECK-NEXT:   Info:    0 | 
|  |  | 
|  | .section	.text.foo | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: .text.foo | 
|  | // CHECK-NEXT:     Type: SHT_PROGBITS | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:       SHF_ALLOC | 
|  | // CHECK-NEXT:       SHF_EXECINSTR | 
|  | // CHECK-NEXT:     ] | 
|  |  | 
|  | .section .bss | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: .bss | 
|  | // CHECK-NEXT:     Type: SHT_NOBITS | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:       SHF_ALLOC | 
|  | // CHECK-NEXT:       SHF_WRITE | 
|  | // CHECK-NEXT:     ] | 
|  |  | 
|  | .section .bss.foo | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: .bss.foo | 
|  | // CHECK-NEXT:     Type: SHT_NOBITS | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:       SHF_ALLOC | 
|  | // CHECK-NEXT:       SHF_WRITE | 
|  | // CHECK-NEXT:     ] | 
|  |  | 
|  | .section .tbss | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: .tbss | 
|  | // CHECK-NEXT:     Type: SHT_NOBITS | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:       SHF_ALLOC | 
|  | // CHECK-NEXT:       SHF_TLS | 
|  | // CHECK-NEXT:       SHF_WRITE | 
|  | // CHECK-NEXT:     ] | 
|  |  | 
|  | .section .tbss.foo | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: .tbss.foo | 
|  | // CHECK-NEXT:     Type: SHT_NOBITS | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:       SHF_ALLOC | 
|  | // CHECK-NEXT:       SHF_TLS | 
|  | // CHECK-NEXT:       SHF_WRITE | 
|  | // CHECK-NEXT:     ] | 
|  |  | 
|  | // Test SHT_LLVM_ODRTAB | 
|  |  | 
|  | .section .odrtab,"e",@llvm_odrtab | 
|  | // ASM: .section .odrtab,"e",@llvm_odrtab | 
|  |  | 
|  | // CHECK:        Section { | 
|  | // CHECK:          Name: .odrtab | 
|  | // CHECK-NEXT:     Type: SHT_LLVM_ODRTAB | 
|  | // CHECK-NEXT:     Flags [ | 
|  | // CHECK-NEXT:       SHF_EXCLUDE | 
|  | // CHECK-NEXT:     ] |