[ELF] Refine isExported/isPreemptible condition
[llvm-project.git] / lld / test / ELF / gc-sections.s
blob97cbf749ae8a524b626573cf1b207ff1b290ad91
1 # REQUIRES: x86
3 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
4 # RUN: ld.lld %t -o %t2
5 # RUN: llvm-readobj --sections --symbols %t2 | FileCheck -check-prefix=NOGC %s
6 # RUN: ld.lld --gc-sections --print-gc-sections %t -o %t2 | FileCheck --check-prefix=GC1-DISCARD %s
7 # RUN: llvm-readobj --sections --symbols %t2 | FileCheck -check-prefix=GC1 %s
8 # RUN: ld.lld -pie --export-dynamic --gc-sections %t -o %t2
9 # RUN: llvm-readobj --sections --symbols %t2 | FileCheck -check-prefix=GC2 %s
11 ## In non-pie static linking, --export-dynamic currently retains the global 'd' even if it is not exported.
12 # RUN: ld.lld --export-dynamic --gc-sections --print-gc-sections %t -o %t1
13 # RUN: llvm-readobj --sections --symbols %t2 | FileCheck -check-prefix=GC2 %s
15 # RUN: llvm-mc -filetype=obj -triple=x86_64 --crel %s -o %t.o
16 # RUN: ld.lld -pie --gc-sections --print-gc-sections %t.o -o %t2 | FileCheck --check-prefix=GC1-DISCARD %s
17 # RUN: llvm-readobj --sections --symbols %t2 | FileCheck -check-prefix=GC1 %s
19 # NOGC: Name: .eh_frame
20 # NOGC: Name: .text
21 # NOGC: Name: .init
22 # NOGC: Name: .init_x
23 # NOGC: Name: .fini
24 # NOGC: Name: .tdata
25 # NOGC: Name: .tbss
26 # NOGC: Name: .ctors
27 # NOGC: Name: .dtors
28 # NOGC: Name: .fini_array
29 # NOGC: Name: .init_array
30 # NOGC: Name: .preinit_array
31 # NOGC: Name: .jcr
32 # NOGC: Name: .jcr_x
33 # NOGC: Name: .debug_pubtypes
34 # NOGC: Name: .comment
35 # NOGC: Name: a
36 # NOGC: Name: b
37 # NOGC: Name: c
38 # NOGC: Name: e
39 # NOGC: Name: f
40 # NOGC: Name: g
41 # NOGC: Name: h
42 # NOGC: Name: x
43 # NOGC: Name: y
44 # NOGC: Name: d
46 # GC1-DISCARD: removing unused section {{.*}}:(.text.d)
47 # GC1-DISCARD-NEXT: removing unused section {{.*}}:(.text.x)
48 # GC1-DISCARD-NEXT: removing unused section {{.*}}:(.text.y)
49 # GC1-DISCARD-NEXT: removing unused section {{.*}}:(.tbss.f)
50 # GC1-DISCARD-NEXT: removing unused section {{.*}}:(.tdata.h)
51 # GC1-DISCARD-NEXT: removing unused section {{.*}}:(.init_x)
52 # GC1-DISCARD-NEXT: removing unused section {{.*}}:(.jcr_x)
53 # GC1-DISCARD-EMPTY:
55 # GC1: Name: .eh_frame
56 # GC1: Name: .text
57 # GC1: Name: .init
58 # GC1: Name: .fini
59 # GC1: Name: .tdata
60 # GC1: Name: .tbss
61 # GC1: Name: .ctors
62 # GC1: Name: .dtors
63 # GC1: Name: .fini_array
64 # GC1: Name: .init_array
65 # GC1: Name: .preinit_array
66 # GC1: Name: .jcr
67 # GC1: Name: .debug_pubtypes
68 # GC1: Name: .comment
69 # GC1: Name: a
70 # GC1: Name: b
71 # GC1: Name: c
72 # GC1: Name: e
73 # GC1-NOT: Name: f
74 # GC1: Name: g
75 # GC1-NOT: Name: h
76 # GC1-NOT: Name: x
77 # GC1-NOT: Name: y
78 # GC1-NOT: Name: d
80 # GC2: Name: .eh_frame
81 # GC2: Name: .text
82 # GC2: Name: .init
83 # GC2: Name: .fini
84 # GC2: Name: .tdata
85 # GC2: Name: .tbss
86 # GC2: Name: .ctors
87 # GC2: Name: .dtors
88 # GC2: Name: .fini_array
89 # GC2: Name: .init_array
90 # GC2: Name: .preinit_array
91 # GC2: Name: .jcr
92 # GC2: Name: .debug_pubtypes
93 # GC2: Name: .comment
94 # GC2: Name: a
95 # GC2: Name: b
96 # GC2: Name: c
97 # GC2: Name: e
98 # GC2-NOT: Name: f
99 # GC2: Name: g
100 # GC2-NOT: Name: h
101 # GC2-NOT: Name: x
102 # GC2-NOT: Name: y
103 # GC2: Name: d
105 .globl _start, d
106 .protected a, b, c, e, f, g, h, x, y
107 _start:
108 call a
110 .section .text.a,"ax",@progbits
112 call _start
113 call b
115 .section .text.b,"ax",@progbits
117 leaq e@tpoff(%rax),%rdx
118 call c
120 .section .text.c,"ax",@progbits
122 leaq g@tpoff(%rax),%rdx
124 .section .text.d,"ax",@progbits
128 .section .text.x,"ax",@progbits
130 call y
132 .section .text.y,"ax",@progbits
134 call x
136 .section .tbss.e,"awT",@nobits
138 .quad 0
140 .section .tbss.f,"awT",@nobits
142 .quad 0
144 .section .tdata.g,"awT",@progbits
146 .quad 0
148 .section .tdata.h,"awT",@progbits
150 .quad 0
152 .section .ctors,"aw",@progbits
153 .quad 0
155 .section .dtors,"aw",@progbits
156 .quad 0
158 .section .init,"ax"
159 .quad 0
161 .section .init_x,"ax"
162 .quad 0
164 .section .fini,"ax"
165 .quad 0
167 .section .fini_array,"aw",@fini_array
168 .quad 0
170 # https://golang.org/cl/373734
171 .section .init_array,"aw",@progbits
172 .quad 0
174 # Work around https://github.com/rust-lang/rust/issues/92181
175 .section .init_array.00001,"aw",@progbits
176 .quad 0
178 .section .preinit_array,"aw",@preinit_array
179 .quad 0
181 .section .jcr,"aw"
182 .quad 0
184 .section .jcr_x,"aw"
185 .quad 0
187 .section .eh_frame,"a",@unwind
188 .quad 0
190 .section .debug_pubtypes,"",@progbits
191 .quad 0
193 .section .comment,"MS",@progbits,8
194 .quad 0