mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-24 17:51:17 +03:00
We only need to enable GCS tests on AArch64 targets, however previously the configure checks for GCS support in compiler and linker were added for all targets which was not efficient. To enable tests for GCS we need 4 things to be true: - Compiler supports GCS branch protection. - Test compiler supports GCS branch protection. - Linker supports GCS marking of binaries. - The CRT objects provided by the toolchain have GCS marking. To check for the latter, we add new macro to aclocal.m4 that allows to grep output from readelf. We check all four and then put the result in one make variable to simplify checks in makefiles. Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
161 lines
5.3 KiB
Makefile
161 lines
5.3 KiB
Makefile
ifeq ($(subdir),elf)
|
|
tests += \
|
|
tst-tlsdesc-pac \
|
|
# tests
|
|
modules-names += \
|
|
tst-tlsdesc-pac-mod \
|
|
# modules-names
|
|
|
|
LDFLAGS-tst-tlsdesc-pac = -rdynamic
|
|
|
|
$(objpfx)tst-tlsdesc-pac.out: $(objpfx)tst-tlsdesc-pac-mod.so
|
|
endif
|
|
|
|
ifeq ($(subdir),misc)
|
|
sysdep_headers += sys/elf.h
|
|
tests += \
|
|
tst-aarch64-pkey \
|
|
# tests
|
|
|
|
ifeq (yes,$(have-test-gcs))
|
|
|
|
gcs-tests-dynamic = \
|
|
tst-gcs-disabled \
|
|
tst-gcs-dlopen-disabled \
|
|
tst-gcs-dlopen-enforced \
|
|
tst-gcs-dlopen-optional-off \
|
|
tst-gcs-dlopen-optional-on \
|
|
tst-gcs-dlopen-override \
|
|
tst-gcs-enforced \
|
|
tst-gcs-enforced-abort \
|
|
tst-gcs-noreturn \
|
|
tst-gcs-optional-off \
|
|
tst-gcs-optional-on \
|
|
tst-gcs-override \
|
|
tst-gcs-shared-disabled \
|
|
tst-gcs-shared-enforced-abort \
|
|
tst-gcs-shared-optional \
|
|
tst-gcs-shared-override \
|
|
# gcs-tests-dynamic
|
|
|
|
gcs-tests-static = \
|
|
tst-gcs-disabled-static \
|
|
tst-gcs-enforced-static \
|
|
tst-gcs-enforced-static-abort \
|
|
tst-gcs-optional-static-off \
|
|
tst-gcs-optional-static-on \
|
|
tst-gcs-override-static \
|
|
# gcs-tests-static
|
|
|
|
tests += \
|
|
$(gcs-tests-dynamic) \
|
|
$(gcs-tests-static) \
|
|
# tests
|
|
|
|
tests-static += \
|
|
$(gcs-tests-static) \
|
|
# tests-static
|
|
|
|
define run-gcs-abort-test
|
|
$(test-wrapper-env) $(run-program-env) \
|
|
$(tst-gcs-$*-abort-ENV) $(host-test-program-cmd)
|
|
endef
|
|
|
|
$(objpfx)tst-gcs-%-abort.out: $(..)sysdeps/unix/sysv/linux/aarch64/tst-gcs-abort.sh \
|
|
$(objpfx)tst-gcs-%-abort
|
|
$(SHELL) $< $(common-objpfx) $(test-name) '$(run-gcs-abort-test)'; \
|
|
$(evaluate-test)
|
|
|
|
LDFLAGS-tst-gcs-disabled += -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-enforced += -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-enforced-abort += -Wl,-z,gcs=never
|
|
LDFLAGS-tst-gcs-optional-on += -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-optional-off += -Wl,-z,gcs=never
|
|
LDFLAGS-tst-gcs-override += -Wl,-z,gcs=never
|
|
|
|
LDFLAGS-tst-gcs-disabled-static += -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-enforced-static += -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-enforced-static-abort += -Wl,-z,gcs=never
|
|
LDFLAGS-tst-gcs-optional-static-on += -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-optional-static-off += -Wl,-z,gcs=never
|
|
LDFLAGS-tst-gcs-override-static += -Wl,-z,gcs=never
|
|
|
|
tst-gcs-disabled-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0
|
|
tst-gcs-enforced-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1
|
|
tst-gcs-enforced-abort-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1
|
|
tst-gcs-optional-on-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2
|
|
tst-gcs-optional-off-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2
|
|
tst-gcs-override-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=3
|
|
|
|
tst-gcs-disabled-static-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0
|
|
tst-gcs-enforced-static-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1
|
|
tst-gcs-enforced-static-abort-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1
|
|
tst-gcs-optional-static-on-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2
|
|
tst-gcs-optional-static-off-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2
|
|
tst-gcs-override-static-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=3
|
|
|
|
# force one of the dependencies to be unmarked
|
|
LDFLAGS-tst-gcs-mod2.so += -Wl,-z,gcs=never
|
|
|
|
LDFLAGS-tst-gcs-shared-disabled = -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-shared-enforced-abort = -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-shared-optional = -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-shared-override = -Wl,-z,gcs=always
|
|
|
|
modules-names += \
|
|
tst-gcs-mod1 \
|
|
tst-gcs-mod2 \
|
|
tst-gcs-mod3 \
|
|
# modules-names
|
|
|
|
$(objpfx)tst-gcs-shared-disabled: $(objpfx)tst-gcs-mod1.so $(objpfx)tst-gcs-mod3.so
|
|
$(objpfx)tst-gcs-shared-enforced-abort: $(objpfx)tst-gcs-mod1.so $(objpfx)tst-gcs-mod3.so
|
|
$(objpfx)tst-gcs-shared-optional: $(objpfx)tst-gcs-mod1.so $(objpfx)tst-gcs-mod3.so
|
|
$(objpfx)tst-gcs-shared-override: $(objpfx)tst-gcs-mod1.so $(objpfx)tst-gcs-mod3.so
|
|
$(objpfx)tst-gcs-mod1.so: $(objpfx)tst-gcs-mod2.so
|
|
|
|
tst-gcs-shared-disabled-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0
|
|
tst-gcs-shared-enforced-abort-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1
|
|
tst-gcs-shared-optional-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2
|
|
tst-gcs-shared-override-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=3
|
|
|
|
LDFLAGS-tst-gcs-dlopen-disabled = -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-dlopen-enforced = -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-dlopen-optional-on = -Wl,-z,gcs=always
|
|
LDFLAGS-tst-gcs-dlopen-optional-off = -Wl,-z,gcs=never
|
|
LDFLAGS-tst-gcs-dlopen-override = -Wl,-z,gcs=always
|
|
|
|
tst-gcs-dlopen-disabled-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0
|
|
tst-gcs-dlopen-enforced-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1
|
|
tst-gcs-dlopen-optional-on-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2
|
|
tst-gcs-dlopen-optional-off-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2
|
|
tst-gcs-dlopen-override-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=3
|
|
|
|
$(objpfx)tst-gcs-dlopen-disabled.out: $(objpfx)tst-gcs-mod2.so
|
|
$(objpfx)tst-gcs-dlopen-enforced.out: $(objpfx)tst-gcs-mod2.so
|
|
$(objpfx)tst-gcs-dlopen-optional-on.out: $(objpfx)tst-gcs-mod2.so
|
|
$(objpfx)tst-gcs-dlopen-optional-off.out: $(objpfx)tst-gcs-mod2.so
|
|
$(objpfx)tst-gcs-dlopen-override.out: $(objpfx)tst-gcs-mod2.so
|
|
|
|
LDFLAGS-tst-gcs-noreturn = -Wl,-z,gcs=always
|
|
|
|
tst-gcs-noreturn-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0
|
|
|
|
endif # ifeq ($(have-test-gcs),yes)
|
|
|
|
endif # ifeq ($(subdir),misc)
|
|
|
|
ifeq ($(subdir),stdlib)
|
|
gen-as-const-headers += ucontext_i.sym
|
|
endif
|
|
|
|
abi-variants := lp64
|
|
abi-variants += lp64_be
|
|
|
|
ifeq (,$(filter $(default-abi),$(abi-variants)))
|
|
Unknown ABI, must be one of $(abi-variants)
|
|
endif
|
|
|
|
abi-lp64-condition := !defined __AARCH64EB__
|
|
abi-lp64_be-condition := defined __AARCH64EB__
|