aff69273af
The actual intention is that no dynamic relocation exists in the VDSO. For this the VDSO build validates that the resulting .so file does not have any relocations which are specified via $(ARCH_REL_TYPE_ABS) per architecture, which is fragile as e.g. ARM64 lacks an entry for R_AARCH64_RELATIVE. Aside of that ARCH_REL_TYPE_ABS is a misnomer as it checks for relative relocations too. However, some GNU ld ports produce unneeded R_*_NONE relocation entries. If a port fails to determine the exact .rel[a].dyn size, the trailing zeros become R_*_NONE relocations. E.g. ld's powerpc port recently fixed https://sourceware.org/bugzilla/show_bug.cgi?id=29540). R_*_NONE are generally a no-op in the dynamic loaders. So just ignore them. Remove the ARCH_REL_TYPE_ABS defines and just validate that the resulting .so file does not contain any R_* relocation entries except R_*_NONE. Signed-off-by: Fangrui Song <maskray@google.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Vincenzo Frascino <vincenzo.frascino@arm.com> # for aarch64 Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu> Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com> # for vDSO, aarch64 Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc) Link: https://lore.kernel.org/r/20230310190750.3323802-1-maskray@google.com
18 lines
759 B
Makefile
18 lines
759 B
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
GENERIC_VDSO_MK_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
|
|
GENERIC_VDSO_DIR := $(dir $(GENERIC_VDSO_MK_PATH))
|
|
|
|
c-gettimeofday-$(CONFIG_GENERIC_GETTIMEOFDAY) := $(addprefix $(GENERIC_VDSO_DIR), gettimeofday.c)
|
|
|
|
# This cmd checks that the vdso library does not contain dynamic relocations.
|
|
# It has to be called after the linking of the vdso library and requires it
|
|
# as a parameter.
|
|
#
|
|
# As a workaround for some GNU ld ports which produce unneeded R_*_NONE
|
|
# dynamic relocations, ignore R_*_NONE.
|
|
quiet_cmd_vdso_check = VDSOCHK $@
|
|
cmd_vdso_check = if $(READELF) -rW $@ | grep -v _NONE | grep -q " R_\w*_"; \
|
|
then (echo >&2 "$@: dynamic relocations are not supported"; \
|
|
rm -f $@; /bin/false); fi
|