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
168 lines
5.2 KiB
ArmAsm
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
|