All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sven Schnelle <svens@linux.ibm.com>
To: "Thomas Weißschuh" <linux@weissschuh.net>
Cc: Willy Tarreau <w@1wt.eu>, Shuah Khan <shuah@kernel.org>,
	linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] tools/nolibc: add support for 32-bit s390
Date: Wed, 05 Feb 2025 09:00:38 +0100	[thread overview]
Message-ID: <yt9dcyfwyg61.fsf@linux.ibm.com> (raw)
In-Reply-To: <20250122-nolibc-s390-v1-2-8c765f00e871@weissschuh.net> ("Thomas Weißschuh"'s message of "Wed, 22 Jan 2025 19:43:46 +0100")

Hi Thomas,

Thomas Weißschuh <linux@weissschuh.net> writes:

> 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.
>
> Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
> ---
>  tools/include/nolibc/arch-s390.h            | 5 +++++
>  tools/include/nolibc/arch.h                 | 2 +-
>  tools/testing/selftests/nolibc/Makefile     | 5 +++++
>  tools/testing/selftests/nolibc/run-tests.sh | 7 ++++++-
>  4 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/tools/include/nolibc/arch-s390.h b/tools/include/nolibc/arch-s390.h
> index f9ab83a219b8a2d5e53b0b303d8bf0bf78280d5f..3f2fb00ca101cc052f3b794b743e9e5734fe5a77 100644
> --- a/tools/include/nolibc/arch-s390.h
> +++ b/tools/include/nolibc/arch-s390.h
> @@ -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, -160\n"
> +#endif

compat mode is using a stack size of 96 bytes, so the ahi above needs to
be adjusted.

>  		"xc	0(8,%r15), 0(%r15)\n" /* clear backchain                                */
>  		"brasl	%r14, _start_c\n"     /* transfer to c runtime                          */
>  	);
> diff --git a/tools/include/nolibc/arch.h b/tools/include/nolibc/arch.h
> index c8f4e5d3add9eb5b8a438900c084dc0449fcfbd6..8a2c143c0fba288147e5a7bf9db38ffb08367616 100644
> --- a/tools/include/nolibc/arch.h
> +++ b/tools/include/nolibc/arch.h
> @@ -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"
> diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile
> index dad0d9fd7702f8dc9a9a552cda5305f8973c5469..dc5cf19dd74389336b619e15e07f1c635241b7d7 100644
> --- a/tools/testing/selftests/nolibc/Makefile
> +++ b/tools/testing/selftests/nolibc/Makefile
> @@ -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))
>  
> @@ -112,6 +114,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))
>  
> @@ -140,6 +143,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)
>  
> @@ -158,6 +162,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))
> diff --git a/tools/testing/selftests/nolibc/run-tests.sh b/tools/testing/selftests/nolibc/run-tests.sh
> index fe4d48cc054abb1e922b31aa7b6a2395aaf61f5f..79874f669b2a364ad1cb2399b4ebbab5ec6c9de9 100755
> --- a/tools/testing/selftests/nolibc/run-tests.sh
> +++ b/tools/testing/selftests/nolibc/run-tests.sh
> @@ -17,7 +17,7 @@ perform_download=0
>  test_mode=system
>  werror=1
>  llvm=
> -archs="i386 x86_64 arm64 arm mips32le mips32be ppc ppc64 ppc64le riscv32 riscv64 s390x loongarch"
> +archs="i386 x86_64 arm64 arm mips32le mips32be ppc ppc64 ppc64le riscv32 riscv64 s390x s390 loongarch"
>  
>  TEMP=$(getopt -o 'j:d:c:b:a:m:pelh' -n "$0" -- "$@")
>  
> @@ -171,6 +171,11 @@ test_arch() {
>  			exit 1
>  	esac
>  	printf '%-15s' "$arch:"
> +	if [ "$arch" = "s390" ] && ([ "$llvm" = "1" ] || [ "$test_mode" = "user" ]); then
> +		echo "Unsupported configuration"
> +		return
> +	fi
> +
>  	swallow_output "${MAKE[@]}" CFLAGS_EXTRA="$CFLAGS_EXTRA" defconfig "$test_target" V=1
>  	cp run.out run.out."${arch}"
>  	"${MAKE[@]}" report | grep passed

  reply	other threads:[~2025-02-05  8:01 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-22 18:43 [PATCH 0/2] tools/nolibc: support for 32-bit s390 Thomas Weißschuh
2025-01-22 18:43 ` [PATCH 1/2] selftests/nolibc: rename s390 to s390x Thomas Weißschuh
2025-01-22 18:43 ` [PATCH 2/2] tools/nolibc: add support for 32-bit s390 Thomas Weißschuh
2025-02-05  8:00   ` Sven Schnelle [this message]
2025-02-01 10:19 ` [PATCH 0/2] tools/nolibc: " Willy Tarreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=yt9dcyfwyg61.fsf@linux.ibm.com \
    --to=svens@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux@weissschuh.net \
    --cc=shuah@kernel.org \
    --cc=w@1wt.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.