|
8 | 8 | # RUN: llvm-mc -filetype=obj -triple=x86_64 %t/def3.s -o %t/def3.o
|
9 | 9 |
|
10 | 10 | ## 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 |
15 | 15 |
|
16 | 16 | # CHECK1: 1: {{.*}} NOTYPE GLOBAL DEFAULT [[#]] foo@v1
|
17 | 17 | # CHECK1-EMPTY:
|
18 | 18 |
|
| 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 | + |
19 | 27 | ## 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 |
22 | 30 |
|
23 | 31 | # CHECK2: R_X86_64_JUMP_SLOT {{.*}} foo + 0
|
24 | 32 | # CHECK2: 1: {{.*}} NOTYPE GLOBAL DEFAULT UND foo{{$}}
|
25 | 33 | # CHECK2-NEXT: 2: {{.*}} NOTYPE GLOBAL DEFAULT [[#]] foo@v1
|
26 | 34 | # CHECK2-EMPTY:
|
27 | 35 |
|
| 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 | + |
28 | 40 | ## 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 |
31 | 43 |
|
32 | 44 | # CHECK3: R_X86_64_JUMP_SLOT {{.*}} foo + 0
|
33 | 45 | # CHECK3: 1: {{.*}} NOTYPE GLOBAL DEFAULT [[#]] foo@v1
|
34 | 46 | # CHECK3-NEXT: 2: {{.*}} NOTYPE GLOBAL DEFAULT [[#]] foo{{$}}
|
35 | 47 | # CHECK3-EMPTY:
|
36 | 48 |
|
| 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 | + |
37 | 57 | ## foo@v1 overrides the defined foo which is affected by a version script.
|
38 | 58 | # RUN: ld.lld -shared --version-script=%t/ver2 %t/def2.o %t/def3.o %t/ref.o -o %t4
|
39 | 59 | # RUN: llvm-readelf -r --dyn-syms %t4 | FileCheck %s --check-prefix=CHECK4
|
|
0 commit comments