llvm-project/lld/test/ELF/gnu-hash-table.s
Zaara Syeda f61b0733a8 [PPC64] Remove support for ELF V1 ABI in LLD
The current support for V1 ABI in LLD is incomplete.
This patch removes V1 ABI support and changes the default behavior to V2 ABI,
issuing an error when using the V1 ABI. It also updates the testcases to V2
and removes any V1 specific tests.

Differential Revision: https://reviews.llvm.org/D46316

llvm-svn: 331529
2018-05-04 15:09:49 +00:00

257 lines
8.2 KiB
ArmAsm

# REQUIRES: x86,ppc
# RUN: echo ".globl foo; .data; .dc.a foo" > %te.s
# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux %te.s -o %te-i386.o
# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux %s -o %t-i386.o
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t-x86_64.o
# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t-ppc64le.o
# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t-ppc64.o
# RUN: echo ".global zed; zed:" > %t2.s
# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux %t2.s -o %t2-i386.o
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %t2.s -o %t2-x86_64.o
# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %t2.s -o %t2-ppc64le.o
# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %t2.s -o %t2-ppc64.o
# RUN: rm -f %t2-i386.a %t2-x86_64.a %t2-ppc64.a
# RUN: llvm-ar rc %t2-i386.a %t2-i386.o
# RUN: llvm-ar rc %t2-x86_64.a %t2-x86_64.o
# RUN: llvm-ar rc %t2-ppc64le.a %t2-ppc64le.o
# RUN: llvm-ar rc %t2-ppc64.a %t2-ppc64.o
# RUN: echo ".global xyz; xyz:" > %t3.s
# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux %t3.s -o %t3-i386.o
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %t3.s -o %t3-x86_64.o
# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %t3.s -o %t3-ppc64le.o
# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %t3.s -o %t3-ppc64.o
# RUN: ld.lld -shared %t3-i386.o -o %t3-i386.so
# RUN: ld.lld -shared %t3-x86_64.o -o %t3-x86_64.so
# RUN: ld.lld -shared %t3-ppc64le.o -o %t3-ppc64le.so
# RUN: ld.lld -shared %t3-ppc64.o -o %t3-ppc64.so
# RUN: ld.lld -shared --hash-style=gnu -o %te-i386.so %te-i386.o
# RUN: ld.lld -shared -hash-style=gnu -o %t-i386.so %t-i386.o %t2-i386.a %t3-i386.so
# RUN: ld.lld -shared -hash-style=gnu -o %t-x86_64.so %t-x86_64.o %t2-x86_64.a %t3-x86_64.so
# RUN: ld.lld -shared --hash-style both -o %t-ppc64le.so %t-ppc64le.o %t2-ppc64le.a %t3-ppc64le.so
# RUN: ld.lld -shared --hash-style both -o %t-ppc64.so %t-ppc64.o %t2-ppc64.a %t3-ppc64.so
# RUN: llvm-readobj -dyn-symbols -gnu-hash-table %te-i386.so \
# RUN: | FileCheck %s -check-prefix=EMPTY
# RUN: llvm-readobj -sections -dyn-symbols -gnu-hash-table %t-i386.so \
# RUN: | FileCheck %s -check-prefix=I386
# RUN: llvm-readobj -sections -dyn-symbols -gnu-hash-table %t-x86_64.so \
# RUN: | FileCheck %s -check-prefix=X86_64
# RUN: llvm-readobj -sections -dyn-symbols -gnu-hash-table %t-ppc64le.so \
# RUN: | FileCheck %s -check-prefix=PPC64
# RUN: llvm-readobj -sections -dyn-symbols -gnu-hash-table %t-ppc64.so \
# RUN: | FileCheck %s -check-prefix=PPC64
# EMPTY: DynamicSymbols [
# EMPTY: Symbol {
# EMPTY: Name: foo@
# EMPTY-NEXT: Value: 0x0
# EMPTY-NEXT: Size: 0
# EMPTY-NEXT: Binding: Global
# EMPTY-NEXT: Type: None
# EMPTY-NEXT: Other: 0
# EMPTY-NEXT: Section: Undefined
# EMPTY-NEXT: }
# EMPTY-NEXT: ]
# EMPTY: GnuHashTable {
# EMPTY-NEXT: Num Buckets: 1
# EMPTY-NEXT: First Hashed Symbol Index: 2
# EMPTY-NEXT: Num Mask Words: 1
# EMPTY-NEXT: Shift Count: 6
# EMPTY-NEXT: Bloom Filter: [0x0]
# EMPTY-NEXT: Buckets: [0]
# EMPTY-NEXT: Values: []
# EMPTY-NEXT: }
# I386: Format: ELF32-i386
# I386: Arch: i386
# I386: AddressSize: 32bit
# I386: Sections [
# I386: Name: .gnu.hash
# I386-NEXT: Type: SHT_GNU_HASH
# I386-NEXT: Flags [
# I386-NEXT: SHF_ALLOC
# I386-NEXT: ]
# I386-NEXT: Address:
# I386-NEXT: Offset:
# I386-NEXT: Size: 32
# I386-NEXT: Link:
# I386-NEXT: Info: 0
# I386-NEXT: AddressAlignment: 4
# I386-NEXT: EntrySize: 0
# I386: ]
# I386: DynamicSymbols [
# I386: Symbol {
# I386: Name: @
# I386: Binding: Local
# I386: Section: Undefined
# I386: }
# I386: Symbol {
# I386: Name: baz@
# I386: Binding: Global
# I386: Section: Undefined
# I386: }
# I386: Symbol {
# I386: Name: xyz@
# I386: Binding: Global
# I386: Section: Undefined
# I386: }
# I386: Symbol {
# I386: Name: zed@
# I386: Binding: Weak
# I386: Section: Undefined
# I386: }
# I386: Symbol {
# I386: Name: bar@
# I386: Binding: Global
# I386: Section: .text
# I386: }
# I386: Symbol {
# I386: Name: foo@
# I386: Binding: Global
# I386: Section: .text
# I386: }
# I386: ]
# I386: GnuHashTable {
# I386-NEXT: Num Buckets: 1
# I386-NEXT: First Hashed Symbol Index: 4
# I386-NEXT: Num Mask Words: 1
# I386-NEXT: Shift Count: 6
# I386-NEXT: Bloom Filter: [0x4004204]
# I386-NEXT: Buckets: [4]
# I386-NEXT: Values: [0xB8860BA, 0xB887389]
# I386-NEXT: }
# X86_64: Format: ELF64-x86-64
# X86_64: Arch: x86_64
# X86_64: AddressSize: 64bit
# X86_64: Sections [
# X86_64: Name: .gnu.hash
# X86_64-NEXT: Type: SHT_GNU_HASH
# X86_64-NEXT: Flags [
# X86_64-NEXT: SHF_ALLOC
# X86_64-NEXT: ]
# X86_64-NEXT: Address:
# X86_64-NEXT: Offset:
# X86_64-NEXT: Size: 36
# X86_64-NEXT: Link:
# X86_64-NEXT: Info: 0
# X86_64-NEXT: AddressAlignment: 8
# X86_64-NEXT: EntrySize: 0
# X86_64-NEXT: }
# X86_64: ]
# X86_64: DynamicSymbols [
# X86_64: Symbol {
# X86_64: Name: @
# X86_64: Binding: Local
# X86_64: Section: Undefined
# X86_64: }
# X86_64: Symbol {
# X86_64: Name: baz@
# X86_64: Binding: Global
# X86_64: Section: Undefined
# X86_64: }
# X86_64: Symbol {
# X86_64: Name: xyz@
# X86_64: Binding: Global
# X86_64: Section: Undefined
# X86_64: }
# X86_64: Symbol {
# X86_64: Name: zed@
# X86_64: Binding: Weak
# X86_64: Section: Undefined
# X86_64: }
# X86_64: Symbol {
# X86_64: Name: bar@
# X86_64: Binding: Global
# X86_64: Section: .text
# X86_64: }
# X86_64: Symbol {
# X86_64: Name: foo@
# X86_64: Binding: Global
# X86_64: Section: .text
# X86_64: }
# X86_64: ]
# X86_64: GnuHashTable {
# X86_64-NEXT: Num Buckets: 1
# X86_64-NEXT: First Hashed Symbol Index: 4
# X86_64-NEXT: Num Mask Words: 1
# X86_64-NEXT: Shift Count: 6
# X86_64-NEXT: Bloom Filter: [0x400000000004204]
# X86_64-NEXT: Buckets: [4]
# X86_64-NEXT: Values: [0xB8860BA, 0xB887389]
# X86_64-NEXT: }
# PPC64: Format: ELF64-ppc64
# PPC64: Arch: powerpc64
# PPC64: AddressSize: 64bit
# PPC64: Sections [
# PPC64: Name: .gnu.hash
# PPC64-NEXT: Type: SHT_GNU_HASH
# PPC64-NEXT: Flags [
# PPC64-NEXT: SHF_ALLOC
# PPC64-NEXT: ]
# PPC64-NEXT: Address:
# PPC64-NEXT: Offset:
# PPC64-NEXT: Size: 36
# PPC64-NEXT: Link:
# PPC64-NEXT: Info: 0
# PPC64-NEXT: AddressAlignment: 8
# PPC64-NEXT: EntrySize: 0
# PPC64-NEXT: }
# PPC64: ]
# PPC64: DynamicSymbols [
# PPC64: Symbol {
# PPC64: Name: @
# PPC64: Binding: Local
# PPC64: Section: Undefined
# PPC64: }
# PPC64: Symbol {
# PPC64: Name: baz@
# PPC64: Binding: Global
# PPC64: Section: Undefined
# PPC64: }
# PPC64: Symbol {
# PPC64: Name: xyz@
# PPC64: Binding: Global
# PPC64: Section: Undefined
# PPC64: }
# PPC64: Symbol {
# PPC64: Name: zed@
# PPC64: Binding: Weak
# PPC64: Section: Undefined
# PPC64: }
# PPC64: Symbol {
# PPC64: Name: bar@
# PPC64: Binding: Global
# PPC64: Section: .text
# PPC64: }
# PPC64: Symbol {
# PPC64: Name: foo@
# PPC64: Binding: Global
# PPC64: Section: .text
# PPC64: }
# PPC64: ]
# PPC64: GnuHashTable {
# PPC64-NEXT: Num Buckets: 1
# PPC64-NEXT: First Hashed Symbol Index: 4
# PPC64-NEXT: Num Mask Words: 1
# PPC64-NEXT: Shift Count: 6
# PPC64-NEXT: Bloom Filter: [0x400000000004204]
# PPC64-NEXT: Buckets: [4]
# PPC64-NEXT: Values: [0xB8860BA, 0xB887389]
# PPC64-NEXT: }
.globl foo,bar,baz
foo:
bar:
.weak zed
.global xyz
.data
.dc.a baz