1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple thumbv7m-apple-darwin-eabi %s -filetype=obj -o %t 2*9880d681SAndroid Build Coastguard Worker// RUN: llvm-readobj -symbols %t | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker .data 5*9880d681SAndroid Build Coastguard Worker var1 = var2 6*9880d681SAndroid Build Coastguard Worker .long var1 7*9880d681SAndroid Build Coastguard Worker .long var2 8*9880d681SAndroid Build Coastguard Worker .long var2 + 4 9*9880d681SAndroid Build Coastguard Workerdefined_early: 10*9880d681SAndroid Build Coastguard Worker .long 0 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker alias_to_early = defined_early 13*9880d681SAndroid Build Coastguard Worker alias_to_late = defined_late 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefined_late: 16*9880d681SAndroid Build Coastguard Worker .long 0 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker .global extern_test 19*9880d681SAndroid Build Coastguard Worker extern_test = var2 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker alias_to_local = Ltmp0 22*9880d681SAndroid Build Coastguard WorkerLtmp0: 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker// CHECK: Symbols [ 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker // defined_early was defined. Actually has value 0xc. 27*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 28*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Name: defined_early 29*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Type: Section (0xE) 30*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Section: __data (0x2) 31*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: RefType: UndefinedNonLazy (0x0) 32*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Flags [ (0x0) 33*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: ] 34*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Value: 0x[[DEFINED_EARLY:[0-9A-F]+]] 35*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker // alias_to_early was an alias to defined_early. But we can resolve it. 38*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 39*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Name: alias_to_early 40*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Type: Section (0xE) 41*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Section: __data (0x2) 42*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: RefType: UndefinedNonLazy (0x0) 43*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Flags [ (0x0) 44*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: ] 45*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Value: 0x[[DEFINED_EARLY]] 46*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker // alias_to_late was an alias to defined_late. But we can resolve it. 49*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 50*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Name: alias_to_late 51*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Type: Section (0xE) 52*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Section: __data (0x2) 53*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: RefType: UndefinedNonLazy (0x0) 54*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Flags [ (0x0) 55*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: ] 56*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Value: 0x[[DEFINED_LATE:[0-9A-F]+]] 57*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker // defined_late was defined. Just after defined_early. 60*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 61*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Name: defined_late 62*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Type: Section (0xE) 63*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Section: __data (0x2) 64*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: RefType: UndefinedNonLazy (0x0) 65*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Flags [ (0x0) 66*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: ] 67*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Value: 0x[[DEFINED_LATE]] 68*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker // alias_to_local is an alias, but what it points to has no 71*9880d681SAndroid Build Coastguard Worker // MachO representation. We must resolve it. 72*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 73*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Name: alias_to_local (42) 74*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Type: Section (0xE) 75*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Section: __data (0x2) 76*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: RefType: UndefinedNonLazy (0x0) 77*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Flags [ (0x0) 78*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: ] 79*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Value: 0x14 80*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker // extern_test was a pure alias to the unknown "var2". 83*9880d681SAndroid Build Coastguard Worker // N_INDR and Extern. 84*9880d681SAndroid Build Coastguard Worker// CHECK: Name: extern_test 85*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Extern 86*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Type: Indirect (0xA) 87*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Section: (0x0) 88*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: RefType: UndefinedNonLazy (0x0) 89*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Flags [ (0x0) 90*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: ] 91*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Value: 0x[[VAR2_STRINGINDEX:[0-9a-f]+]] 92*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker // var1 was another alias to an unknown variable. Not extern this time. 95*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 96*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Name: var1 (89) 97*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Type: Indirect (0xA) 98*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Section: (0x0) 99*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: RefType: UndefinedNonLazy (0x0) 100*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Flags [ (0x0) 101*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: ] 102*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Value: 0x[[VAR2_STRINGINDEX]] 103*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker // var2 was a normal undefined (extern) symbol. 106*9880d681SAndroid Build Coastguard Worker// CHECK: Symbol { 107*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Name: var2 108*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Extern 109*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Type: Undef (0x0) 110*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Section: (0x0) 111*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: RefType: UndefinedNonLazy (0x0) 112*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Flags [ (0x0) 113*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: ] 114*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Value: 0x0 115*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 116