arch/x86/Kconfig | 14 -------------- 1 file changed, 14 deletions(-)
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@linutronix.de>
---
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
--
2.53.0
On May 23, 2026 2:37:34 AM PDT, Sebastian Andrzej Siewior <bigeasy@linutronix.de> 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@linutronix.de> >--- > 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 So I'm not opposed to sunsetting x32; it happened too late to actually be able to become useful (sorry, Knuth.) However, we can not recycle the syscall numbers. The x32 flag in the syscall number was advisory originally; it was introduced late in the game to work around a design bug in the input subsystem (*). -hpa (*) Classic example of taking a binary interface and "translating" it into a text interface, in the process making it worse than either: taking a bitmask and exposing it as a space-separated list unsigned longs in decimal form.
© 2016 - 2026 Red Hat, Inc.