Linux Kernel Selftest development
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox