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