Skip to content

Commit e6bd68c

Browse files
committed
[ELF][test] Improve symver-non-default.s to test foo and foo@v1 combining for executable linking
1 parent d5e33cc commit e6bd68c

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

lld/test/ELF/symver-non-default.s

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,52 @@
88
# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/def3.s -o %t/def3.o
99

1010
## foo@v1 & foo defined at the same location are combined.
11-
# RUN: ld.lld -shared --version-script=%t/ver1 %t/def1.o %t/ref.o -o %t1
12-
# RUN: llvm-readelf --dyn-syms %t1 | FileCheck %s --check-prefix=CHECK1
13-
# RUN: ld.lld -shared --version-script=%t/ver2 %t/def1.o %t/ref.o -o %t1
14-
# RUN: llvm-readelf --dyn-syms %t1 | FileCheck %s --check-prefix=CHECK1
11+
# RUN: ld.lld -shared --version-script=%t/ver1 %t/def1.o %t/ref.o -o %t1.so
12+
# RUN: llvm-readelf --dyn-syms %t1.so | FileCheck %s --check-prefix=CHECK1
13+
# RUN: ld.lld -shared --version-script=%t/ver2 %t/def1.o %t/ref.o -o %t1.so
14+
# RUN: llvm-readelf --dyn-syms %t1.so | FileCheck %s --check-prefix=CHECK1
1515

1616
# CHECK1: 1: {{.*}} NOTYPE GLOBAL DEFAULT [[#]] foo@v1
1717
# CHECK1-EMPTY:
1818

19+
## Test an executable link without exporting foo.
20+
# RUN: ld.lld -pie --version-script=%t/ver1 %t/def1.o %t/ref.o -o %t1
21+
# RUN: llvm-readelf -s %t1 | FileCheck %s --check-prefix=EXE1
22+
23+
# EXE1: Symbol table '.dynsym' contains 1 entries:
24+
# EXE1: Symbol table '.symtab' contains 3 entries:
25+
# EXE1: 2: {{.*}} NOTYPE GLOBAL DEFAULT [[#]] foo{{$}}
26+
1927
## def2.o doesn't define foo. foo@v1 & undefined foo are unrelated.
20-
# RUN: ld.lld -shared --version-script=%t/ver1 %t/def2.o %t/ref.o -o %t2
21-
# RUN: llvm-readelf -r --dyn-syms %t2 | FileCheck %s --check-prefix=CHECK2
28+
# RUN: ld.lld -shared --version-script=%t/ver1 %t/def2.o %t/ref.o -o %t2.so
29+
# RUN: llvm-readelf -r --dyn-syms %t2.so | FileCheck %s --check-prefix=CHECK2
2230

2331
# CHECK2: R_X86_64_JUMP_SLOT {{.*}} foo + 0
2432
# CHECK2: 1: {{.*}} NOTYPE GLOBAL DEFAULT UND foo{{$}}
2533
# CHECK2-NEXT: 2: {{.*}} NOTYPE GLOBAL DEFAULT [[#]] foo@v1
2634
# CHECK2-EMPTY:
2735

36+
# RUN: not ld.lld -pie --version-script=%t/ver1 %t/def2.o %t/ref.o -o /dev/null 2>&1 | FileCheck %s --check-prefix=EXE2
37+
38+
# EXE2: error: undefined symbol: foo{{$}}
39+
2840
## def2.o doesn't define foo. foo@v1 & defined foo are unrelated.
29-
# RUN: ld.lld -shared --version-script=%t/ver1 %t/def2.o %t/def3.o %t/ref.o -o %t3
30-
# RUN: llvm-readelf -r --dyn-syms %t3 | FileCheck %s --check-prefix=CHECK3
41+
# RUN: ld.lld -shared --version-script=%t/ver1 %t/def2.o %t/def3.o %t/ref.o -o %t3.so
42+
# RUN: llvm-readelf -r --dyn-syms %t3.so | FileCheck %s --check-prefix=CHECK3
3143

3244
# CHECK3: R_X86_64_JUMP_SLOT {{.*}} foo + 0
3345
# CHECK3: 1: {{.*}} NOTYPE GLOBAL DEFAULT [[#]] foo@v1
3446
# CHECK3-NEXT: 2: {{.*}} NOTYPE GLOBAL DEFAULT [[#]] foo{{$}}
3547
# CHECK3-EMPTY:
3648

49+
# RUN: ld.lld -pie --version-script=%t/ver1 %t/def2.o %t/def3.o %t/ref.o -o %t3
50+
# RUN: llvm-readelf -s %t3 | FileCheck %s --check-prefix=EXE3
51+
52+
# EXE3: Symbol table '.dynsym' contains 1 entries:
53+
# EXE3: Symbol table '.symtab' contains 4 entries:
54+
# EXE3: 2: {{.*}} NOTYPE GLOBAL DEFAULT [[#SEC:]] foo{{$}}
55+
# EXE3-NEXT: 3: {{.*}} NOTYPE GLOBAL DEFAULT [[#SEC]] foo{{$}}
56+
3757
## foo@v1 overrides the defined foo which is affected by a version script.
3858
# RUN: ld.lld -shared --version-script=%t/ver2 %t/def2.o %t/def3.o %t/ref.o -o %t4
3959
# RUN: llvm-readelf -r --dyn-syms %t4 | FileCheck %s --check-prefix=CHECK4

0 commit comments

Comments
 (0)