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