Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

arm64: vdso: Enable vDSO compat support

Add vDSO compat support to the arm64 build system.

Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Shijith Thotton <sthotton@marvell.com>
Tested-by: Andre Przywara <andre.przywara@arm.com>
Cc: linux-arch@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-mips@vger.kernel.org
Cc: linux-kselftest@vger.kernel.org
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Paul Burton <paul.burton@mips.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Mark Salyzyn <salyzyn@android.com>
Cc: Peter Collingbourne <pcc@google.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Dmitry Safonov <0x7f454c46@gmail.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Huw Davies <huw@codeweavers.com>
Link: https://lkml.kernel.org/r/20190621095252.32307-16-vincenzo.frascino@arm.com

authored by

Vincenzo Frascino and committed by
Thomas Gleixner
bfe801eb f01703b3

+27 -3
+1
arch/arm64/Kconfig
··· 108 108 select GENERIC_STRNLEN_USER 109 109 select GENERIC_TIME_VSYSCALL 110 110 select GENERIC_GETTIMEOFDAY 111 + select GENERIC_COMPAT_VDSO if (!CPU_BIG_ENDIAN && COMPAT) 111 112 select HANDLE_DOMAIN_IRQ 112 113 select HARDIRQS_SW_RESEND 113 114 select HAVE_PCI
+21 -2
arch/arm64/Makefile
··· 49 49 endif 50 50 endif 51 51 52 - KBUILD_CFLAGS += -mgeneral-regs-only $(lseinstr) $(brokengasinst) 52 + ifeq ($(CONFIG_GENERIC_COMPAT_VDSO), y) 53 + CROSS_COMPILE_COMPAT ?= $(CONFIG_CROSS_COMPILE_COMPAT_VDSO:"%"=%) 54 + 55 + ifeq ($(CONFIG_CC_IS_CLANG), y) 56 + $(warning CROSS_COMPILE_COMPAT is clang, the compat vDSO will not be built) 57 + else ifeq ($(CROSS_COMPILE_COMPAT),) 58 + $(warning CROSS_COMPILE_COMPAT not defined or empty, the compat vDSO will not be built) 59 + else ifeq ($(shell which $(CROSS_COMPILE_COMPAT)gcc 2> /dev/null),) 60 + $(error $(CROSS_COMPILE_COMPAT)gcc not found, check CROSS_COMPILE_COMPAT) 61 + else 62 + export CROSS_COMPILE_COMPAT 63 + export CONFIG_COMPAT_VDSO := y 64 + compat_vdso := -DCONFIG_COMPAT_VDSO=1 65 + endif 66 + endif 67 + 68 + KBUILD_CFLAGS += -mgeneral-regs-only $(lseinstr) $(brokengasinst) $(compat_vdso) 53 69 KBUILD_CFLAGS += -fno-asynchronous-unwind-tables 54 70 KBUILD_CFLAGS += $(call cc-disable-warning, psabi) 55 - KBUILD_AFLAGS += $(lseinstr) $(brokengasinst) 71 + KBUILD_AFLAGS += $(lseinstr) $(brokengasinst) $(compat_vdso) 56 72 57 73 KBUILD_CFLAGS += $(call cc-option,-mabi=lp64) 58 74 KBUILD_AFLAGS += $(call cc-option,-mabi=lp64) ··· 180 164 prepare: vdso_prepare 181 165 vdso_prepare: prepare0 182 166 $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso include/generated/vdso-offsets.h 167 + $(if $(CONFIG_COMPAT_VDSO),$(Q)$(MAKE) \ 168 + $(build)=arch/arm64/kernel/vdso32 \ 169 + include/generated/vdso32-offsets.h) 183 170 endif 184 171 185 172 define archhelp
+5 -1
arch/arm64/kernel/Makefile
··· 28 28 $(call if_changed,objcopy) 29 29 30 30 obj-$(CONFIG_COMPAT) += sys32.o signal32.o \ 31 - sigreturn32.o sys_compat.o 31 + sys_compat.o 32 + ifneq ($(CONFIG_COMPAT_VDSO), y) 33 + obj-$(CONFIG_COMPAT) += sigreturn32.o 34 + endif 32 35 obj-$(CONFIG_KUSER_HELPERS) += kuser32.o 33 36 obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o entry-ftrace.o 34 37 obj-$(CONFIG_MODULES) += module.o ··· 65 62 obj-$(CONFIG_ARM64_PTR_AUTH) += pointer_auth.o 66 63 67 64 obj-y += vdso/ probes/ 65 + obj-$(CONFIG_COMPAT_VDSO) += vdso32/ 68 66 head-y := head.o 69 67 extra-y += $(head-y) vmlinux.lds 70 68