|
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