3d936ed53749314c63bbfe333072e8d84714b9da
[platform/upstream/glibc.git] / sysdeps / x86 / Makefile
1 ifeq ($(subdir),csu)
2 gen-as-const-headers += cpu-features-offsets.sym
3 endif
4
5 ifeq ($(subdir),elf)
6 sysdep_routines += get-cpuid-feature-leaf
7 sysdep-dl-routines += dl-get-cpu-features
8 sysdep_headers += sys/platform/x86.h bits/platform/x86.h
9
10 CFLAGS-dl-get-cpu-features.os += $(rtld-early-cflags)
11 CFLAGS-get-cpuid-feature-leaf.o += $(no-stack-protector)
12
13 tests += \
14   tst-get-cpu-features \
15   tst-get-cpu-features-static \
16   tst-cpu-features-cpuinfo \
17   tst-cpu-features-cpuinfo-static \
18   tst-cpu-features-supports \
19   tst-cpu-features-supports-static \
20 # tests
21 tests-static += \
22   tst-get-cpu-features-static \
23   tst-cpu-features-cpuinfo-static \
24   tst-cpu-features-supports-static \
25 # tests-static
26 ifeq (yes,$(have-ifunc))
27 ifeq (yes,$(have-gcc-ifunc))
28 tests += \
29   tst-ifunc-isa-1 \
30   tst-ifunc-isa-1-static \
31 # tests
32 tests-static += \
33   tst-ifunc-isa-1-static \
34 # tests-static
35 test-xfail-tst-ifunc-isa-1 = $(with-lld)
36 test-xfail-tst-ifunc-isa-1-static = $(with-lld)
37 tests += \
38   tst-ifunc-isa-2 \
39   tst-ifunc-isa-2-static \
40 # tests
41 tests-static += \
42   tst-ifunc-isa-2-static \
43 # tests-static
44 test-xfail-tst-ifunc-isa-2 = $(with-lld)
45 test-xfail-tst-ifunc-isa-2-static = $(with-lld)
46 endif
47 endif
48 ifeq (yes,$(enable-x86-isa-level))
49 tests += \
50   tst-isa-level-1 \
51 # tests
52 modules-names += \
53   tst-isa-level-mod-1-baseline \
54   tst-isa-level-mod-1-v2 \
55   tst-isa-level-mod-1-v3 \
56   tst-isa-level-mod-1-v4 \
57 # modules-names
58
59 # X86 ISA level baseline
60 CFLAGS-tst-isa-level-mod-1-baseline.c += -DINCLUDE_X86_ISA_LEVEL \
61                                          -DISA_LEVEL=0x1 \
62                                          -march=x86-64
63 # X86 ISA level v2
64 CFLAGS-tst-isa-level-mod-1-v2.c += -DINCLUDE_X86_ISA_LEVEL \
65                                    -DISA_LEVEL=0x3 \
66                                    -march=x86-64
67 # X86 ISA level v3
68 CFLAGS-tst-isa-level-mod-1-v3.c += -DINCLUDE_X86_ISA_LEVEL \
69                                    -DISA_LEVEL=0x7 \
70                                    -march=x86-64
71 # X86 ISA level v4
72 CFLAGS-tst-isa-level-mod-1-v4.c += -DINCLUDE_X86_ISA_LEVEL \
73                                    -DISA_LEVEL=0xf \
74                                    -march=x86-64
75
76 $(objpfx)tst-isa-level-1.out: $(objpfx)tst-isa-level-mod-1-baseline.so \
77                               $(objpfx)tst-isa-level-mod-1-v2.so \
78                               $(objpfx)tst-isa-level-mod-1-v3.so \
79                               $(objpfx)tst-isa-level-mod-1-v4.so
80 endif
81 tst-ifunc-isa-2-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-SSE4_2,-AVX,-AVX2,-AVX512F
82 tst-ifunc-isa-2-static-ENV = $(tst-ifunc-isa-2-ENV)
83 endif
84
85 ifeq ($(subdir),math)
86 tests += \
87  tst-ldbl-nonnormal-printf \
88 # tests
89 endif # $(subdir) == math
90
91 ifeq ($(subdir),setjmp)
92 gen-as-const-headers += jmp_buf-ssp.sym
93 sysdep_routines += __longjmp_cancel
94 ifneq ($(enable-cet),no)
95 tests += \
96   tst-setjmp-cet \
97 # tests
98 tst-setjmp-cet-ENV = GLIBC_TUNABLES=glibc.cpu.x86_ibt=on:glibc.cpu.x86_shstk=on
99 endif
100 endif
101
102 ifeq ($(subdir),string)
103 sysdep_routines += cacheinfo
104
105 tests += \
106   tst-memchr-rtm \
107   tst-memcmp-rtm \
108   tst-memmove-rtm \
109   tst-memrchr-rtm \
110   tst-memset-rtm \
111   tst-strcasecmp-rtm \
112   tst-strchr-rtm \
113   tst-strcmp-rtm \
114   tst-strcpy-rtm \
115   tst-strlen-rtm \
116   tst-strncasecmp-rtm \
117   tst-strncmp-rtm \
118   tst-strrchr-rtm \
119   tst-wcscmp-rtm \
120   tst-wcsncmp-rtm \
121 # tests
122
123 CFLAGS-tst-memchr-rtm.c += -mrtm
124 CFLAGS-tst-memcmp-rtm.c += -mrtm
125 CFLAGS-tst-memmove-rtm.c += -mrtm
126 CFLAGS-tst-memrchr-rtm.c += -mrtm
127 CFLAGS-tst-memset-rtm.c += -mrtm
128 CFLAGS-tst-strcasecmp-rtm.c += -mrtm
129 CFLAGS-tst-strchr-rtm.c += -mrtm
130 CFLAGS-tst-strcmp-rtm.c += -mrtm
131 CFLAGS-tst-strcpy-rtm.c += -mrtm
132 CFLAGS-tst-strlen-rtm.c += -mrtm
133 CFLAGS-tst-strncasecmp-rtm.c += -mrtm -Wno-error
134 CFLAGS-tst-strncmp-rtm.c += -mrtm -Wno-error
135 CFLAGS-tst-strrchr-rtm.c += -mrtm
136 CFLAGS-tst-wcscmp-rtm.c += -mrtm
137 CFLAGS-tst-wcsncmp-rtm.c += -mrtm -Wno-error
138 endif
139
140 ifneq ($(enable-cet),no)
141 ifeq ($(subdir),elf)
142 sysdep-dl-routines += dl-cet
143
144 tests += \
145   tst-cet-legacy-1 \
146   tst-cet-legacy-1a \
147   tst-cet-legacy-2 \
148   tst-cet-legacy-2a \
149   tst-cet-legacy-3 \
150   tst-cet-legacy-4 \
151   tst-cet-legacy-5a \
152   tst-cet-legacy-6a \
153   tst-cet-legacy-7 \
154   tst-cet-legacy-8 \
155   tst-cet-legacy-9 \
156   tst-cet-legacy-9-static \
157   tst-cet-legacy-10 \
158   tst-cet-legacy-10-static \
159 # tests
160 tests-static += \
161   tst-cet-legacy-9-static \
162   tst-cet-legacy-10-static \
163 # tests-static
164 tst-cet-legacy-1a-ARGS = -- $(host-test-program-cmd)
165 tests += \
166   tst-cet-legacy-4a \
167   tst-cet-legacy-4b \
168   tst-cet-legacy-4c \
169   tst-cet-legacy-5b \
170   tst-cet-legacy-6b \
171 # tests
172 modules-names += \
173   tst-cet-legacy-mod-1 \
174   tst-cet-legacy-mod-2 \
175   tst-cet-legacy-mod-4 \
176   tst-cet-legacy-mod-5a \
177   tst-cet-legacy-mod-5b \
178   tst-cet-legacy-mod-5c \
179   tst-cet-legacy-mod-6a \
180   tst-cet-legacy-mod-6b \
181   tst-cet-legacy-mod-6c \
182 # modules-names
183
184 CFLAGS-tst-cet-legacy-2.c += -fcf-protection=branch
185 CFLAGS-tst-cet-legacy-2a.c += -fcf-protection
186 CFLAGS-tst-cet-legacy-mod-1.c += -fcf-protection=none
187 CFLAGS-tst-cet-legacy-mod-2.c += -fcf-protection=none
188 CFLAGS-tst-cet-legacy-3.c += -fcf-protection=none
189 CFLAGS-tst-cet-legacy-4.c += -fcf-protection=branch
190 CFLAGS-tst-cet-legacy-4a.c += -fcf-protection
191 CFLAGS-tst-cet-legacy-4b.c += -fcf-protection
192 CFLAGS-tst-cet-legacy-mod-4.c += -fcf-protection=none
193 CFLAGS-tst-cet-legacy-5a.c += -fcf-protection -mshstk
194 ifeq ($(enable-cet),permissive)
195 CPPFLAGS-tst-cet-legacy-5a.c += -DCET_IS_PERMISSIVE=1
196 endif
197 CFLAGS-tst-cet-legacy-5b.c += -fcf-protection -mshstk
198 CPPFLAGS-tst-cet-legacy-5b.c += -DCET_DISABLED_BY_ENV=1
199 CFLAGS-tst-cet-legacy-mod-5a.c += -fcf-protection=branch
200 CFLAGS-tst-cet-legacy-mod-5b.c += -fcf-protection
201 CFLAGS-tst-cet-legacy-mod-5c.c += -fcf-protection
202 CFLAGS-tst-cet-legacy-6a.c += -fcf-protection -mshstk
203 ifeq ($(enable-cet),permissive)
204 CPPFLAGS-tst-cet-legacy-6a.c += -DCET_IS_PERMISSIVE=1
205 endif
206 CFLAGS-tst-cet-legacy-6b.c += -fcf-protection -mshstk
207 CPPFLAGS-tst-cet-legacy-6b.c += -DCET_DISABLED_BY_ENV=1
208 CFLAGS-tst-cet-legacy-mod-6a.c += -fcf-protection=branch
209 CFLAGS-tst-cet-legacy-mod-6b.c += -fcf-protection
210 CFLAGS-tst-cet-legacy-mod-6c.c += -fcf-protection
211 CFLAGS-tst-cet-legacy-7.c += -fcf-protection=none
212 CFLAGS-tst-cet-legacy-10.c += -mshstk
213 CFLAGS-tst-cet-legacy-10-static.c += -mshstk
214
215 $(objpfx)tst-cet-legacy-1: $(objpfx)tst-cet-legacy-mod-1.so \
216                        $(objpfx)tst-cet-legacy-mod-2.so
217 $(objpfx)tst-cet-legacy-1a: $(objpfx)tst-cet-legacy-mod-1.so \
218                        $(objpfx)tst-cet-legacy-mod-2.so
219 $(objpfx)tst-cet-legacy-2: $(objpfx)tst-cet-legacy-mod-2.so
220 $(objpfx)tst-cet-legacy-2.out: $(objpfx)tst-cet-legacy-mod-1.so
221 $(objpfx)tst-cet-legacy-2a: $(objpfx)tst-cet-legacy-mod-2.so
222 $(objpfx)tst-cet-legacy-2a.out: $(objpfx)tst-cet-legacy-mod-1.so
223 $(objpfx)tst-cet-legacy-4.out: $(objpfx)tst-cet-legacy-mod-4.so
224 $(objpfx)tst-cet-legacy-5a.out: $(objpfx)tst-cet-legacy-mod-5a.so \
225                                 $(objpfx)tst-cet-legacy-mod-5b.so
226 $(objpfx)tst-cet-legacy-mod-5a.so: $(objpfx)tst-cet-legacy-mod-5c.so
227 $(objpfx)tst-cet-legacy-mod-5b.so: $(objpfx)tst-cet-legacy-mod-5c.so
228 $(objpfx)tst-cet-legacy-6a.out: $(objpfx)tst-cet-legacy-mod-6a.so \
229                                 $(objpfx)tst-cet-legacy-mod-6b.so
230 $(objpfx)tst-cet-legacy-mod-6a.so: $(objpfx)tst-cet-legacy-mod-6c.so
231 $(objpfx)tst-cet-legacy-mod-6b.so: $(objpfx)tst-cet-legacy-mod-6c.so
232 LDFLAGS-tst-cet-legacy-mod-6c.so = -Wl,--enable-new-dtags,-z,nodelete
233 $(objpfx)tst-cet-legacy-4a.out: $(objpfx)tst-cet-legacy-mod-4.so
234 tst-cet-legacy-4a-ENV = GLIBC_TUNABLES=glibc.cpu.x86_shstk=permissive
235 $(objpfx)tst-cet-legacy-4b.out: $(objpfx)tst-cet-legacy-mod-4.so
236 tst-cet-legacy-4b-ENV = GLIBC_TUNABLES=glibc.cpu.x86_shstk=on
237 $(objpfx)tst-cet-legacy-4c.out: $(objpfx)tst-cet-legacy-mod-4.so
238 tst-cet-legacy-4c-ENV = GLIBC_TUNABLES=glibc.cpu.x86_shstk=off
239 $(objpfx)tst-cet-legacy-5b.out: $(objpfx)tst-cet-legacy-mod-5a.so \
240                                 $(objpfx)tst-cet-legacy-mod-5b.so
241 tst-cet-legacy-5b-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK
242 $(objpfx)tst-cet-legacy-6b.out: $(objpfx)tst-cet-legacy-mod-6a.so \
243                                 $(objpfx)tst-cet-legacy-mod-6b.so
244 tst-cet-legacy-6b-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK
245 tst-cet-legacy-9-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK
246 tst-cet-legacy-9-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK
247 endif
248
249 # Add -fcf-protection to CFLAGS when CET is enabled.
250 CFLAGS-.o += -fcf-protection
251 CFLAGS-.os += -fcf-protection
252 CFLAGS-.op += -fcf-protection
253 CFLAGS-.oS += -fcf-protection
254
255 # Compile assembly codes with <cet.h> when CET is enabled.
256 asm-CPPFLAGS += -fcf-protection -include cet.h
257
258 ifeq ($(subdir),elf)
259 ifeq (yes,$(build-shared))
260 tests-special += $(objpfx)check-cet.out
261 endif
262
263 # FIXME: Can't use all-built-dso in elf/Makefile since this file is
264 # processed before elf/Makefile.  Duplicate it here.
265 cet-built-dso := $(common-objpfx)elf/ld.so $(common-objpfx)libc.so \
266                  $(filter-out $(common-objpfx)linkobj/libc.so, \
267                               $(sort $(wildcard $(addprefix $(common-objpfx), \
268                                                             */lib*.so \
269                                                             iconvdata/*.so))))
270
271 $(cet-built-dso:=.note): %.note: %
272         @rm -f $@T
273         LC_ALL=C $(READELF) -n $< > $@T
274         test -s $@T
275         mv -f $@T $@
276 common-generated += $(cet-built-dso:$(common-objpfx)%=%.note)
277
278 $(objpfx)check-cet.out: $(..)sysdeps/x86/check-cet.awk \
279                         $(cet-built-dso:=.note)
280         LC_ALL=C $(AWK) -f $^ > $@; \
281         $(evaluate-test)
282 generated += check-cet.out
283 endif
284 endif
285
286 ifeq ($(subdir),posix)
287 tests += \
288   tst-sysconf-cache-linesize \
289   tst-sysconf-cache-linesize-static \
290 # tests
291 tests-static += \
292   tst-sysconf-cache-linesize-static \
293 # tests-static
294 endif