---help---
          Support old a.out binaries in the 32bit emulation.
 
-config X86_X32_ABI
+config X86_X32
        bool "x32 ABI for 64-bit mode (EXPERIMENTAL)"
        depends on X86_64 && IA32_EMULATION && EXPERIMENTAL
        ---help---
 
 config COMPAT
        def_bool y
-       depends on IA32_EMULATION || X86_X32_ABI
+       depends on IA32_EMULATION || X86_X32
 
 config COMPAT_FOR_U64_ALIGNMENT
        def_bool COMPAT
 
         endif
 endif
 
+ifdef CONFIG_X86_X32
+       x32_ld_ok := $(call try-run,\
+                       /bin/echo -e '1: .quad 1b' | \
+                       $(CC) $(KBUILD_AFLAGS) -c -xassembler -o "$$TMP" - && \
+                       $(OBJCOPY) -O elf32-x86-64 "$$TMP" "$$TMPO" && \
+                       $(LD) -m elf32_x86_64 "$$TMPO" -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
+
 # Don't unroll struct assignments with kmemcheck enabled
 ifeq ($(CONFIG_KMEMCHECK),y)
        KBUILD_CFLAGS += $(call cc-option,-fno-builtin-memcpy)