annotate lld/test/ELF/icf-safe.s @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1f2b6ac9f198
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 # REQUIRES: x86
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o
anatofuz
parents:
diff changeset
4 # RUN: llvm-objcopy %t1.o %t1copy.o
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
5 # RUN: llvm-objcopy --localize-symbol=h1 %t1.o %t1changed.o
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
6 # RUN: ld.lld -r %t1.o -o %t1reloc.o
150
anatofuz
parents:
diff changeset
7 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %S/Inputs/icf-safe.s -o %t2.o
anatofuz
parents:
diff changeset
8 # RUN: ld.lld %t1.o %t2.o -o %t2 --icf=safe --print-icf-sections | FileCheck %s
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
9 # RUN: ld.lld %t1copy.o %t2.o -o %t2 --icf=safe --print-icf-sections | FileCheck %s
150
anatofuz
parents:
diff changeset
10 # RUN: ld.lld %t1.o %t2.o -o %t3 --icf=safe --print-icf-sections -shared | FileCheck --check-prefix=EXPORT %s
anatofuz
parents:
diff changeset
11 # RUN: ld.lld %t1.o %t2.o -o %t3 --icf=safe --print-icf-sections --export-dynamic | FileCheck --check-prefix=EXPORT %s
anatofuz
parents:
diff changeset
12 # RUN: ld.lld %t1.o %t2.o -o %t2 --icf=all --print-icf-sections | FileCheck --check-prefix=ALL %s
anatofuz
parents:
diff changeset
13 # RUN: ld.lld %t1.o %t2.o -o %t2 --icf=all --print-icf-sections --export-dynamic | FileCheck --check-prefix=ALL-EXPORT %s
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
14 # RUN: ld.lld %t1changed.o -o %t4 --icf=safe 2>&1 | FileCheck --check-prefix=SH_LINK_0 %s
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
15 # RUN: ld.lld %t1reloc.o -o %t4 --icf=safe 2>&1 | FileCheck --check-prefix=SH_LINK_0 %s
150
anatofuz
parents:
diff changeset
16
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
17 # CHECK-NOT: {{.}}
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
18 # CHECK: selected section {{.*}}:(.rodata.h3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
19 # CHECK-NEXT: removing identical section {{.*}}:(.rodata.h4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
20 # CHECK-NEXT: selected section {{.*}}:(.text.f3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
21 # CHECK-NEXT: removing identical section {{.*}}:(.text.f4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
22 # CHECK-NEXT: selected section {{.*}}:(.rodata.g3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
23 # CHECK-NEXT: removing identical section {{.*}}:(.rodata.g4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
24 # CHECK-NEXT: selected section {{.*}}:(.rodata.l3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
25 # CHECK-NEXT: removing identical section {{.*}}:(.rodata.l4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
26 # CHECK-NEXT: selected section {{.*}}:(.text)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
27 # CHECK-NEXT: removing identical section {{.*}}:(.text)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
28 # CHECK-NOT: {{.}}
150
anatofuz
parents:
diff changeset
29
anatofuz
parents:
diff changeset
30 # With --icf=all address-significance implies keep-unique only for rodata, not
anatofuz
parents:
diff changeset
31 # text.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
32 # ALL-NOT: {{.}}
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
33 # ALL: selected section {{.*}}:(.rodata.h3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
34 # ALL-NEXT: removing identical section {{.*}}:(.rodata.h4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
35 # ALL-NEXT: selected section {{.*}}:(.text.f3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
36 # ALL-NEXT: removing identical section {{.*}}:(.text.f4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
37 # ALL-NEXT: selected section {{.*}}:(.text.f1)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
38 # ALL-NEXT: removing identical section {{.*}}:(.text.f2)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
39 # ALL-NEXT: removing identical section {{.*}}:(.text.non_addrsig1)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
40 # ALL-NEXT: removing identical section {{.*}}:(.text.non_addrsig2)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
41 # ALL-NEXT: selected section {{.*}}:(.rodata.g3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
42 # ALL-NEXT: removing identical section {{.*}}:(.rodata.g4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
43 # ALL-NEXT: selected section {{.*}}:(.rodata.l3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
44 # ALL-NEXT: removing identical section {{.*}}:(.rodata.l4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
45 # ALL-NEXT: selected section {{.*}}:(.text)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
46 # ALL-NEXT: removing identical section {{.*}}:(.text)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
47 # ALL-NOT: {{.}}
150
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 # llvm-mc normally emits an empty .text section into every object file. Since
anatofuz
parents:
diff changeset
50 # nothing actually refers to it via a relocation, it doesn't have any associated
anatofuz
parents:
diff changeset
51 # symbols (thus nor can anything refer to it via a relocation, making it safe to
anatofuz
parents:
diff changeset
52 # merge with the empty section in the other input file). Here we check that the
anatofuz
parents:
diff changeset
53 # only two sections merged are the two empty sections and the sections with only
anatofuz
parents:
diff changeset
54 # STB_LOCAL or STV_HIDDEN symbols. The dynsym entries should have prevented
anatofuz
parents:
diff changeset
55 # anything else from being merged.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
56 # EXPORT-NOT: {{.}}
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
57 # EXPORT: selected section {{.*}}:(.rodata.h3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
58 # EXPORT-NEXT: removing identical section {{.*}}:(.rodata.h4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
59 # EXPORT-NEXT: selected section {{.*}}:(.rodata.l3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
60 # EXPORT-NEXT: removing identical section {{.*}}:(.rodata.l4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
61 # EXPORT-NOT: {{.}}
150
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 # If --icf=all is specified when exporting we can also merge the exported text
anatofuz
parents:
diff changeset
64 # sections, but not the exported rodata.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
65 # ALL-EXPORT-NOT: {{.}}
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
66 # ALL-EXPORT: selected section {{.*}}:(.rodata.h3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
67 # ALL-EXPORT-NEXT: removing identical section {{.*}}:(.rodata.h4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
68 # ALL-EXPORT-NEXT: selected section {{.*}}:(.text.f3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
69 # ALL-EXPORT-NEXT: removing identical section {{.*}}:(.text.f4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
70 # ALL-EXPORT-NEXT: selected section {{.*}}:(.text.f1)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
71 # ALL-EXPORT-NEXT: removing identical section {{.*}}:(.text.f2)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
72 # ALL-EXPORT-NEXT: removing identical section {{.*}}:(.text.non_addrsig1)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
73 # ALL-EXPORT-NEXT: removing identical section {{.*}}:(.text.non_addrsig2)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
74 # ALL-EXPORT-NEXT: selected section {{.*}}:(.rodata.l3)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
75 # ALL-EXPORT-NEXT: removing identical section {{.*}}:(.rodata.l4)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
76 # ALL-EXPORT-NEXT: selected section {{.*}}:(.text)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
77 # ALL-EXPORT-NEXT: removing identical section {{.*}}:(.text)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
78 # ALL-EXPORT-NOT: {{.}}
150
anatofuz
parents:
diff changeset
79
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
80 # SH_LINK_0: --icf=safe conservatively ignores SHT_LLVM_ADDRSIG [index [[#]]] with sh_link=0 (likely created using objcopy or ld -r)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
81
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
82 .globl _start
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
83 _start:
150
anatofuz
parents:
diff changeset
84
anatofuz
parents:
diff changeset
85 .section .text.f1,"ax",@progbits
anatofuz
parents:
diff changeset
86 .globl f1
anatofuz
parents:
diff changeset
87 f1:
anatofuz
parents:
diff changeset
88 ret
anatofuz
parents:
diff changeset
89
anatofuz
parents:
diff changeset
90 .section .text.f2,"ax",@progbits
anatofuz
parents:
diff changeset
91 .globl f2
anatofuz
parents:
diff changeset
92 f2:
anatofuz
parents:
diff changeset
93 ret
anatofuz
parents:
diff changeset
94
anatofuz
parents:
diff changeset
95 .section .text.f3,"ax",@progbits
anatofuz
parents:
diff changeset
96 .globl f3
anatofuz
parents:
diff changeset
97 f3:
anatofuz
parents:
diff changeset
98 ud2
anatofuz
parents:
diff changeset
99
anatofuz
parents:
diff changeset
100 .section .text.f4,"ax",@progbits
anatofuz
parents:
diff changeset
101 .globl f4
anatofuz
parents:
diff changeset
102 f4:
anatofuz
parents:
diff changeset
103 ud2
anatofuz
parents:
diff changeset
104
anatofuz
parents:
diff changeset
105 .section .rodata.g1,"a",@progbits
anatofuz
parents:
diff changeset
106 .globl g1
anatofuz
parents:
diff changeset
107 g1:
anatofuz
parents:
diff changeset
108 .byte 1
anatofuz
parents:
diff changeset
109
anatofuz
parents:
diff changeset
110 .section .rodata.g2,"a",@progbits
anatofuz
parents:
diff changeset
111 .globl g2
anatofuz
parents:
diff changeset
112 g2:
anatofuz
parents:
diff changeset
113 .byte 1
anatofuz
parents:
diff changeset
114
anatofuz
parents:
diff changeset
115 .section .rodata.g3,"a",@progbits
anatofuz
parents:
diff changeset
116 .globl g3
anatofuz
parents:
diff changeset
117 g3:
anatofuz
parents:
diff changeset
118 .byte 2
anatofuz
parents:
diff changeset
119
anatofuz
parents:
diff changeset
120 .section .rodata.g4,"a",@progbits
anatofuz
parents:
diff changeset
121 .globl g4
anatofuz
parents:
diff changeset
122 g4:
anatofuz
parents:
diff changeset
123 .byte 2
anatofuz
parents:
diff changeset
124
anatofuz
parents:
diff changeset
125 .section .rodata.l1,"a",@progbits
anatofuz
parents:
diff changeset
126 l1:
anatofuz
parents:
diff changeset
127 .byte 3
anatofuz
parents:
diff changeset
128
anatofuz
parents:
diff changeset
129 .section .rodata.l2,"a",@progbits
anatofuz
parents:
diff changeset
130 l2:
anatofuz
parents:
diff changeset
131 .byte 3
anatofuz
parents:
diff changeset
132
anatofuz
parents:
diff changeset
133 .section .rodata.l3,"a",@progbits
anatofuz
parents:
diff changeset
134 l3:
anatofuz
parents:
diff changeset
135 .byte 4
anatofuz
parents:
diff changeset
136
anatofuz
parents:
diff changeset
137 .section .rodata.l4,"a",@progbits
anatofuz
parents:
diff changeset
138 l4:
anatofuz
parents:
diff changeset
139 .byte 4
anatofuz
parents:
diff changeset
140
anatofuz
parents:
diff changeset
141 .section .rodata.h1,"a",@progbits
anatofuz
parents:
diff changeset
142 .globl h1
anatofuz
parents:
diff changeset
143 .hidden h1
anatofuz
parents:
diff changeset
144 h1:
anatofuz
parents:
diff changeset
145 .byte 5
anatofuz
parents:
diff changeset
146
anatofuz
parents:
diff changeset
147 .section .rodata.h2,"a",@progbits
anatofuz
parents:
diff changeset
148 .globl h2
anatofuz
parents:
diff changeset
149 .hidden h2
anatofuz
parents:
diff changeset
150 h2:
anatofuz
parents:
diff changeset
151 .byte 5
anatofuz
parents:
diff changeset
152
anatofuz
parents:
diff changeset
153 .section .rodata.h3,"a",@progbits
anatofuz
parents:
diff changeset
154 .globl h3
anatofuz
parents:
diff changeset
155 .hidden h3
anatofuz
parents:
diff changeset
156 h3:
anatofuz
parents:
diff changeset
157 .byte 6
anatofuz
parents:
diff changeset
158
anatofuz
parents:
diff changeset
159 .section .rodata.h4,"a",@progbits
anatofuz
parents:
diff changeset
160 .globl h4
anatofuz
parents:
diff changeset
161 .hidden h4
anatofuz
parents:
diff changeset
162 h4:
anatofuz
parents:
diff changeset
163 .byte 6
anatofuz
parents:
diff changeset
164
anatofuz
parents:
diff changeset
165 .addrsig
anatofuz
parents:
diff changeset
166 .addrsig_sym f1
anatofuz
parents:
diff changeset
167 .addrsig_sym f2
anatofuz
parents:
diff changeset
168 .addrsig_sym g1
anatofuz
parents:
diff changeset
169 .addrsig_sym g2
anatofuz
parents:
diff changeset
170 .addrsig_sym l1
anatofuz
parents:
diff changeset
171 .addrsig_sym l2
anatofuz
parents:
diff changeset
172 .addrsig_sym h1
anatofuz
parents:
diff changeset
173 .addrsig_sym h2