Commit 83a44a4f authored by Masahiro Yamada's avatar Masahiro Yamada Committed by Peter Zijlstra
Browse files

x86: Remove toolchain check for X32 ABI capability



Commit 0bf62763 ("x32: Warn and disable rather than error if
binutils too old") added a small test in arch/x86/Makefile because
binutils 2.22 or newer is needed to properly support elf32-x86-64. This
check is no longer necessary, as the minimum supported version of
binutils is 2.23, which is enforced at configuration time with
scripts/min-tool-version.sh.

Remove this check and replace all uses of CONFIG_X86_X32 with
CONFIG_X86_X32_ABI, as two symbols are no longer necessary.

[nathan: Rebase, fix up a few places where CONFIG_X86_X32 was still
         used, and simplify commit message to satisfy -tip requirements]

Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220314194842.3452-2-nathan@kernel.org
parent ed53a0d9
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -2861,7 +2861,7 @@ config IA32_AOUT
	help
	  Support old a.out binaries in the 32bit emulation.

config X86_X32
config X86_X32_ABI
	bool "x32 ABI for 64-bit mode"
	depends on X86_64
	help
@@ -2870,10 +2870,6 @@ config X86_X32
	  full 64-bit register file and wide data path while leaving
	  pointers at 32 bits for smaller memory footprint.

	  You will need a recent binutils (2.22 or later) with
	  elf32_x86_64 support enabled to compile a kernel with this
	  option set.

config COMPAT_32
	def_bool y
	depends on IA32_EMULATION || X86_32
@@ -2882,7 +2878,7 @@ config COMPAT_32

config COMPAT
	def_bool y
	depends on IA32_EMULATION || X86_X32
	depends on IA32_EMULATION || X86_X32_ABI

if COMPAT
config COMPAT_FOR_U64_ALIGNMENT
+0 −16
Original line number Diff line number Diff line
@@ -152,22 +152,6 @@ else
        KBUILD_CFLAGS += -mcmodel=kernel
endif

ifdef CONFIG_X86_X32
	x32_ld_ok := $(call try-run,\
			/bin/echo -e '1: .quad 1b' | \
			$(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" - && \
			$(OBJCOPY) -O elf32-x86-64 "$$TMP" "$$TMP.o" && \
			$(LD) -m elf32_x86_64 "$$TMP.o" -o "$$TMP",y,n)
        ifeq ($(x32_ld_ok),y)
                CONFIG_X86_X32_ABI := y
                KBUILD_AFLAGS += -DCONFIG_X86_X32_ABI
                KBUILD_CFLAGS += -DCONFIG_X86_X32_ABI
        else
                $(warning CONFIG_X86_X32 enabled but no binutils support)
        endif
endif
export CONFIG_X86_X32_ABI

#
# If the function graph tracer is used with mcount instead of fentry,
# '-maccumulate-outgoing-args' is needed to prevent a GCC bug
+1 −1
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ uapisyshdr-y += unistd_32.h unistd_64.h unistd_x32.h
syshdr-y			+= syscalls_32.h
syshdr-$(CONFIG_X86_64)		+= unistd_32_ia32.h unistd_64_x32.h
syshdr-$(CONFIG_X86_64)		+= syscalls_64.h
syshdr-$(CONFIG_X86_X32)	+= syscalls_x32.h
syshdr-$(CONFIG_X86_X32_ABI)	+= syscalls_x32.h
syshdr-$(CONFIG_XEN)		+= xen-hypercalls.h

uapisyshdr-y	:= $(addprefix $(uapi)/, $(uapisyshdr-y))
+3 −3
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
#endif /* CONFIG_IA32_EMULATION */


#ifdef CONFIG_X86_X32
#ifdef CONFIG_X86_X32_ABI
/*
 * For the x32 ABI, we need to create a stub for compat_sys_*() which is aware
 * of the x86-64-style parameter ordering of x32 syscalls. The syscalls common
@@ -177,12 +177,12 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);

#define __X32_COMPAT_SYS_NI(name)					\
	__SYS_NI(x64, compat_sys_##name)
#else /* CONFIG_X86_X32 */
#else /* CONFIG_X86_X32_ABI */
#define __X32_COMPAT_SYS_STUB0(name)
#define __X32_COMPAT_SYS_STUBx(x, name, ...)
#define __X32_COMPAT_COND_SYSCALL(name)
#define __X32_COMPAT_SYS_NI(name)
#endif /* CONFIG_X86_X32 */
#endif /* CONFIG_X86_X32_ABI */


#ifdef CONFIG_COMPAT
+1 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ struct vdso_image {
extern const struct vdso_image vdso_image_64;
#endif

#ifdef CONFIG_X86_X32
#ifdef CONFIG_X86_X32_ABI
extern const struct vdso_image vdso_image_x32;
#endif

Loading