1
1
# REQUIRES: x86
2
- # RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
3
- # RUN: ld.lld %t.o -o %t
4
- # RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn %t | FileCheck % s --check-prefix=DISASM
5
- # RUN: llvm-readelf -r -s %t | FileCheck %s
2
+ # RUN: rm -rf %t && split-file %s %t && cd %t
3
+ # RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o
4
+ # RUN: llvm-mc -filetype=obj -triple=x86_64 b. s -o b.o
5
+ # RUN: ld.lld -shared -soname=b.so b.o -o b.so
6
6
7
- # RUN: ld.lld --export-dynamic %t.o -o %t
8
- # RUN: llvm-readelf -r -s %t | FileCheck %s
7
+ # RUN: ld.lld a.o -o a
8
+ # RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn a | FileCheck %s --check-prefix=DISASM
9
+ # RUN: llvm-readelf -r -s a | FileCheck %s
9
10
10
- # CHECK: Relocation section '.rela.dyn' at offset {{.*}} contains 2 entries:
11
+ # CHECK: Relocation section '.rela.dyn' at offset {{.*}} contains 3 entries:
11
12
# CHECK-NEXT: Type
12
- # CHECK-NEXT: R_X86_64_IRELATIVE
13
- # CHECK-NEXT: R_X86_64_IRELATIVE
13
+ # CHECK-NEXT: {{0*}}[[#%x,O:]] [[#%x,]] R_X86_64_IRELATIVE [[#%x,QUX:]]
14
+ # CHECK-NEXT: {{0*}}[[#O+8]] [[#%x,]] R_X86_64_IRELATIVE
15
+ # CHECK-NEXT: {{0*}}[[#O+16]] [[#%x,]] R_X86_64_IRELATIVE
14
16
15
- # CHECK: 0 NOTYPE LOCAL HIDDEN [[#]] __rela_iplt_start
16
- # CHECK-NEXT: 0 NOTYPE LOCAL HIDDEN [[#]] __rela_iplt_end
17
+ # CHECK: 0 NOTYPE LOCAL HIDDEN [[#]] __rela_iplt_start
18
+ # CHECK-NEXT: 0 NOTYPE LOCAL HIDDEN [[#]] __rela_iplt_end
19
+ # CHECK-NEXT: {{0*}}[[#QUX]] 0 IFUNC GLOBAL DEFAULT [[#]] qux
17
20
18
- # RUN: ld.lld -pie %t.o -o %t1
19
- # RUN: llvm-readelf -s %t1 | FileCheck %s --check-prefix=PIC
20
- # RUN: ld.lld -shared %t.o -o %t2
21
- # RUN: llvm-readelf -s %t2 | FileCheck %s --check-prefix=PIC
21
+ # RUN: ld.lld -pie a.o b.so -o a1
22
+ # RUN: llvm-readelf -rs a1 | FileCheck %s --check-prefixes=PIC,PIE
23
+ # RUN: ld.lld -shared a.o b.so -o a2
24
+ # RUN: llvm-readelf -rs a2 | FileCheck %s --check-prefix=PIC
25
+
26
+ # PIC: R_X86_64_GLOB_DAT 0000000000000000 ext + 0
27
+ # PIC-NEXT: {{0*}}[[#%x,O:]] [[#%x,]] R_X86_64_64 0000000000000000 __rela_iplt_start + 0
28
+ # PIC-NEXT: {{0*}}[[#O+8]] [[#%x,]] R_X86_64_64 0000000000000000 __rela_iplt_end + 0
29
+ # PIE-NEXT: {{0*}}[[#O+16]] [[#%x,]] R_X86_64_IRELATIVE
30
+ # PIE-NEXT: {{0*}}[[#O+24]] [[#%x,]] R_X86_64_IRELATIVE
31
+ # PIE-NEXT: {{0*}}[[#O+32]] [[#%x,]] R_X86_64_IRELATIVE
22
32
23
33
# PIC: 0 NOTYPE WEAK DEFAULT UND __rela_iplt_start
24
34
# PIC-NEXT: 0 NOTYPE WEAK DEFAULT UND __rela_iplt_end
25
35
26
36
# DISASM: Disassembly of section .text:
27
37
# DISASM-EMPTY:
28
- # DISASM-NEXT: <foo>:
38
+ # DISASM-NEXT: <qux>:
39
+ # DISASM: <foo>:
29
40
# DISASM: <bar>:
30
41
# DISASM: <unused>:
31
42
# DISASM: <_start>:
32
43
# DISASM-NEXT: callq 0x[[#%x,foo:]]
33
44
# DISASM-NEXT: callq 0x[[#%x,bar:]]
45
+ # DISASM-NEXT: callq 0x[[#%x,qux:]]
34
46
# DISASM-EMPTY:
35
47
# DISASM-NEXT: Disassembly of section .iplt:
36
48
# DISASM-EMPTY:
37
49
# DISASM-NEXT: <.iplt>:
38
- # DISASM-NEXT: [[#foo ]]: jmpq *{{.*}}(%rip)
50
+ # DISASM-NEXT: [[#qux ]]: jmpq *{{.*}}(%rip)
39
51
# DISASM-NEXT: pushq $0
40
52
# DISASM-NEXT: jmp 0x0
41
- # DISASM-NEXT: [[#bar ]]: jmpq *{{.*}}(%rip)
53
+ # DISASM-NEXT: [[#foo ]]: jmpq *{{.*}}(%rip)
42
54
# DISASM-NEXT: pushq $1
43
55
# DISASM-NEXT: jmp 0x0
56
+ # DISASM-NEXT: [[#bar]]: jmpq *{{.*}}(%rip)
57
+ # DISASM-NEXT: pushq $2
58
+ # DISASM-NEXT: jmp 0x0
44
59
45
- .text
60
+ #--- a.s
61
+ .globl qux, foo, bar
62
+ .type qux, @gnu_indirect_function
46
63
.type foo STT_GNU_IFUNC
47
- .globl foo
48
- foo:
49
- ret
50
-
51
64
.type bar STT_GNU_IFUNC
52
- .globl bar
53
- bar:
54
- ret
65
+ qux: ret
66
+ foo: ret
67
+ bar: ret
55
68
56
69
.type unused, @gnu_indirect_function
57
70
.globl unused
58
- unused:
59
- ret
71
+ .weak ext
72
+ unused: mov ext@gotpcrel( %rip ), %rax
60
73
61
74
.weak __rela_iplt_start
62
75
.weak __rela_iplt_end
@@ -65,7 +78,13 @@ unused:
65
78
_start:
66
79
call foo
67
80
call bar
81
+ call qux
68
82
69
83
.data
70
84
.quad __rela_iplt_start
71
85
.quad __rela_iplt_end
86
+
87
+ #--- b.s
88
+ .globl ext
89
+ ext:
90
+ ret
0 commit comments