Re: [PATCH] x86: Start removing X86_X32_ABI

From: Richard Purdie

Date: Tue Jun 02 2026 - 06:04:04 EST


On Sat, 2026-05-23 at 11:37 +0200, Sebastian Andrzej Siewior wrote:
> The x32 ABI was introduced in v3.4 to leverage the additional registers
> which were available on x86_64 but not on i386 while keeping the smaller
> 32bit pointers.
>
> This did not take off. The memory usage usually knows no limit and the
> better performance did not reach a point where certain workloads widely
> move to x32 and use it exclusively. In the meantime Debian introduced a
> patch to disable x32 by default (so it has to be enabled at boot time on
> the command line) because they are afraid of the increased attack
> surface. Fedora as far as I tell has X32 disabled (looking at 7.0-rc5
> rpm in rawhide).
>
> The last syscall for x86_64 is currently at 471. The first x32 starts at
> 512 which leaves 40 new syscalls in between. Without the x32 ABI, those
> syscalls could be used since x32 wouldn't be an option and therefore
> reserved.
>
> Since there is practically no real use for x32, start removing it by
> removing the symbol first, not allowing to enable it. Should nothing
> happening within the next half year, lets remove code bits around August
> after the summer break.
>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
> ---
>  arch/x86/Kconfig | 14 --------------
>  1 file changed, 14 deletions(-)
>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index f3f7cb01d69d0..2b246a6125768 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -3143,20 +3143,6 @@ config IA32_EMULATION_DEFAULT_DISABLED
>     processes and access to 32-bit syscalls. If unsure, leave it to its
>     default value.
>  
> -config X86_X32_ABI
> - bool "x32 ABI for 64-bit mode"
> - depends on X86_64
> - # llvm-objcopy does not convert x86_64 .note.gnu.property or
> - # compressed debug sections to x86_x32 properly:
> - # https://github.com/ClangBuiltLinux/linux/issues/514
> - # https://github.com/ClangBuiltLinux/linux/issues/1141
> - depends on $(success,$(OBJCOPY) --version | head -n1 | grep -qv llvm)
> - help
> -   Include code to run binaries for the x32 native 32-bit ABI
> -   for 64-bit processors.  An x32 process gets access to the
> -   full 64-bit register file and wide data path while leaving
> -   pointers at 32 bits for smaller memory footprint.
> -
>  config COMPAT_32
>   def_bool y
>   depends on IA32_EMULATION || X86_32

FWIW we (as in the Yocto Project) have been supporting x32 for a long
time so we regularly build/boot/test this as part of our CI (toolchain
+ kernel + userspace). That does mean we end up sending patches when
things break. We did reduce the scope of the userspace we test a few
years ago to try and keep things manageable.

We struggle (as most do) to know who uses what, nobody tells us when it
works. My instincts say it isn't actively used and if the kernel drops
it, we would follow. I don't have any strong objection at this point. I
mention it mainly to explain why you might see patches from us.

Cheers,

Richard