Files
clang-p2996/lld/test/ELF/dynamic-list.s
George Rimar d46753e421 [ELF] - Do --hash-style=both by default.
Its PR34712,

GNU linkers recently changed default values to "both" of "sysv".
Patch do the same for all targets except MIPS, where .gnu.hash
section is not yet supported.

Code suggested by Rui Ueyama.

Differential revision: https://reviews.llvm.org/D38407

llvm-svn: 315051
2017-10-06 09:37:44 +00:00

168 lines
5.2 KiB
ArmAsm

# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
# RUN: ld.lld --hash-style=sysv -shared %t2.o -soname shared -o %t2.so
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
## Check exporting only one symbol.
# RUN: echo "{ foo1; };" > %t.list
# RUN: ld.lld --hash-style=sysv --dynamic-list %t.list %t %t2.so -o %t.exe
# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck %s
## And now using quoted strings (the output is the same since it does
## use any wildcard character).
# RUN: echo "{ \"foo1\"; };" > %t.list
# RUN: ld.lld --hash-style=sysv --dynamic-list %t.list %t %t2.so -o %t.exe
# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck %s
## And now using --export-dynamic-symbol.
# RUN: ld.lld --hash-style=sysv --export-dynamic-symbol foo1 %t %t2.so -o %t.exe
# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck %s
# RUN: ld.lld --hash-style=sysv --export-dynamic-symbol=foo1 %t %t2.so -o %t.exe
# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck %s
# CHECK: DynamicSymbols [
# CHECK-NEXT: Symbol {
# CHECK-NEXT: Name: @
# CHECK-NEXT: Value: 0x0
# CHECK-NEXT: Size: 0
# CHECK-NEXT: Binding: Local
# CHECK-NEXT: Type: None
# CHECK-NEXT: Other: 0
# CHECK-NEXT: Section: Undefined
# CHECK-NEXT: }
# CHECK-NEXT: Symbol {
# CHECK-NEXT: Name: foo1@
# CHECK-NEXT: Value: 0x201000
# CHECK-NEXT: Size: 0
# CHECK-NEXT: Binding: Global (0x1)
# CHECK-NEXT: Type: None (0x0)
# CHECK-NEXT: Other: 0
# CHECK-NEXT: Section: .text (0x4)
# CHECK-NEXT: }
# CHECK-NEXT: ]
## Now export all the foo1, foo2, and foo31 symbols
# RUN: echo "{ foo1; foo2; foo31; };" > %t.list
# RUN: ld.lld --hash-style=sysv --dynamic-list %t.list %t %t2.so -o %t.exe
# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK2 %s
# RUN: echo "{ foo1; foo2; };" > %t1.list
# RUN: echo "{ foo31; };" > %t2.list
# RUN: ld.lld --hash-style=sysv --dynamic-list %t1.list --dynamic-list %t2.list %t %t2.so -o %t.exe
# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK2 %s
# CHECK2: DynamicSymbols [
# CHECK2-NEXT: Symbol {
# CHECK2-NEXT: Name: @
# CHECK2-NEXT: Value: 0x0
# CHECK2-NEXT: Size: 0
# CHECK2-NEXT: Binding: Local
# CHECK2-NEXT: Type: None
# CHECK2-NEXT: Other: 0
# CHECK2-NEXT: Section: Undefined
# CHECK2-NEXT: }
# CHECK2-NEXT: Symbol {
# CHECK2-NEXT: Name: foo1@
# CHECK2-NEXT: Value: 0x201000
# CHECK2-NEXT: Size: 0
# CHECK2-NEXT: Binding: Global (0x1)
# CHECK2-NEXT: Type: None (0x0)
# CHECK2-NEXT: Other: 0
# CHECK2-NEXT: Section: .text (0x4)
# CHECK2-NEXT: }
# CHECK2-NEXT: Symbol {
# CHECK2-NEXT: Name: foo2@
# CHECK2-NEXT: Value: 0x201001
# CHECK2-NEXT: Size: 0
# CHECK2-NEXT: Binding: Global (0x1)
# CHECK2-NEXT: Type: None (0x0)
# CHECK2-NEXT: Other: 0
# CHECK2-NEXT: Section: .text (0x4)
# CHECK2-NEXT: }
# CHECK2-NEXT: Symbol {
# CHECK2-NEXT: Name: foo31@
# CHECK2-NEXT: Value: 0x201002
# CHECK2-NEXT: Size: 0
# CHECK2-NEXT: Binding: Global (0x1)
# CHECK2-NEXT: Type: None (0x0)
# CHECK2-NEXT: Other: 0
# CHECK2-NEXT: Section: .text (0x4)
# CHECK2-NEXT: }
# CHECK2-NEXT: ]
## --export-dynamic overrides --dynamic-list, i.e. --export-dynamic with an
## incomplete dynamic-list still exports everything.
# RUN: echo "{ foo2; };" > %t.list
# RUN: ld.lld --hash-style=sysv --dynamic-list %t.list --export-dynamic %t %t2.so -o %t.exe
# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK3 %s
## The same with --export-dynamic-symbol.
# RUN: ld.lld --hash-style=sysv --export-dynamic-symbol=foo2 --export-dynamic %t %t2.so -o %t.exe
# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK3 %s
# CHECK3: DynamicSymbols [
# CHECK3-NEXT: Symbol {
# CHECK3-NEXT: Name: @
# CHECK3-NEXT: Value: 0x0
# CHECK3-NEXT: Size: 0
# CHECK3-NEXT: Binding: Local
# CHECK3-NEXT: Type: None
# CHECK3-NEXT: Other: 0
# CHECK3-NEXT: Section: Undefined
# CHECK3-NEXT: }
# CHECK3-NEXT: Symbol {
# CHECK3-NEXT: Name: _start@
# CHECK3-NEXT: Value: 0x201003
# CHECK3-NEXT: Size: 0
# CHECK3-NEXT: Binding: Global (0x1)
# CHECK3-NEXT: Type: None (0x0)
# CHECK3-NEXT: Other: 0
# CHECK3-NEXT: Section: .text (0x4)
# CHECK3-NEXT: }
# CHECK3-NEXT: Symbol {
# CHECK3-NEXT: Name: foo1@
# CHECK3-NEXT: Value: 0x201000
# CHECK3-NEXT: Size: 0
# CHECK3-NEXT: Binding: Global (0x1)
# CHECK3-NEXT: Type: None (0x0)
# CHECK3-NEXT: Other: 0
# CHECK3-NEXT: Section: .text (0x4)
# CHECK3-NEXT: }
# CHECK3-NEXT: Symbol {
# CHECK3-NEXT: Name: foo2@
# CHECK3-NEXT: Value: 0x201001
# CHECK3-NEXT: Size: 0
# CHECK3-NEXT: Binding: Global (0x1)
# CHECK3-NEXT: Type: None (0x0)
# CHECK3-NEXT: Other: 0
# CHECK3-NEXT: Section: .text (0x4)
# CHECK3-NEXT: }
# CHECK3-NEXT: Symbol {
# CHECK3-NEXT: Name: foo31@
# CHECK3-NEXT: Value: 0x201002
# CHECK3-NEXT: Size: 0
# CHECK3-NEXT: Binding: Global (0x1)
# CHECK3-NEXT: Type: None (0x0)
# CHECK3-NEXT: Other: 0
# CHECK3-NEXT: Section: .text (0x4)
# CHECK3-NEXT: }
# CHECK3-NEXT: ]
.globl foo1
foo1:
ret
.globl foo2
foo2:
ret
.globl foo31
foo31:
ret
.globl _start
_start:
retq