| // RUN: llvm-mc -triple thumbv7m-apple-darwin-eabi %s -filetype=obj -o %t |
| // RUN: llvm-readobj -symbols %t | FileCheck %s |
| |
| .data |
| var1 = var2 |
| .long var1 |
| .long var2 |
| .long var2 + 4 |
| defined_early: |
| .long 0 |
| |
| alias_to_early = defined_early |
| alias_to_late = defined_late |
| |
| defined_late: |
| .long 0 |
| |
| .global extern_test |
| extern_test = var2 |
| |
| alias_to_local = Ltmp0 |
| Ltmp0: |
| |
| // CHECK: Symbols [ |
| |
| // defined_early was defined. Actually has value 0xc. |
| // CHECK: Symbol { |
| // CHECK-NEXT: Name: defined_early |
| // CHECK-NEXT: Type: Section (0xE) |
| // CHECK-NEXT: Section: __data (0x2) |
| // CHECK-NEXT: RefType: UndefinedNonLazy (0x0) |
| // CHECK-NEXT: Flags [ (0x0) |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Value: 0x[[DEFINED_EARLY:[0-9A-F]+]] |
| // CHECK-NEXT: } |
| |
| // alias_to_early was an alias to defined_early. But we can resolve it. |
| // CHECK: Symbol { |
| // CHECK-NEXT: Name: alias_to_early |
| // CHECK-NEXT: Type: Section (0xE) |
| // CHECK-NEXT: Section: __data (0x2) |
| // CHECK-NEXT: RefType: UndefinedNonLazy (0x0) |
| // CHECK-NEXT: Flags [ (0x0) |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Value: 0x[[DEFINED_EARLY]] |
| // CHECK-NEXT: } |
| |
| // alias_to_late was an alias to defined_late. But we can resolve it. |
| // CHECK: Symbol { |
| // CHECK-NEXT: Name: alias_to_late |
| // CHECK-NEXT: Type: Section (0xE) |
| // CHECK-NEXT: Section: __data (0x2) |
| // CHECK-NEXT: RefType: UndefinedNonLazy (0x0) |
| // CHECK-NEXT: Flags [ (0x0) |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Value: 0x[[DEFINED_LATE:[0-9A-F]+]] |
| // CHECK-NEXT: } |
| |
| // defined_late was defined. Just after defined_early. |
| // CHECK: Symbol { |
| // CHECK-NEXT: Name: defined_late |
| // CHECK-NEXT: Type: Section (0xE) |
| // CHECK-NEXT: Section: __data (0x2) |
| // CHECK-NEXT: RefType: UndefinedNonLazy (0x0) |
| // CHECK-NEXT: Flags [ (0x0) |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Value: 0x[[DEFINED_LATE]] |
| // CHECK-NEXT: } |
| |
| // alias_to_local is an alias, but what it points to has no |
| // MachO representation. We must resolve it. |
| // CHECK: Symbol { |
| // CHECK-NEXT: Name: alias_to_local (42) |
| // CHECK-NEXT: Type: Section (0xE) |
| // CHECK-NEXT: Section: __data (0x2) |
| // CHECK-NEXT: RefType: UndefinedNonLazy (0x0) |
| // CHECK-NEXT: Flags [ (0x0) |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Value: 0x14 |
| // CHECK-NEXT: } |
| |
| // extern_test was a pure alias to the unknown "var2". |
| // N_INDR and Extern. |
| // CHECK: Name: extern_test |
| // CHECK-NEXT: Extern |
| // CHECK-NEXT: Type: Indirect (0xA) |
| // CHECK-NEXT: Section: (0x0) |
| // CHECK-NEXT: RefType: UndefinedNonLazy (0x0) |
| // CHECK-NEXT: Flags [ (0x0) |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Value: 0x[[VAR2_STRINGINDEX:[0-9a-f]+]] |
| // CHECK-NEXT: } |
| |
| // var1 was another alias to an unknown variable. Not extern this time. |
| // CHECK: Symbol { |
| // CHECK-NEXT: Name: var1 (89) |
| // CHECK-NEXT: Type: Indirect (0xA) |
| // CHECK-NEXT: Section: (0x0) |
| // CHECK-NEXT: RefType: UndefinedNonLazy (0x0) |
| // CHECK-NEXT: Flags [ (0x0) |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Value: 0x[[VAR2_STRINGINDEX]] |
| // CHECK-NEXT: } |
| |
| // var2 was a normal undefined (extern) symbol. |
| // CHECK: Symbol { |
| // CHECK-NEXT: Name: var2 |
| // CHECK-NEXT: Extern |
| // CHECK-NEXT: Type: Undef (0x0) |
| // CHECK-NEXT: Section: (0x0) |
| // CHECK-NEXT: RefType: UndefinedNonLazy (0x0) |
| // CHECK-NEXT: Flags [ (0x0) |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Value: 0x0 |
| // CHECK-NEXT: } |