| // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -t | FileCheck %s | |
| // This is a long test that checks that the aliases created by weakref are | |
| // never in the symbol table and that the only case it causes a symbol to | |
| // be output as a weak undefined symbol is if that variable is not defined | |
| // in this file and all the references to it are done via the alias. | |
| .weakref foo1, bar1 | |
| .weakref foo2, bar2 | |
| .long bar2 | |
| .weakref foo3, bar3 | |
| .long foo3 | |
| .weakref foo4, bar4 | |
| .long foo4 | |
| .long bar4 | |
| .weakref foo5, bar5 | |
| .long bar5 | |
| .long foo5 | |
| bar6: | |
| .weakref foo6, bar6 | |
| bar7: | |
| .weakref foo7, bar7 | |
| .long bar7 | |
| bar8: | |
| .weakref foo8, bar8 | |
| .long foo8 | |
| bar9: | |
| .weakref foo9, bar9 | |
| .long foo9 | |
| .long bar9 | |
| bar10: | |
| .global bar10 | |
| .weakref foo10, bar10 | |
| .long bar10 | |
| .long foo10 | |
| bar11: | |
| .global bar11 | |
| .weakref foo11, bar11 | |
| bar12: | |
| .global bar12 | |
| .weakref foo12, bar12 | |
| .long bar12 | |
| bar13: | |
| .global bar13 | |
| .weakref foo13, bar13 | |
| .long foo13 | |
| bar14: | |
| .global bar14 | |
| .weakref foo14, bar14 | |
| .long foo14 | |
| .long bar14 | |
| bar15: | |
| .global bar15 | |
| .weakref foo15, bar15 | |
| .long bar15 | |
| .long foo15 | |
| // CHECK: Symbols [ | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: (0) | |
| // CHECK-NEXT: Value: 0x0 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Local (0x0) | |
| // CHECK-NEXT: Type: None (0x0) | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: Undefined (0x0) | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar6 | |
| // CHECK-NEXT: Value: 0x18 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Local | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar7 | |
| // CHECK-NEXT: Value: 0x18 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Local | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar8 | |
| // CHECK-NEXT: Value: 0x1C | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Local | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar9 | |
| // CHECK-NEXT: Value: 0x20 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Local | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: (0) | |
| // CHECK-NEXT: Value: 0x0 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Local | |
| // CHECK-NEXT: Type: Section | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar10 | |
| // CHECK-NEXT: Value: 0x28 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Global | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar11 | |
| // CHECK-NEXT: Value: 0x30 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Global | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar12 | |
| // CHECK-NEXT: Value: 0x30 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Global | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar13 | |
| // CHECK-NEXT: Value: 0x34 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Global | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar14 | |
| // CHECK-NEXT: Value: 0x38 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Global | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar15 | |
| // CHECK-NEXT: Value: 0x40 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Global | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar2 | |
| // CHECK-NEXT: Value: 0x0 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Global | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: Undefined (0x0) | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar3 | |
| // CHECK-NEXT: Value: 0x0 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Weak | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: Undefined (0x0) | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar4 | |
| // CHECK-NEXT: Value: 0x0 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Global | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: Undefined (0x0) | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: Symbol { | |
| // CHECK-NEXT: Name: bar5 | |
| // CHECK-NEXT: Value: 0x0 | |
| // CHECK-NEXT: Size: 0 | |
| // CHECK-NEXT: Binding: Global | |
| // CHECK-NEXT: Type: None | |
| // CHECK-NEXT: Other: 0 | |
| // CHECK-NEXT: Section: Undefined (0x0) | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: ] |