1// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj --symbols - | FileCheck %s
2
3foo:
4bar = foo
5
6        .globl	foo2
7foo2 = bar2
8
9foo3:
10	.globl	bar3
11bar3 = foo3
12
13
14// Test that bar4  and bar 5 are also functions and have the same value as foo4.
15	.byte 0
16	.type	foo4,@function
17foo4:
18bar4 = foo4
19bar5 = bar4
20
21        .long foo2
22
23// Test that bar6 is a function that doesn't have the same value as foo4.
24bar6 = bar5
25bar6:
26
27// Test that indirect local aliases do not appear as symbols.
28.data
29.Llocal:
30
31.text
32leaq .Llocal1(%rip), %rdi
33.Llocal1 = .Llocal2
34.Llocal2 = .Llocal
35
36// CHECK:      Symbols [
37// CHECK-NEXT:   Symbol {
38// CHECK-NEXT:     Name:  (0)
39// CHECK-NEXT:     Value: 0x0
40// CHECK-NEXT:     Size: 0
41// CHECK-NEXT:     Binding: Local (0x0)
42// CHECK-NEXT:     Type: None (0x0)
43// CHECK-NEXT:     Other: 0
44// CHECK-NEXT:     Section: Undefined (0x0)
45// CHECK-NEXT:   }
46// CHECK-NEXT:   Symbol {
47// CHECK-NEXT:     Name: foo
48// CHECK-NEXT:     Value: 0x0
49// CHECK-NEXT:     Size: 0
50// CHECK-NEXT:     Binding: Local
51// CHECK-NEXT:     Type: None
52// CHECK-NEXT:     Other: 0
53// CHECK-NEXT:     Section: .text
54// CHECK-NEXT:   }
55// CHECK-NEXT:   Symbol {
56// CHECK-NEXT:     Name: bar
57// CHECK-NEXT:     Value: 0x0
58// CHECK-NEXT:     Size: 0
59// CHECK-NEXT:     Binding: Local
60// CHECK-NEXT:     Type: None
61// CHECK-NEXT:     Other: 0
62// CHECK-NEXT:     Section: .text
63// CHECK-NEXT:   }
64// CHECK-NEXT:   Symbol {
65// CHECK-NEXT:     Name: foo3
66// CHECK-NEXT:     Value: 0x0
67// CHECK-NEXT:     Size: 0
68// CHECK-NEXT:     Binding: Local
69// CHECK-NEXT:     Type: None
70// CHECK-NEXT:     Other: 0
71// CHECK-NEXT:     Section: .text
72// CHECK-NEXT:   }
73// CHECK-NEXT:   Symbol {
74// CHECK-NEXT:     Name: foo4
75// CHECK-NEXT:     Value: 0x1
76// CHECK-NEXT:     Size: 0
77// CHECK-NEXT:     Binding: Local
78// CHECK-NEXT:     Type: Function
79// CHECK-NEXT:     Other: 0
80// CHECK-NEXT:     Section: .text
81// CHECK-NEXT:   }
82// CHECK-NEXT:   Symbol {
83// CHECK-NEXT:     Name: bar4
84// CHECK-NEXT:     Value: 0x1
85// CHECK-NEXT:     Size: 0
86// CHECK-NEXT:     Binding: Local
87// CHECK-NEXT:     Type: Function
88// CHECK-NEXT:     Other: 0
89// CHECK-NEXT:     Section: .text
90// CHECK-NEXT:   }
91// CHECK-NEXT:   Symbol {
92// CHECK-NEXT:     Name: bar5
93// CHECK-NEXT:     Value: 0x1
94// CHECK-NEXT:     Size: 0
95// CHECK-NEXT:     Binding: Local
96// CHECK-NEXT:     Type: Function
97// CHECK-NEXT:     Other: 0
98// CHECK-NEXT:     Section: .text
99// CHECK-NEXT:   }
100// CHECK-NEXT:   Symbol {
101// CHECK-NEXT:     Name: bar6
102// CHECK-NEXT:     Value: 0x5
103// CHECK-NEXT:     Size: 0
104// CHECK-NEXT:     Binding: Local
105// CHECK-NEXT:     Type: None
106// CHECK-NEXT:     Other: 0
107// CHECK-NEXT:     Section: .text
108// CHECK-NEXT:   }
109// CHECK-NEXT:   Symbol {
110// CHECK-NEXT:     Name: .data (0)
111// CHECK-NOT: Symbol {
112// CHECK:        }
113// CHECK-NEXT:   Symbol {
114// CHECK-NEXT:     Name: bar2
115// CHECK-NEXT:     Value: 0x0
116// CHECK-NEXT:     Size: 0
117// CHECK-NEXT:     Binding: Global
118// CHECK-NEXT:     Type: None
119// CHECK-NEXT:     Other: 0
120// CHECK-NEXT:     Section: Undefined (0x0)
121// CHECK-NEXT:   }
122// CHECK-NEXT:   Symbol {
123// CHECK-NEXT:     Name: bar3
124// CHECK-NEXT:     Value: 0x0
125// CHECK-NEXT:     Size: 0
126// CHECK-NEXT:     Binding: Global
127// CHECK-NEXT:     Type: None
128// CHECK-NEXT:     Other: 0
129// CHECK-NEXT:     Section: .text
130// CHECK-NEXT:   }
131// CHECK-NEXT: ]
132