Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0de01aa authored by Vincenzo Frascino's avatar Vincenzo Frascino Committed by Will Deacon
Browse files

arm64: vdso32: Fix broken compat vDSO build warnings



The .config file and the generated include/config/auto.conf can
end up out of sync after a set of commands since
CONFIG_CROSS_COMPILE_COMPAT_VDSO is not updated correctly.

The sequence can be reproduced as follows:

$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
[...]
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
[set CONFIG_CROSS_COMPILE_COMPAT_VDSO="arm-linux-gnueabihf-"]
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

Which results in:

arch/arm64/Makefile:62: CROSS_COMPILE_COMPAT not defined or empty,
the compat vDSO will not be built

even though the compat vDSO has been built:

$ file arch/arm64/kernel/vdso32/vdso.so
arch/arm64/kernel/vdso32/vdso.so: ELF 32-bit LSB pie executable, ARM,
EABI5 version 1 (SYSV), dynamically linked,
BuildID[sha1]=c67f6c786f2d2d6f86c71f708595594aa25247f6, stripped

A similar case that involves changing the configuration parameter
multiple times can be reconducted to the same family of problems.

Remove the use of CONFIG_CROSS_COMPILE_COMPAT_VDSO altogether and
instead rely on the cross-compiler prefix coming from the environment
via CROSS_COMPILE_COMPAT, much like we do for the rest of the kernel.

Cc: Will Deacon <will@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Reported-by: default avatarWill Deacon <will@kernel.org>
Signed-off-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent 308c5156
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ config ARM64
	select GENERIC_STRNLEN_USER
	select GENERIC_TIME_VSYSCALL
	select GENERIC_GETTIMEOFDAY
	select GENERIC_COMPAT_VDSO if (!CPU_BIG_ENDIAN && COMPAT)
	select GENERIC_COMPAT_VDSO if (!CPU_BIG_ENDIAN && COMPAT && "$(CROSS_COMPILE_COMPAT)" != "")
	select HANDLE_DOMAIN_IRQ
	select HARDIRQS_SW_RESEND
	select HAVE_PCI
+5 −13
Original line number Diff line number Diff line
@@ -53,21 +53,13 @@ $(warning Detected assembler with broken .inst; disassembly will be unreliable)
  endif
endif

COMPATCC ?= $(CROSS_COMPILE_COMPAT)gcc
export COMPATCC

ifeq ($(CONFIG_GENERIC_COMPAT_VDSO), y)
  CROSS_COMPILE_COMPAT ?= $(CONFIG_CROSS_COMPILE_COMPAT_VDSO:"%"=%)

  ifeq ($(CONFIG_CC_IS_CLANG), y)
    $(warning CROSS_COMPILE_COMPAT is clang, the compat vDSO will not be built)
  else ifeq ($(strip $(CROSS_COMPILE_COMPAT)),)
    $(warning CROSS_COMPILE_COMPAT not defined or empty, the compat vDSO will not be built)
  else ifeq ($(shell which $(CROSS_COMPILE_COMPAT)gcc 2> /dev/null),)
    $(error $(CROSS_COMPILE_COMPAT)gcc not found, check CROSS_COMPILE_COMPAT)
  else
    export CROSS_COMPILE_COMPAT
  export CONFIG_COMPAT_VDSO := y
  compat_vdso := -DCONFIG_COMPAT_VDSO=1
endif
endif

KBUILD_CFLAGS	+= -mgeneral-regs-only $(lseinstr) $(brokengasinst)	\
		   $(compat_vdso) $(cc_has_k_constraint)
+0 −2
Original line number Diff line number Diff line
@@ -8,8 +8,6 @@
ARCH_REL_TYPE_ABS := R_ARM_JUMP_SLOT|R_ARM_GLOB_DAT|R_ARM_ABS32
include $(srctree)/lib/vdso/Makefile

COMPATCC := $(CROSS_COMPILE_COMPAT)gcc

# Same as cc-*option, but using COMPATCC instead of CC
cc32-option = $(call try-run,\
        $(COMPATCC) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))