1 // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -t | FileCheck %s 2 3 // Test that both % and @ are accepted. 4 .global foo 5 .type foo,%function 6 foo: 7 8 .global bar 9 .type bar,@object 10 bar: 11 12 .type zed,@gnu_unique_object 13 zed: 14 15 obj: 16 .global obj 17 .type obj,@object 18 .type obj,@notype 19 20 func: 21 .global func 22 .type func,@function 23 .type func,@object 24 25 ifunc: 26 .global ifunc 27 .type ifunc,@gnu_indirect_function 28 29 tls: 30 .global tls 31 .type tls,@tls_object 32 .type tls,@gnu_indirect_function 33 34 // Test that "<type>" is accepted. 35 tls_quoted: 36 .global tls_quoted 37 .type tls_quoted,"tls_object" 38 39 // Test that "<type>" is accepted. 40 tls_upper_case: 41 .global tls_upper_case 42 .type tls_upper_case,STT_TLS 43 44 // Test that .set doesnt downgrade the type: 45 // IFUNC > FUNC > OBJECT > NOTYPE 46 // TLS_OBJECT > OBJECT > NOTYPE 47 // also TLS_OBJECT is incompatible with IFUNC and FUNC 48 49 .global sym1 50 .type sym1, @gnu_indirect_function 51 alias1: 52 .global alias1 53 .type alias1, @function 54 .set sym1, alias1 55 56 .global sym2 57 .type sym2, @gnu_indirect_function 58 alias2: 59 .global alias2 60 .type alias2, @object 61 .set sym2, alias2 62 63 .global sym3 64 .type sym3, @gnu_indirect_function 65 alias3: 66 .global alias3 67 .type alias3, @notype 68 .set sym3, alias3 69 70 .global sym4 71 .type sym4, @function 72 alias4: 73 .global alias4 74 .type alias4, @object 75 .set sym4, alias4 76 77 .global sym5 78 .type sym5, @function 79 alias5: 80 .global alias5 81 .type alias5, @notype 82 .set sym5, alias5 83 84 .global sym6 85 .type sym6, @object 86 alias6: 87 .global alias6 88 .type alias6, @notype 89 .set sym6, alias6 90 91 .global sym7 92 .type sym7, @gnu_indirect_function 93 alias7: 94 .global alias7 95 .type alias7, @tls_object 96 .set sym7, alias7 97 98 .global sym8 99 .type sym8, @function 100 .global alias8 101 alias8: 102 .type alias8, @tls_object 103 .set sym8, alias8 104 105 .global sym9 106 .type sym9, @tls_object 107 alias9: 108 .global alias9 109 .type alias9, @object 110 .set sym9, alias9 111 112 .global sym10 113 .type sym10, @tls_object 114 alias10: 115 .global alias10 116 .type alias10, @notype 117 .set sym10, alias10 118 119 .global sym11 120 .type sym11, @tls_object 121 alias11: 122 .global alias11 123 .type alias11, @gnu_indirect_function 124 .set sym11, alias11 125 126 .global sym12 127 .type sym12, @tls_object 128 alias12: 129 .global alias12 130 .type alias12, @function 131 .set sym12, alias12 132 133 // CHECK: Symbol { 134 // CHECK: Name: bar 135 // CHECK-NEXT: Value: 0x0 136 // CHECK-NEXT: Size: 0 137 // CHECK-NEXT: Binding: Global 138 // CHECK-NEXT: Type: Object 139 // CHECK-NEXT: Other: 0 140 // CHECK-NEXT: Section: .text 141 // CHECK-NEXT: } 142 // CHECK-NEXT: Symbol { 143 // CHECK-NEXT: Name: foo 144 // CHECK-NEXT: Value: 0x0 145 // CHECK-NEXT: Size: 0 146 // CHECK-NEXT: Binding: Global 147 // CHECK-NEXT: Type: Function 148 // CHECK-NEXT: Other: 0 149 // CHECK-NEXT: Section: .text 150 // CHECK-NEXT: } 151 // CHECK-NEXT: Symbol { 152 // CHECK-NEXT: Name: func 153 // CHECK-NEXT: Value: 0x0 154 // CHECK-NEXT: Size: 0 155 // CHECK-NEXT: Binding: Global 156 // CHECK-NEXT: Type: Function 157 // CHECK-NEXT: Other: 0 158 // CHECK-NEXT: Section: .text 159 // CHECK-NEXT: } 160 // CHECK-NEXT: Symbol { 161 // CHECK-NEXT: Name: ifunc 162 // CHECK-NEXT: Value: 0x0 163 // CHECK-NEXT: Size: 0 164 // CHECK-NEXT: Binding: Global 165 // CHECK-NEXT: Type: GNU_IFunc 166 // CHECK-NEXT: Other: 0 167 // CHECK-NEXT: Section: .text 168 // CHECK-NEXT: } 169 // CHECK-NEXT: Symbol { 170 // CHECK-NEXT: Name: obj 171 // CHECK-NEXT: Value: 0x0 172 // CHECK-NEXT: Size: 0 173 // CHECK-NEXT: Binding: Global 174 // CHECK-NEXT: Type: Object 175 // CHECK-NEXT: Other: 0 176 // CHECK-NEXT: Section: .text 177 // CHECK-NEXT: } 178 // CHECK-NEXT: Symbol { 179 // CHECK-NEXT: Name: sym1 180 // CHECK-NEXT: Value: 0x0 181 // CHECK-NEXT: Size: 0 182 // CHECK-NEXT: Binding: Global (0x1) 183 // CHECK-NEXT: Type: GNU_IFunc (0xA) 184 // CHECK-NEXT: Other: 0 185 // CHECK-NEXT: Section: .text 186 // CHECK-NEXT: } 187 // CHECK-NEXT: Symbol { 188 // CHECK-NEXT: Name: sym10 189 // CHECK-NEXT: Value: 0x0 190 // CHECK-NEXT: Size: 0 191 // CHECK-NEXT: Binding: Global (0x1) 192 // CHECK-NEXT: Type: TLS (0x6) 193 // CHECK-NEXT: Other: 0 194 // CHECK-NEXT: Section: .text 195 // CHECK-NEXT: } 196 // CHECK-NEXT: Symbol { 197 // CHECK-NEXT: Name: sym11 198 // CHECK-NEXT: Value: 0x0 199 // CHECK-NEXT: Size: 0 200 // CHECK-NEXT: Binding: Global (0x1) 201 // CHECK-NEXT: Type: TLS (0x6) 202 // CHECK-NEXT: Other: 0 203 // CHECK-NEXT: Section: .text 204 // CHECK-NEXT: } 205 // CHECK-NEXT: Symbol { 206 // CHECK-NEXT: Name: sym12 207 // CHECK-NEXT: Value: 0x0 208 // CHECK-NEXT: Size: 0 209 // CHECK-NEXT: Binding: Global (0x1) 210 // CHECK-NEXT: Type: TLS (0x6) 211 // CHECK-NEXT: Other: 0 212 // CHECK-NEXT: Section: .text 213 // CHECK-NEXT: } 214 // CHECK-NEXT: Symbol { 215 // CHECK-NEXT: Name: sym2 216 // CHECK-NEXT: Value: 0x0 217 // CHECK-NEXT: Size: 0 218 // CHECK-NEXT: Binding: Global (0x1) 219 // CHECK-NEXT: Type: GNU_IFunc (0xA) 220 // CHECK-NEXT: Other: 0 221 // CHECK-NEXT: Section: .text 222 // CHECK-NEXT: } 223 // CHECK-NEXT: Symbol { 224 // CHECK-NEXT: Name: sym3 225 // CHECK-NEXT: Value: 0x0 226 // CHECK-NEXT: Size: 0 227 // CHECK-NEXT: Binding: Global (0x1) 228 // CHECK-NEXT: Type: GNU_IFunc (0xA) 229 // CHECK-NEXT: Other: 0 230 // CHECK-NEXT: Section: .text 231 // CHECK-NEXT: } 232 // CHECK-NEXT: Symbol { 233 // CHECK-NEXT: Name: sym4 234 // CHECK-NEXT: Value: 0x0 235 // CHECK-NEXT: Size: 0 236 // CHECK-NEXT: Binding: Global (0x1) 237 // CHECK-NEXT: Type: Function (0x2) 238 // CHECK-NEXT: Other: 0 239 // CHECK-NEXT: Section: .text 240 // CHECK-NEXT: } 241 // CHECK-NEXT: Symbol { 242 // CHECK-NEXT: Name: sym5 243 // CHECK-NEXT: Value: 0x0 244 // CHECK-NEXT: Size: 0 245 // CHECK-NEXT: Binding: Global (0x1) 246 // CHECK-NEXT: Type: Function (0x2) 247 // CHECK-NEXT: Other: 0 248 // CHECK-NEXT: Section: .text 249 // CHECK-NEXT: } 250 // CHECK-NEXT: Symbol { 251 // CHECK-NEXT: Name: sym6 252 // CHECK-NEXT: Value: 0x0 253 // CHECK-NEXT: Size: 0 254 // CHECK-NEXT: Binding: Global (0x1) 255 // CHECK-NEXT: Type: Object (0x1) 256 // CHECK-NEXT: Other: 0 257 // CHECK-NEXT: Section: .text 258 // CHECK-NEXT: } 259 // CHECK-NEXT: Symbol { 260 // CHECK-NEXT: Name: sym7 261 // CHECK-NEXT: Value: 0x0 262 // CHECK-NEXT: Size: 0 263 // CHECK-NEXT: Binding: Global (0x1) 264 // CHECK-NEXT: Type: GNU_IFunc (0xA) 265 // CHECK-NEXT: Other: 0 266 // CHECK-NEXT: Section: .text 267 // CHECK-NEXT: } 268 // CHECK-NEXT: Symbol { 269 // CHECK-NEXT: Name: sym8 270 // CHECK-NEXT: Value: 0x0 271 // CHECK-NEXT: Size: 0 272 // CHECK-NEXT: Binding: Global (0x1) 273 // CHECK-NEXT: Type: Function (0x2) 274 // CHECK-NEXT: Other: 0 275 // CHECK-NEXT: Section: .text 276 // CHECK-NEXT: } 277 // CHECK-NEXT: Symbol { 278 // CHECK-NEXT: Name: sym9 279 // CHECK-NEXT: Value: 0x0 280 // CHECK-NEXT: Size: 0 281 // CHECK-NEXT: Binding: Global (0x1) 282 // CHECK-NEXT: Type: TLS (0x6) 283 // CHECK-NEXT: Other: 0 284 // CHECK-NEXT: Section: .text 285 // CHECK-NEXT: } 286 // CHECK-NEXT: Symbol { 287 // CHECK-NEXT: Name: tls 288 // CHECK-NEXT: Value: 0x0 289 // CHECK-NEXT: Size: 0 290 // CHECK-NEXT: Binding: Global 291 // CHECK-NEXT: Type: TLS 292 // CHECK-NEXT: Other: 0 293 // CHECK-NEXT: Section: .text 294 // CHECK-NEXT: } 295 // CHECK-NEXT: Symbol { 296 // CHECK-NEXT: Name: tls_quoted 297 // CHECK-NEXT: Value: 0x0 298 // CHECK-NEXT: Size: 0 299 // CHECK-NEXT: Binding: Global 300 // CHECK-NEXT: Type: TLS 301 // CHECK-NEXT: Other: 0 302 // CHECK-NEXT: Section: .text 303 // CHECK-NEXT: } 304 // CHECK-NEXT: Symbol { 305 // CHECK-NEXT: Name: tls_upper_case 306 // CHECK-NEXT: Value: 0x0 307 // CHECK-NEXT: Size: 0 308 // CHECK-NEXT: Binding: Global 309 // CHECK-NEXT: Type: TLS 310 // CHECK-NEXT: Other: 0 311 // CHECK-NEXT: Section: .text 312 // CHECK-NEXT: } 313 // CHECK-NEXT: Symbol { 314 // CHECK-NEXT: Name: zed 315 // CHECK-NEXT: Value: 0x0 316 // CHECK-NEXT: Size: 0 317 // CHECK-NEXT: Binding: Unique (0xA) 318 // CHECK-NEXT: Type: Object (0x1) 319 // CHECK-NEXT: Other: 0 320 // CHECK-NEXT: Section: .text 321 // CHECK-NEXT: } 322 // CHECK-NEXT: ] 323