1# REQUIRES: x86
2
3# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
4# RUN: ld.lld -shared %t2.o -soname shared -o %t2.so
5
6# RUN: echo "{ global: foo1; foo3; local: *; };" > %t.script
7# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
8# RUN: ld.lld --version-script %t.script -shared %t.o %t2.so -o %t.so
9# RUN: llvm-readobj -dyn-symbols %t.so | FileCheck --check-prefix=DSO %s
10
11# RUN: echo "{ local: *; };" > %t3.script
12# RUN: ld.lld --version-script %t3.script -shared %t.o %t2.so -o %t3.so
13# RUN: llvm-readobj -dyn-symbols %t3.so | FileCheck --check-prefix=DSO2 %s
14
15# --version-script filters --dynamic-list.
16# RUN: echo "{ foo1; foo2; };" > %t.list
17# RUN: ld.lld --version-script %t.script --dynamic-list %t.list %t.o %t2.so -o %t
18# RUN: llvm-readobj -dyn-symbols %t | FileCheck --check-prefix=EXE %s
19
20# DSO:      DynamicSymbols [
21# DSO-NEXT:   Symbol {
22# DSO-NEXT:     Name: @ (0)
23# DSO-NEXT:     Value: 0x0
24# DSO-NEXT:     Size: 0
25# DSO-NEXT:     Binding: Local (0x0)
26# DSO-NEXT:     Type: None (0x0)
27# DSO-NEXT:     Other: 0
28# DSO-NEXT:     Section: Undefined (0x0)
29# DSO-NEXT:   }
30# DSO-NEXT:   Symbol {
31# DSO-NEXT:     Name: bar@ (1)
32# DSO-NEXT:     Value: 0x0
33# DSO-NEXT:     Size: 0
34# DSO-NEXT:     Binding: Global (0x1)
35# DSO-NEXT:     Type: Function (0x2)
36# DSO-NEXT:     Other: 0
37# DSO-NEXT:     Section: Undefined (0x0)
38# DSO-NEXT:   }
39# DSO-NEXT:   Symbol {
40# DSO-NEXT:     Name: foo1@ (5)
41# DSO-NEXT:     Value: 0x1000
42# DSO-NEXT:     Size: 0
43# DSO-NEXT:     Binding: Global (0x1)
44# DSO-NEXT:     Type: None (0x0)
45# DSO-NEXT:     Other: 0
46# DSO-NEXT:     Section: .text (0x5)
47# DSO-NEXT:   }
48# DSO-NEXT:   Symbol {
49# DSO-NEXT:     Name: foo3@ (10)
50# DSO-NEXT:     Value: 0x1007
51# DSO-NEXT:     Size: 0
52# DSO-NEXT:     Binding: Global (0x1)
53# DSO-NEXT:     Type: None (0x0)
54# DSO-NEXT:     Other: 0
55# DSO-NEXT:     Section: .text (0x5)
56# DSO-NEXT:   }
57# DSO-NEXT: ]
58
59# DSO2:      DynamicSymbols [
60# DSO2-NEXT:   Symbol {
61# DSO2-NEXT:     Name: @ (0)
62# DSO2-NEXT:     Value: 0x0
63# DSO2-NEXT:     Size: 0
64# DSO2-NEXT:     Binding: Local (0x0)
65# DSO2-NEXT:     Type: None (0x0)
66# DSO2-NEXT:     Other: 0
67# DSO2-NEXT:     Section: Undefined (0x0)
68# DSO2-NEXT:   }
69# DSO2-NEXT:   Symbol {
70# DSO2-NEXT:     Name: bar@ (1)
71# DSO2-NEXT:     Value: 0x0
72# DSO2-NEXT:     Size: 0
73# DSO2-NEXT:     Binding: Global (0x1)
74# DSO2-NEXT:     Type: Function (0x2)
75# DSO2-NEXT:     Other: 0
76# DSO2-NEXT:     Section: Undefined (0x0)
77# DSO2-NEXT:   }
78# DSO2-NEXT: ]
79
80# EXE:      DynamicSymbols [
81# EXE-NEXT:   Symbol {
82# EXE-NEXT:     Name: @ (0)
83# EXE-NEXT:     Value: 0x0
84# EXE-NEXT:     Size: 0
85# EXE-NEXT:     Binding: Local (0x0)
86# EXE-NEXT:     Type: None (0x0)
87# EXE-NEXT:     Other: 0
88# EXE-NEXT:     Section: Undefined (0x0)
89# EXE-NEXT:   }
90# EXE-NEXT:   Symbol {
91# EXE-NEXT:     Name: bar@ (1)
92# EXE-NEXT:     Value: 0x0
93# EXE-NEXT:     Size: 0
94# EXE-NEXT:     Binding: Global (0x1)
95# EXE-NEXT:     Type: Function (0x2)
96# EXE-NEXT:     Other: 0
97# EXE-NEXT:     Section: Undefined (0x0)
98# EXE-NEXT:   }
99# EXE-NEXT:   Symbol {
100# EXE-NEXT:     Name: foo1@ (5)
101# EXE-NEXT:     Value: 0x11000
102# EXE-NEXT:     Size: 0
103# EXE-NEXT:     Binding: Global (0x1)
104# EXE-NEXT:     Type: None (0x0)
105# EXE-NEXT:     Other: 0
106# EXE-NEXT:     Section: .text (0x5)
107# EXE-NEXT:   }
108# EXE-NEXT: ]
109
110.globl foo1
111foo1:
112  call bar@PLT
113  ret
114
115.globl foo2
116foo2:
117  ret
118
119.globl foo3
120foo3:
121  call foo2@PLT
122  ret
123
124.globl _start
125_start:
126  ret
127