|
3 | 3 | # RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o
|
4 | 4 | # RUN: llvm-mc -filetype=obj -triple=x86_64 b.s -o b.o
|
5 | 5 | # RUN: llvm-mc -filetype=obj -triple=x86_64 c.s -o c.o
|
6 |
| -# RUN: ld.lld a.o -o nopie --export-dynamic |
7 |
| -# RUN: llvm-readelf -r --hex-dump=.data nopie | FileCheck %s --check-prefix=STATIC |
8 |
| -# RUN: ld.lld a.o -o out.pie -pie |
9 |
| -# RUN: llvm-readelf -r --hex-dump=.data out.pie | FileCheck %s --check-prefix=STATIC |
10 |
| -# RUN: ld.lld a.o -o out.so -shared |
11 |
| -# RUN: llvm-readobj -r out.so | FileCheck %s --check-prefix=PIC |
| 6 | +# RUN: llvm-mc -filetype=obj -triple=x86_64 %S/Inputs/shared.s -o s.o |
| 7 | +# RUN: ld.lld -shared s.o -o s.so |
| 8 | + |
| 9 | +# RUN: ld.lld a.o -o a --export-dynamic |
| 10 | +# RUN: llvm-readelf -r --hex-dump=.data a | FileCheck %s --check-prefix=STATIC |
| 11 | +# RUN: ld.lld a.o s.so -o as |
| 12 | +# RUN: llvm-readelf -r --hex-dump=.data as | FileCheck %s --check-prefix=STATIC |
| 13 | +# RUN: ld.lld a.o -o a.pie -pie |
| 14 | +# RUN: llvm-readelf -r --hex-dump=.data a.pie | FileCheck %s --check-prefix=STATIC |
| 15 | +# RUN: ld.lld a.o -o a.so -shared |
| 16 | +# RUN: llvm-readelf -r a.so | FileCheck %s --check-prefix=DYN |
12 | 17 |
|
13 | 18 | ## gABI leaves the behavior of weak undefined references implementation defined.
|
14 | 19 | ## We choose to resolve them statically for static linking and produce dynamic relocations
|
|
19 | 24 |
|
20 | 25 | # STATIC: no relocations
|
21 | 26 | # STATIC: Hex dump of section '.data':
|
22 |
| -# STATIC-NEXT: {{.*}} 00000000 00000000 . |
| 27 | +# STATIC-NEXT: {{.*}} 00000000 00000000 03000000 00000000 . |
23 | 28 | # STATIC-EMPTY:
|
24 | 29 |
|
25 |
| -# PIC: .rela.dyn { |
26 |
| -# PIC-NEXT: R_X86_64_64 foobar 0x0 |
27 |
| -# PIC-NEXT: } |
| 30 | +# DYN: Relocation section '.rela.dyn' {{.*}} contains 2 |
| 31 | +# DYN: R_X86_64_64 0000000000000000 foobar + 0{{$}} |
28 | 32 |
|
29 |
| -# RUN: ld.lld a.o b.o -o out1 -z undefs |
30 |
| -# RUN: llvm-readelf -r -x .data out1 | FileCheck %s --check-prefix=STATIC1 |
31 |
| -# RUN: ld.lld a.o b.o -o out1.pie -pie -z undefs |
32 |
| -# RUN: llvm-readelf -r -x .data out1.pie | FileCheck %s --check-prefix=STATIC1 |
| 33 | +# RUN: ld.lld a.o b.o -o ab -z undefs |
| 34 | +# RUN: llvm-readelf -r -x .data ab | FileCheck %s --check-prefix=STATIC1 |
| 35 | +# RUN: ld.lld a.o b.o s.so -o abs -z undefs |
| 36 | +# RUN: llvm-readelf -r -x .data abs | FileCheck %s --check-prefix=DYN1 |
| 37 | +# RUN: ld.lld a.o b.o -o abs.pie -pie -z undefs |
| 38 | +# RUN: llvm-readelf -r -x .data abs.pie | FileCheck %s --check-prefix=STATIC1 |
33 | 39 |
|
34 | 40 | # STATIC1: no relocations
|
35 | 41 | # STATIC1: Hex dump of section '.data':
|
36 |
| -# STATIC1-NEXT: {{.*}} 00000000 00000000 00000000 00000000 . |
| 42 | +# STATIC1-NEXT: {{.*}} 00000000 00000000 03000000 00000000 . |
| 43 | +# STATIC1-NEXT: {{.*}} 05000000 00000000 . |
37 | 44 | # STATIC1-EMPTY:
|
38 | 45 |
|
| 46 | +# DYN1: Relocation section '.rela.dyn' {{.*}} contains 1 |
| 47 | +# DYN1: Hex dump of section '.data': |
| 48 | +# DYN1-NEXT: {{.*}} 00000000 00000000 03000000 00000000 . |
| 49 | +# DYN1-NEXT: {{.*}} 00000000 00000000 . |
| 50 | +# DYN1-EMPTY: |
| 51 | + |
39 | 52 | # RUN: ld.lld a.o b.o c.o -pie -z undefs 2>&1 | count 0
|
40 | 53 |
|
41 | 54 | #--- a.s
|
42 |
| - .global _start |
| 55 | +.global _start |
43 | 56 | _start:
|
44 |
| - .data |
45 |
| - .weak foobar |
46 |
| - .quad foobar |
| 57 | +.data |
| 58 | +.weak foobar |
| 59 | +.quad foobar |
| 60 | +.quad foobar+3 |
47 | 61 |
|
48 | 62 | #--- b.s
|
49 | 63 | .data
|
50 |
| -.quad undef |
| 64 | +.quad undef+5 |
51 | 65 |
|
52 | 66 | #--- c.s
|
53 | 67 | call undef
|
0 commit comments