xtensa: add kernel ABI selection to Kconfig
authorMax Filippov <jcmvbkbc@gmail.com>
Fri, 23 Apr 2021 07:34:44 +0000 (00:34 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Wed, 9 Mar 2022 22:16:35 +0000 (14:16 -0800)
Add choice to use default or call0 ABI for the kernel code. If call0 ABI
is chosen add '-mabi=call0' to the flags. The toolchain support for this
option is rather new so only enable it when the compiler supports it.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/Kconfig
arch/xtensa/Makefile

index b324f67..cf03ed5 100644 (file)
@@ -92,6 +92,9 @@ config CPU_BIG_ENDIAN
 config CPU_LITTLE_ENDIAN
        def_bool !CPU_BIG_ENDIAN
 
+config CC_HAVE_CALL0_ABI
+       def_bool $(success,test "$(shell,echo __XTENSA_CALL0_ABI__ | $(CC) -mabi=call0 -E -P - 2>/dev/null)" = 1)
+
 menu "Processor type and features"
 
 choice
@@ -250,6 +253,38 @@ config FAST_SYSCALL_SPILL_REGISTERS
 
          If unsure, say N.
 
+choice
+       prompt "Kernel ABI"
+       default KERNEL_ABI_DEFAULT
+       help
+         Select ABI for the kernel code. This ABI is independent of the
+         supported userspace ABI and any combination of the
+         kernel/userspace ABI is possible and should work.
+
+         In case both kernel and userspace support only call0 ABI
+         all register windows support code will be omitted from the
+         build.
+
+         If unsure, choose the default ABI.
+
+config KERNEL_ABI_DEFAULT
+       bool "Default ABI"
+       help
+         Select this option to compile kernel code with the default ABI
+         selected for the toolchain.
+         Normally cores with windowed registers option use windowed ABI and
+         cores without it use call0 ABI.
+
+config KERNEL_ABI_CALL0
+       bool "Call0 ABI" if CC_HAVE_CALL0_ABI
+       help
+         Select this option to compile kernel code with call0 ABI even with
+         toolchain that defaults to windowed ABI.
+         When this option is not selected the default toolchain ABI will
+         be used for the kernel code.
+
+endchoice
+
 config USER_ABI_CALL0
        bool
 
index 725cd4c..5097caa 100644 (file)
@@ -35,6 +35,10 @@ KBUILD_CFLAGS += -ffreestanding -D__linux__
 KBUILD_CFLAGS += -pipe -mlongcalls -mtext-section-literals
 KBUILD_CFLAGS += $(call cc-option,-mforce-no-pic,)
 KBUILD_CFLAGS += $(call cc-option,-mno-serialize-volatile,)
+ifneq ($(CONFIG_KERNEL_ABI_CALL0),)
+KBUILD_CFLAGS += -mabi=call0
+KBUILD_AFLAGS += -mabi=call0
+endif
 
 KBUILD_AFLAGS += -mlongcalls -mtext-section-literals