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 // This tests that types are propagated from symbols to their aliases. Our
      4 // behavior is a bit different than gas. If the type of a symbol changes,
      5 // gas will update the type of the aliases only if those aliases were declare
      6 // at a point in the file where the aliased symbol was already define.
      7 
      8 // The lines marked with GAS illustrate this difference.
      9 
     10 
     11 	.type sym01, @object
     12 sym01:
     13 	.type sym02, @function
     14 sym02:
     15 
     16 	sym03 = sym01
     17 	sym04 = sym03
     18 .type sym03, @function
     19 	sym05 = sym03
     20 	sym06 = sym01 - sym02
     21 	sym07 = sym02 - sym01
     22 
     23 	sym08 = sym10
     24 	sym09 = sym10 + 1
     25 	.type sym10, @object
     26 sym10:
     27 
     28 	sym11 = sym10
     29 	sym12 = sym10 + 1
     30 	.type sym10, @function
     31 
     32 // CHECK:       Symbol {
     33 // CHECK:         Name: sym01
     34 // CHECK-NEXT:    Value: 0x0
     35 // CHECK-NEXT:    Size: 0
     36 // CHECK-NEXT:    Binding: Local (0x0)
     37 // CHECK-NEXT:    Type: Object (0x1)
     38 // CHECK-NEXT:    Other: 0
     39 // CHECK-NEXT:    Section: .text
     40 // CHECK-NEXT:  }
     41 // CHECK-NEXT:  Symbol {
     42 // CHECK-NEXT:    Name: sym02
     43 // CHECK-NEXT:    Value: 0x0
     44 // CHECK-NEXT:    Size: 0
     45 // CHECK-NEXT:    Binding: Local (0x0)
     46 // CHECK-NEXT:    Type: Function (0x2)
     47 // CHECK-NEXT:    Other: 0
     48 // CHECK-NEXT:    Section: .text
     49 // CHECK-NEXT:  }
     50 // CHECK-NEXT:  Symbol {
     51 // CHECK-NEXT:    Name: sym03
     52 // CHECK-NEXT:    Value: 0x0
     53 // CHECK-NEXT:    Size: 0
     54 // CHECK-NEXT:    Binding: Local (0x0)
     55 // CHECK-NEXT:    Type: Function (0x2)
     56 // CHECK-NEXT:    Other: 0
     57 // CHECK-NEXT:    Section: .text
     58 // CHECK-NEXT:  }
     59 // CHECK-NEXT:  Symbol {
     60 // CHECK-NEXT:    Name: sym04
     61 // CHECK-NEXT:    Value: 0x0
     62 // CHECK-NEXT:    Size: 0
     63 // CHECK-NEXT:    Binding: Local (0x0)
     64 // CHECK-NEXT:    Type: Object (0x1)
     65 // CHECK-NEXT:    Other: 0
     66 // CHECK-NEXT:    Section: .text
     67 // CHECK-NEXT:  }
     68 // CHECK-NEXT:  Symbol {
     69 // CHECK-NEXT:    Name: sym05
     70 // CHECK-NEXT:    Value: 0x0
     71 // CHECK-NEXT:    Size: 0
     72 // CHECK-NEXT:    Binding: Local (0x0)
     73 
     74 // GAS:           Type: Function (0x2)
     75 // CHECK-NEXT:    Type: Object (0x1)
     76 
     77 // CHECK-NEXT:    Other: 0
     78 // CHECK-NEXT:    Section: .text
     79 // CHECK-NEXT:  }
     80 // CHECK-NEXT:  Symbol {
     81 // CHECK-NEXT:    Name: sym06
     82 // CHECK-NEXT:    Value: 0x0
     83 // CHECK-NEXT:    Size: 0
     84 // CHECK-NEXT:    Binding: Local (0x0)
     85 // CHECK-NEXT:    Type: None (0x0)
     86 // CHECK-NEXT:    Other: 0
     87 // CHECK-NEXT:    Section: Absolute (0xFFF1)
     88 // CHECK-NEXT:  }
     89 // CHECK-NEXT:  Symbol {
     90 // CHECK-NEXT:    Name: sym07
     91 // CHECK-NEXT:    Value: 0x0
     92 // CHECK-NEXT:    Size: 0
     93 // CHECK-NEXT:    Binding: Local (0x0)
     94 // CHECK-NEXT:    Type: None (0x0)
     95 // CHECK-NEXT:    Other: 0
     96 // CHECK-NEXT:    Section: Absolute (0xFFF1)
     97 // CHECK-NEXT:  }
     98 // CHECK-NEXT:  Symbol {
     99 // CHECK-NEXT:    Name: sym08
    100 // CHECK-NEXT:    Value: 0x0
    101 // CHECK-NEXT:    Size: 0
    102 // CHECK-NEXT:    Binding: Local (0x0)
    103 // CHECK-NEXT:    Type: Function (0x2)
    104 // CHECK-NEXT:    Other: 0
    105 // CHECK-NEXT:    Section: .text
    106 // CHECK-NEXT:  }
    107 // CHECK-NEXT:  Symbol {
    108 // CHECK-NEXT:    Name: sym09
    109 // CHECK-NEXT:    Value: 0x1
    110 // CHECK-NEXT:    Size: 0
    111 // CHECK-NEXT:    Binding: Local (0x0)
    112 
    113 // GAS:           Type: None (0x0)
    114 // CHECK-NEXT:    Type: Function (0x2)
    115 
    116 // CHECK-NEXT:    Other: 0
    117 // CHECK-NEXT:    Section: .text
    118 // CHECK-NEXT:  }
    119 // CHECK-NEXT:  Symbol {
    120 // CHECK-NEXT:    Name: sym10
    121 // CHECK-NEXT:    Value: 0x0
    122 // CHECK-NEXT:    Size: 0
    123 // CHECK-NEXT:    Binding: Local (0x0)
    124 // CHECK-NEXT:    Type: Function (0x2)
    125 // CHECK-NEXT:    Other: 0
    126 // CHECK-NEXT:    Section: .text
    127 // CHECK-NEXT:  }
    128 // CHECK-NEXT:  Symbol {
    129 // CHECK-NEXT:    Name: sym11
    130 // CHECK-NEXT:    Value: 0x0
    131 // CHECK-NEXT:    Size: 0
    132 // CHECK-NEXT:    Binding: Local (0x0)
    133 
    134 // GAS:           Type: Object (0x1)
    135 // CHECK-NEXT:    Type: Function (0x2)
    136 
    137 // CHECK-NEXT:    Other: 0
    138 // CHECK-NEXT:    Section: .text
    139 // CHECK-NEXT:  }
    140 // CHECK-NEXT:  Symbol {
    141 // CHECK-NEXT:    Name: sym12
    142 // CHECK-NEXT:    Value: 0x1
    143 // CHECK-NEXT:    Size: 0
    144 // CHECK-NEXT:    Binding: Local (0x0)
    145 
    146 // GAS:           Type: Object (0x1)
    147 // CHECK-NEXT:    Type: Function (0x2)
    148 
    149 // CHECK-NEXT:    Other: 0
    150 // CHECK-NEXT:    Section: .text
    151 // CHECK-NEXT:  }
    152