mirror of
https://github.com/torvalds/linux.git
synced 2025-04-12 06:49:52 +00:00
tools/nolibc: add support for 32-bit s390
32-bit s390 is very close to the existing 64-bit implementation. Some special handling is necessary as there is neither LLVM nor QEMU support. Also the kernel itself can not build natively for 32-bit s390, so instead the test program is executed with a 64-bit kernel. Acked-by: Willy Tarreau <w@1wt.eu> Link: https://lore.kernel.org/r/20250206-nolibc-s390-v2-2-991ad97e3d58@weissschuh.net Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
This commit is contained in:
parent
3d1e67c615
commit
9c812b01f1
@ -143,8 +143,13 @@
|
||||
void __attribute__((weak, noreturn)) __nolibc_entrypoint __no_stack_protector _start(void)
|
||||
{
|
||||
__asm__ volatile (
|
||||
#ifdef __s390x__
|
||||
"lgr %r2, %r15\n" /* save stack pointer to %r2, as arg1 of _start_c */
|
||||
"aghi %r15, -160\n" /* allocate new stackframe */
|
||||
#else
|
||||
"lr %r2, %r15\n"
|
||||
"ahi %r15, -96\n"
|
||||
#endif
|
||||
"xc 0(8,%r15), 0(%r15)\n" /* clear backchain */
|
||||
"brasl %r14, _start_c\n" /* transfer to c runtime */
|
||||
);
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "arch-powerpc.h"
|
||||
#elif defined(__riscv)
|
||||
#include "arch-riscv.h"
|
||||
#elif defined(__s390x__)
|
||||
#elif defined(__s390x__) || defined(__s390__)
|
||||
#include "arch-s390.h"
|
||||
#elif defined(__loongarch__)
|
||||
#include "arch-loongarch.h"
|
||||
|
@ -72,6 +72,7 @@ IMAGE_riscv = arch/riscv/boot/Image
|
||||
IMAGE_riscv32 = arch/riscv/boot/Image
|
||||
IMAGE_riscv64 = arch/riscv/boot/Image
|
||||
IMAGE_s390x = arch/s390/boot/bzImage
|
||||
IMAGE_s390 = arch/s390/boot/bzImage
|
||||
IMAGE_loongarch = arch/loongarch/boot/vmlinuz.efi
|
||||
IMAGE = $(objtree)/$(IMAGE_$(XARCH))
|
||||
IMAGE_NAME = $(notdir $(IMAGE))
|
||||
@ -91,6 +92,7 @@ DEFCONFIG_riscv = defconfig
|
||||
DEFCONFIG_riscv32 = rv32_defconfig
|
||||
DEFCONFIG_riscv64 = defconfig
|
||||
DEFCONFIG_s390x = defconfig
|
||||
DEFCONFIG_s390 = defconfig compat.config
|
||||
DEFCONFIG_loongarch = defconfig
|
||||
DEFCONFIG = $(DEFCONFIG_$(XARCH))
|
||||
|
||||
@ -114,6 +116,7 @@ QEMU_ARCH_riscv = riscv64
|
||||
QEMU_ARCH_riscv32 = riscv32
|
||||
QEMU_ARCH_riscv64 = riscv64
|
||||
QEMU_ARCH_s390x = s390x
|
||||
QEMU_ARCH_s390 = s390x
|
||||
QEMU_ARCH_loongarch = loongarch64
|
||||
QEMU_ARCH = $(QEMU_ARCH_$(XARCH))
|
||||
|
||||
@ -142,6 +145,7 @@ QEMU_ARGS_riscv = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_T
|
||||
QEMU_ARGS_riscv32 = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
||||
QEMU_ARGS_riscv64 = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
||||
QEMU_ARGS_s390x = -M s390-ccw-virtio -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
||||
QEMU_ARGS_s390 = -M s390-ccw-virtio -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
||||
QEMU_ARGS_loongarch = -M virt -append "console=ttyS0,115200 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
||||
QEMU_ARGS = -m 1G $(QEMU_ARGS_$(XARCH)) $(QEMU_ARGS_BIOS) $(QEMU_ARGS_EXTRA)
|
||||
|
||||
@ -160,6 +164,7 @@ CFLAGS_ppc = -m32 -mbig-endian -mno-vsx $(call cc-option,-mmultiple)
|
||||
CFLAGS_ppc64 = -m64 -mbig-endian -mno-vsx $(call cc-option,-mmultiple)
|
||||
CFLAGS_ppc64le = -m64 -mlittle-endian -mno-vsx $(call cc-option,-mabi=elfv2)
|
||||
CFLAGS_s390x = -m64
|
||||
CFLAGS_s390 = -m31
|
||||
CFLAGS_mips32le = -EL -mabi=32 -fPIC
|
||||
CFLAGS_mips32be = -EB -mabi=32
|
||||
CFLAGS_STACKPROTECTOR ?= $(call cc-option,-mstack-protector-guard=global $(call cc-option,-fstack-protector-all))
|
||||
|
@ -23,7 +23,7 @@ all_archs=(
|
||||
mips32le mips32be
|
||||
ppc ppc64 ppc64le
|
||||
riscv32 riscv64
|
||||
s390x
|
||||
s390x s390
|
||||
loongarch
|
||||
)
|
||||
archs="${all_archs[@]}"
|
||||
@ -179,6 +179,10 @@ test_arch() {
|
||||
exit 1
|
||||
esac
|
||||
printf '%-15s' "$arch:"
|
||||
if [ "$arch" = "s390" ] && ([ "$llvm" = "1" ] || [ "$test_mode" = "user" ]); then
|
||||
echo "Unsupported configuration"
|
||||
return
|
||||
fi
|
||||
|
||||
mkdir -p "$build_dir"
|
||||
swallow_output "${MAKE[@]}" defconfig
|
||||
|
Loading…
x
Reference in New Issue
Block a user