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 // Test that these names are accepted. 5 6 .section .note.GNU-stack,"",@progbits 7 .section .note.GNU-stack2,"",%progbits 8 .section .note.GNU-,"",@progbits 9 .section -.note.GNU,"","progbits" 10 .section src/stack.c,"",@progbits 11 .section ~!@$%^&*()_-+={[}]|\\:<>,"",@progbits 12 13 // CHECK: Name: .note.GNU-stack 14 // CHECK: Name: .note.GNU-stack2 15 // CHECK: Name: .note.GNU- 16 // CHECK: Name: -.note.GNU 17 // CHECK: Name: src/stack.c 18 // CHECK: Name: ~!@$%^&*()_-+={[}]|\\:<> 19 20 // Test that the defaults are used 21 22 .section .init 23 .section .fini 24 .section .rodata 25 .section zed, "" 26 27 // CHECK: Section { 28 // CHECK: Name: .init 29 // CHECK-NEXT: Type: SHT_PROGBITS 30 // CHECK-NEXT: Flags [ 31 // CHECK-NEXT: SHF_ALLOC 32 // CHECK-NEXT: SHF_EXECINSTR 33 // CHECK-NEXT: ] 34 // CHECK-NEXT: Address: 0x0 35 // CHECK-NEXT: Offset: 36 // CHECK-NEXT: Size: 0 37 // CHECK-NEXT: Link: 0 38 // CHECK-NEXT: Info: 0 39 // CHECK-NEXT: AddressAlignment: 1 40 // CHECK-NEXT: EntrySize: 0 41 // CHECK-NEXT: } 42 // CHECK-NEXT: Section { 43 // CHECK-NEXT: Index: 44 // CHECK-NEXT: Name: .fini 45 // CHECK-NEXT: Type: SHT_PROGBITS 46 // CHECK-NEXT: Flags [ 47 // CHECK-NEXT: SHF_ALLOC 48 // CHECK-NEXT: SHF_EXECINSTR 49 // CHECK-NEXT: ] 50 // CHECK-NEXT: Address: 0x0 51 // CHECK-NEXT: Offset: 52 // CHECK-NEXT: Size: 0 53 // CHECK-NEXT: Link: 0 54 // CHECK-NEXT: Info: 0 55 // CHECK-NEXT: AddressAlignment: 1 56 // CHECK-NEXT: EntrySize: 0 57 // CHECK-NEXT: } 58 // CHECK-NEXT: Section { 59 // CHECK-NEXT: Index: 60 // CHECK-NEXT: Name: .rodata 61 // CHECK-NEXT: Type: SHT_PROGBITS 62 // CHECK-NEXT: Flags [ 63 // CHECK-NEXT: SHF_ALLOC 64 // CHECK-NEXT: ] 65 // CHECK-NEXT: Address: 0x0 66 // CHECK-NEXT: Offset: 67 // CHECK-NEXT: Size: 0 68 // CHECK-NEXT: Link: 0 69 // CHECK-NEXT: Info: 0 70 // CHECK-NEXT: AddressAlignment: 1 71 // CHECK-NEXT: EntrySize: 0 72 // CHECK-NEXT: } 73 // CHECK-NEXT: Section { 74 // CHECK-NEXT: Index: 75 // CHECK-NEXT: Name: zed 76 // CHECK-NEXT: Type: SHT_PROGBITS 77 // CHECK-NEXT: Flags [ 78 // CHECK-NEXT: ] 79 // CHECK-NEXT: Address: 0x0 80 // CHECK-NEXT: Offset: 81 // CHECK-NEXT: Size: 0 82 // CHECK-NEXT: Link: 0 83 // CHECK-NEXT: Info: 0 84 // CHECK-NEXT: AddressAlignment: 1 85 // CHECK-NEXT: EntrySize: 0 86 // CHECK-NEXT: } 87 88 .section .note.test,"",@note 89 // CHECK: Section { 90 // CHECK: Name: .note.test 91 // CHECK-NEXT: Type: SHT_NOTE 92 // CHECK-NEXT: Flags [ 93 // CHECK-NEXT: ] 94 // CHECK-NEXT: Address: 0x0 95 // CHECK-NEXT: Offset: 96 // CHECK-NEXT: Size: 0 97 // CHECK-NEXT: Link: 0 98 // CHECK-NEXT: Info: 0 99 // CHECK-NEXT: AddressAlignment: 1 100 // CHECK-NEXT: EntrySize: 0 101 // CHECK-NEXT: } 102 103 // Test that we can parse these 104 foo: 105 bar: 106 .section .text.foo,"axG",@progbits,foo,comdat 107 .section .text.bar,"axMG",@progbits,42,bar,comdat 108 109 // Test that the default values are not used 110 111 .section .eh_frame,"a",@unwind 112 113 // CHECK: Section { 114 // CHECK: Name: .eh_frame 115 // CHECK-NEXT: Type: SHT_X86_64_UNWIND 116 // CHECK-NEXT: Flags [ 117 // CHECK-NEXT: SHF_ALLOC 118 // CHECK-NEXT: ] 119 // CHECK-NEXT: Address: 0x0 120 // CHECK-NEXT: Offset: 121 // CHECK-NEXT: Size: 0 122 // CHECK-NEXT: Link: 0 123 // CHECK-NEXT: Info: 0 124 // CHECK-NEXT: AddressAlignment: 1 125 // CHECK-NEXT: EntrySize: 0 126 // CHECK-NEXT: } 127 128 .section .excluded,"e",@progbits 129 130 // CHECK: Section { 131 // CHECK: Name: .excluded 132 // CHECK-NEXT: Type: SHT_PROGBITS (0x1) 133 // CHECK-NEXT: Flags [ (0x80000000) 134 // CHECK-NEXT: SHF_EXCLUDE (0x80000000) 135 // CHECK-NEXT: ] 136 // CHECK-NEXT: Address: 0x0 137 // CHECK-NEXT: Offset: 138 // CHECK-NEXT: Size: 0 139 // CHECK-NEXT: Link: 0 140 // CHECK-NEXT: Info: 0 141 // CHECK-NEXT: AddressAlignment: 1 142 // CHECK-NEXT: EntrySize: 0 143 // CHECK-NEXT: } 144 145 // Test that we handle the strings like gas 146 .section bar-"foo" 147 .section "fooo" 148 149 150 // CHECK: Section { 151 // CHECK: Name: bar-"foo" 152 // CHECK: Section { 153 // CHECK: Name: fooo 154 155 // Test SHF_LINK_ORDER 156 157 .section .shf_metadata_target1, "a" 158 .quad 0 159 .section .shf_metadata_target2, "a", @progbits, unique, 1 160 .Lshf_metadata_target2_1: 161 .quad 0 162 .section .shf_metadata_target2, "a", @progbits, unique, 2 163 .Lshf_metadata_target2_2: 164 .quad 0 165 166 .section .shf_metadata1,"ao",@progbits,.Lshf_metadata_target2_1 167 .section .shf_metadata2,"ao",@progbits,.Lshf_metadata_target2_2 168 .section .shf_metadata3,"ao",@progbits,.shf_metadata_target1 169 // ASM: .section .shf_metadata1,"ao",@progbits,.Lshf_metadata_target2_1 170 // ASM: .section .shf_metadata2,"ao",@progbits,.Lshf_metadata_target2_2 171 // ASM: .section .shf_metadata3,"ao",@progbits,.shf_metadata_target1 172 173 // CHECK: Section { 174 // CHECK: Index: 22 175 // CHECK-NEXT: Name: .shf_metadata_target1 176 177 // CHECK: Section { 178 // CHECK: Index: 23 179 // CHECK-NEXT: Name: .shf_metadata_target2 180 181 // CHECK: Section { 182 // CHECK: Index: 24 183 // CHECK-NEXT: Name: .shf_metadata_target2 184 185 // CHECK: Section { 186 // CHECK: Name: .shf_metadata1 187 // CHECK-NEXT: Type: SHT_PROGBITS 188 // CHECK-NEXT: Flags [ 189 // CHECK-NEXT: SHF_ALLOC 190 // CHECK-NEXT: SHF_LINK_ORDER 191 // CHECK-NEXT: ] 192 // CHECK-NEXT: Address: 193 // CHECK-NEXT: Offset: 194 // CHECK-NEXT: Size: 195 // CHECK-NEXT: Link: 23 196 // CHECK-NEXT: Info: 0 197 198 // CHECK: Section { 199 // CHECK: Name: .shf_metadata2 200 // CHECK-NEXT: Type: SHT_PROGBITS 201 // CHECK-NEXT: Flags [ 202 // CHECK-NEXT: SHF_ALLOC 203 // CHECK-NEXT: SHF_LINK_ORDER 204 // CHECK-NEXT: ] 205 // CHECK-NEXT: Address: 206 // CHECK-NEXT: Offset: 207 // CHECK-NEXT: Size: 208 // CHECK-NEXT: Link: 24 209 // CHECK-NEXT: Info: 0 210 211 // CHECK: Section { 212 // CHECK: Name: .shf_metadata3 213 // CHECK-NEXT: Type: SHT_PROGBITS 214 // CHECK-NEXT: Flags [ 215 // CHECK-NEXT: SHF_ALLOC 216 // CHECK-NEXT: SHF_LINK_ORDER 217 // CHECK-NEXT: ] 218 // CHECK-NEXT: Address: 219 // CHECK-NEXT: Offset: 220 // CHECK-NEXT: Size: 221 // CHECK-NEXT: Link: 22 222 // CHECK-NEXT: Info: 0 223 224 .section .text.foo 225 // CHECK: Section { 226 // CHECK: Name: .text.foo 227 // CHECK-NEXT: Type: SHT_PROGBITS 228 // CHECK-NEXT: Flags [ 229 // CHECK-NEXT: SHF_ALLOC 230 // CHECK-NEXT: SHF_EXECINSTR 231 // CHECK-NEXT: ] 232 233 .section .bss 234 // CHECK: Section { 235 // CHECK: Name: .bss 236 // CHECK-NEXT: Type: SHT_NOBITS 237 // CHECK-NEXT: Flags [ 238 // CHECK-NEXT: SHF_ALLOC 239 // CHECK-NEXT: SHF_WRITE 240 // CHECK-NEXT: ] 241 242 .section .bss.foo 243 // CHECK: Section { 244 // CHECK: Name: .bss.foo 245 // CHECK-NEXT: Type: SHT_NOBITS 246 // CHECK-NEXT: Flags [ 247 // CHECK-NEXT: SHF_ALLOC 248 // CHECK-NEXT: SHF_WRITE 249 // CHECK-NEXT: ] 250 251 .section .tbss 252 // CHECK: Section { 253 // CHECK: Name: .tbss 254 // CHECK-NEXT: Type: SHT_NOBITS 255 // CHECK-NEXT: Flags [ 256 // CHECK-NEXT: SHF_ALLOC 257 // CHECK-NEXT: SHF_TLS 258 // CHECK-NEXT: SHF_WRITE 259 // CHECK-NEXT: ] 260 261 .section .tbss.foo 262 // CHECK: Section { 263 // CHECK: Name: .tbss.foo 264 // CHECK-NEXT: Type: SHT_NOBITS 265 // CHECK-NEXT: Flags [ 266 // CHECK-NEXT: SHF_ALLOC 267 // CHECK-NEXT: SHF_TLS 268 // CHECK-NEXT: SHF_WRITE 269 // CHECK-NEXT: ] 270 271 // Test SHT_LLVM_ODRTAB 272 273 .section .odrtab,"e",@llvm_odrtab 274 // ASM: .section .odrtab,"e",@llvm_odrtab 275 276 // CHECK: Section { 277 // CHECK: Name: .odrtab 278 // CHECK-NEXT: Type: SHT_LLVM_ODRTAB 279 // CHECK-NEXT: Flags [ 280 // CHECK-NEXT: SHF_EXCLUDE 281 // CHECK-NEXT: ] 282 283 // Test SHT_LLVM_LINKER_OPTIONS 284 285 .section ".linker-options","e",@llvm_linker_options 286 // ASM: .section ".linker-options","e",@llvm_linker_options 287 288 // CHECK: Section { 289 // CHECK: Name: .linker-options 290 // CHECK-NEXT: Type: SHT_LLVM_LINKER_OPTIONS 291 // CHECK-NEXT: Flags [ 292 // CHECK-NEXT: SHF_EXCLUDE 293 // CHECK-NEXT: ] 294 // CHECK: } 295 296