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 12sym01: 13 .type sym02, @function 14sym02: 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 26sym10: 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 (0x1) 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 (0x1) 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 (0x1) 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 (0x1) 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 (0x1) 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 (0x1) 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 (0x1) 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 (0x1) 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 (0x1) 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 (0x1) 151// CHECK-NEXT: } 152