1# REQUIRES: x86,ppc
2
3# RUN: echo ".globl foo" > %te.s
4# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux      %te.s -o %te-i386.o
5# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux      %s    -o %t-i386.o
6# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux    %s    -o %t-x86_64.o
7# RUN: llvm-mc -filetype=obj -triple=powerpc64-pc-linux %s    -o %t-ppc64.o
8
9# RUN: ld.lld -shared --hash-style=gnu  -o %te-i386.so  %te-i386.o
10# RUN: ld.lld -shared  -hash-style=gnu  -o %t-i386.so   %t-i386.o
11# RUN: ld.lld -shared  -hash-style=gnu  -o %t-x86_64.so %t-x86_64.o
12# RUN: ld.lld -shared --hash-style both -o %t-ppc64.so  %t-ppc64.o
13
14# RUN: llvm-readobj -dyn-symbols -gnu-hash-table %te-i386.so \
15# RUN:   | FileCheck %s -check-prefix=EMPTY
16# RUN: llvm-readobj -sections -dyn-symbols -gnu-hash-table %t-i386.so \
17# RUN:   | FileCheck %s -check-prefix=I386
18# RUN: llvm-readobj -sections -dyn-symbols -gnu-hash-table %t-x86_64.so \
19# RUN:   | FileCheck %s -check-prefix=X86_64
20# RUN: llvm-readobj -sections -dyn-symbols -gnu-hash-table %t-ppc64.so \
21# RUN:   | FileCheck %s -check-prefix=PPC64
22
23# EMPTY:      DynamicSymbols [
24# EMPTY:        Symbol {
25# EMPTY:          Name: foo@
26# EMPTY-NEXT:     Value: 0x0
27# EMPTY-NEXT:     Size: 0
28# EMPTY-NEXT:     Binding: Global
29# EMPTY-NEXT:     Type: None
30# EMPTY-NEXT:     Other: 0
31# EMPTY-NEXT:     Section: Undefined
32# EMPTY-NEXT:   }
33# EMPTY-NEXT: ]
34# EMPTY:      GnuHashTable {
35# EMPTY-NEXT:   Num Buckets: 0
36# EMPTY-NEXT:   First Hashed Symbol Index: 2
37# EMPTY-NEXT:   Num Mask Words: 1
38# EMPTY-NEXT:   Shift Count: 5
39# EMPTY-NEXT:   Bloom Filter: [0x0]
40# EMPTY-NEXT:   Buckets: []
41# EMPTY-NEXT:   Values: []
42# EMPTY-NEXT: }
43
44# I386:      Format: ELF32-i386
45# I386:      Arch: i386
46# I386:      AddressSize: 32bit
47# I386:      Sections [
48# I386:          Name: .gnu.hash
49# I386-NEXT:     Type: SHT_GNU_HASH
50# I386-NEXT:     Flags [
51# I386-NEXT:       SHF_ALLOC
52# I386-NEXT:     ]
53# I386-NEXT:     Address:
54# I386-NEXT:     Offset:
55# I386-NEXT:     Size: 32
56# I386-NEXT:     Link:
57# I386-NEXT:     Info: 0
58# I386-NEXT:     AddressAlignment: 4
59# I386-NEXT:     EntrySize: 4
60# I386:      ]
61# I386:      DynamicSymbols [
62# I386:        Symbol {
63# I386:          Name: @
64# I386:          Binding: Local
65# I386:          Section: Undefined
66# I386:        }
67# I386:        Symbol {
68# I386:          Name: baz@
69# I386:          Binding: Global
70# I386:          Section: Undefined
71# I386:        }
72# I386:        Symbol {
73# I386:          Name: bar@
74# I386:          Binding: Global
75# I386:          Section: .text
76# I386:        }
77# I386:        Symbol {
78# I386:          Name: foo@
79# I386:          Binding: Global
80# I386:          Section: .text
81# I386:        }
82# I386:      ]
83# I386:      GnuHashTable {
84# I386-NEXT:   Num Buckets: 1
85# I386-NEXT:   First Hashed Symbol Index: 2
86# I386-NEXT:   Num Mask Words: 1
87# I386-NEXT:   Shift Count: 5
88# I386-NEXT:   Bloom Filter: [0x14000220]
89# I386-NEXT:   Buckets: [2]
90# I386-NEXT:   Values: [0xB8860BA, 0xB887389]
91# I386-NEXT: }
92
93# X86_64:      Format: ELF64-x86-64
94# X86_64:      Arch: x86_64
95# X86_64:      AddressSize: 64bit
96# X86_64:      Sections [
97# X86_64:          Name: .gnu.hash
98# X86_64-NEXT:     Type: SHT_GNU_HASH
99# X86_64-NEXT:     Flags [
100# X86_64-NEXT:       SHF_ALLOC
101# X86_64-NEXT:     ]
102# X86_64-NEXT:     Address:
103# X86_64-NEXT:     Offset:
104# X86_64-NEXT:     Size: 36
105# X86_64-NEXT:     Link:
106# X86_64-NEXT:     Info: 0
107# X86_64-NEXT:     AddressAlignment: 8
108# X86_64-NEXT:     EntrySize: 0
109# X86_64-NEXT:   }
110# X86_64:      ]
111# X86_64:      DynamicSymbols [
112# X86_64:        Symbol {
113# X86_64:          Name: @
114# X86_64:          Binding: Local
115# X86_64:          Section: Undefined
116# X86_64:        }
117# X86_64:        Symbol {
118# X86_64:          Name: baz@
119# X86_64:          Binding: Global
120# X86_64:          Section: Undefined
121# X86_64:        }
122# X86_64:        Symbol {
123# X86_64:          Name: bar@
124# X86_64:          Binding: Global
125# X86_64:          Section: .text
126# X86_64:        }
127# X86_64:        Symbol {
128# X86_64:          Name: foo@
129# X86_64:          Binding: Global
130# X86_64:          Section: .text
131# X86_64:        }
132# X86_64:      ]
133# X86_64:      GnuHashTable {
134# X86_64-NEXT:   Num Buckets: 1
135# X86_64-NEXT:   First Hashed Symbol Index: 2
136# X86_64-NEXT:   Num Mask Words: 1
137# X86_64-NEXT:   Shift Count: 6
138# X86_64-NEXT:   Bloom Filter: [0x400000000004204]
139# X86_64-NEXT:   Buckets: [2]
140# X86_64-NEXT:   Values: [0xB8860BA, 0xB887389]
141# X86_64-NEXT: }
142
143# PPC64:      Format: ELF64-ppc64
144# PPC64:      Arch: powerpc64
145# PPC64:      AddressSize: 64bit
146# PPC64:      Sections [
147# PPC64:          Name: .gnu.hash
148# PPC64-NEXT:     Type: SHT_GNU_HASH
149# PPC64-NEXT:     Flags [
150# PPC64-NEXT:       SHF_ALLOC
151# PPC64-NEXT:     ]
152# PPC64-NEXT:     Address: 0x228
153# PPC64-NEXT:     Offset: 0x228
154# PPC64-NEXT:     Size: 36
155# PPC64-NEXT:     Link: 1
156# PPC64-NEXT:     Info: 0
157# PPC64-NEXT:     AddressAlignment: 8
158# PPC64-NEXT:     EntrySize: 0
159# PPC64-NEXT:   }
160# PPC64:      ]
161# PPC64:      DynamicSymbols [
162# PPC64:        Symbol {
163# PPC64:          Name: @
164# PPC64:          Binding: Local
165# PPC64:          Section: Undefined
166# PPC64:        }
167# PPC64:        Symbol {
168# PPC64:          Name: baz@
169# PPC64:          Binding: Global
170# PPC64:          Section: Undefined
171# PPC64:        }
172# PPC64:        Symbol {
173# PPC64:          Name: bar@
174# PPC64:          Binding: Global
175# PPC64:          Section: .text
176# PPC64:        }
177# PPC64:        Symbol {
178# PPC64:          Name: foo@
179# PPC64:          Binding: Global
180# PPC64:          Section: .text
181# PPC64:        }
182# PPC64:      ]
183# PPC64:      GnuHashTable {
184# PPC64-NEXT:   Num Buckets: 1
185# PPC64-NEXT:   First Hashed Symbol Index: 2
186# PPC64-NEXT:   Num Mask Words: 1
187# PPC64-NEXT:   Shift Count: 6
188# PPC64-NEXT:   Bloom Filter: [0x400000000004204]
189# PPC64-NEXT:   Buckets: [2]
190# PPC64-NEXT:   Values: [0xB8860BA, 0xB887389]
191# PPC64-NEXT: }
192
193.globl foo,bar,baz
194foo:
195bar:
196