Home | History | Annotate | Download | only in ELF
      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