2023-11-05 10:10:35

by Thomas Weißschuh

[permalink] [raw]
Subject: [PATCH 0/6] tools/nolibc: MIPS bugfixes and refactoring

Two bugfixes and some minor refactorings of the MIPS support.

Signed-off-by: Thomas Weißschuh <[email protected]>
---
Thomas Weißschuh (6):
tools/nolibc: error out on unsupported architecture
tools/nolibc: move MIPS ABI validation into arch-mips.h
selftests/nolibc: use XARCH for MIPS
selftests/nolibc: explicitly specify ABI for MIPS
selftests/nolibc: extraconfig support
selftests/nolibc: add configuration for mipso32be

tools/include/nolibc/arch-mips.h | 4 ++++
tools/include/nolibc/arch.h | 4 +++-
tools/testing/selftests/nolibc/Makefile | 25 ++++++++++++++++++++-----
tools/testing/selftests/nolibc/run-tests.sh | 2 +-
4 files changed, 28 insertions(+), 7 deletions(-)
---
base-commit: 6de6466e41182875252fe09658f9b7d74c4fa43c
change-id: 20231105-nolibc-mips-be-892785dd3eaa

Best regards,
--
Thomas Weißschuh <[email protected]>


2023-11-05 10:10:39

by Thomas Weißschuh

[permalink] [raw]
Subject: [PATCH 4/6] selftests/nolibc: explicitly specify ABI for MIPS

More ABIs exist, for better clarity specify it explicitly everywhere.

Signed-off-by: Thomas Weißschuh <[email protected]>
---
tools/testing/selftests/nolibc/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile
index 15c12f3c27ba..f8fea9fa0263 100644
--- a/tools/testing/selftests/nolibc/Makefile
+++ b/tools/testing/selftests/nolibc/Makefile
@@ -136,7 +136,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_s390 = -m64
-CFLAGS_mipso32le = -EL
+CFLAGS_mipso32le = -EL -mabi=32
CFLAGS_STACKPROTECTOR ?= $(call cc-option,-mstack-protector-guard=global $(call cc-option,-fstack-protector-all))
CFLAGS ?= -Os -fno-ident -fno-asynchronous-unwind-tables -std=c89 -W -Wall -Wextra \
$(call cc-option,-fno-stack-protector) \

--
2.42.1

2023-11-05 10:11:04

by Thomas Weißschuh

[permalink] [raw]
Subject: [PATCH 3/6] selftests/nolibc: use XARCH for MIPS

MIPS has many different configurations prepare the support of additional
ones by moving the build of MIPS to the generic XARCH infrastructure.

Signed-off-by: Thomas Weißschuh <[email protected]>
---
tools/testing/selftests/nolibc/Makefile | 12 +++++++-----
tools/testing/selftests/nolibc/run-tests.sh | 2 +-
2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile
index c5df1617cbc3..15c12f3c27ba 100644
--- a/tools/testing/selftests/nolibc/Makefile
+++ b/tools/testing/selftests/nolibc/Makefile
@@ -40,12 +40,14 @@ objtree ?= $(srctree)

# configure default variants for target kernel supported architectures
XARCH_powerpc = ppc
+XARCH_mips = mipso32le
XARCH = $(or $(XARCH_$(ARCH)),$(ARCH))

# map from user input variants to their kernel supported architectures
ARCH_ppc = powerpc
ARCH_ppc64 = powerpc
ARCH_ppc64le = powerpc
+ARCH_mipso32le = mips
ARCH := $(or $(ARCH_$(XARCH)),$(XARCH))

# kernel image names by architecture
@@ -54,7 +56,7 @@ IMAGE_x86_64 = arch/x86/boot/bzImage
IMAGE_x86 = arch/x86/boot/bzImage
IMAGE_arm64 = arch/arm64/boot/Image
IMAGE_arm = arch/arm/boot/zImage
-IMAGE_mips = vmlinuz
+IMAGE_mipso32le = vmlinuz
IMAGE_ppc = vmlinux
IMAGE_ppc64 = vmlinux
IMAGE_ppc64le = arch/powerpc/boot/zImage
@@ -70,7 +72,7 @@ DEFCONFIG_x86_64 = defconfig
DEFCONFIG_x86 = defconfig
DEFCONFIG_arm64 = defconfig
DEFCONFIG_arm = multi_v7_defconfig
-DEFCONFIG_mips = malta_defconfig
+DEFCONFIG_mipso32le = malta_defconfig
DEFCONFIG_ppc = pmac32_defconfig
DEFCONFIG_ppc64 = powernv_be_defconfig
DEFCONFIG_ppc64le = powernv_defconfig
@@ -88,7 +90,7 @@ QEMU_ARCH_x86_64 = x86_64
QEMU_ARCH_x86 = x86_64
QEMU_ARCH_arm64 = aarch64
QEMU_ARCH_arm = arm
-QEMU_ARCH_mips = mipsel # works with malta_defconfig
+QEMU_ARCH_mipso32le = mipsel # works with malta_defconfig
QEMU_ARCH_ppc = ppc
QEMU_ARCH_ppc64 = ppc64
QEMU_ARCH_ppc64le = ppc64
@@ -110,7 +112,7 @@ QEMU_ARGS_x86_64 = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(
QEMU_ARGS_x86 = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(TEST:%=NOLIBC_TEST=%)"
QEMU_ARGS_arm64 = -M virt -cpu cortex-a53 -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
QEMU_ARGS_arm = -M virt -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
-QEMU_ARGS_mips = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
+QEMU_ARGS_mipso32le = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
QEMU_ARGS_ppc = -M g3beige -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
QEMU_ARGS_ppc64 = -M powernv -append "console=hvc0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
QEMU_ARGS_ppc64le = -M powernv -append "console=hvc0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
@@ -134,7 +136,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_s390 = -m64
-CFLAGS_mips = -EL
+CFLAGS_mipso32le = -EL
CFLAGS_STACKPROTECTOR ?= $(call cc-option,-mstack-protector-guard=global $(call cc-option,-fstack-protector-all))
CFLAGS ?= -Os -fno-ident -fno-asynchronous-unwind-tables -std=c89 -W -Wall -Wextra \
$(call cc-option,-fno-stack-protector) \
diff --git a/tools/testing/selftests/nolibc/run-tests.sh b/tools/testing/selftests/nolibc/run-tests.sh
index 1bf020d49f54..fb825c05031a 100755
--- a/tools/testing/selftests/nolibc/run-tests.sh
+++ b/tools/testing/selftests/nolibc/run-tests.sh
@@ -14,7 +14,7 @@ cache_dir="${XDG_CACHE_HOME:-"$HOME"/.cache}"
download_location="${cache_dir}/crosstools/"
build_location="$(realpath "${cache_dir}"/nolibc-tests/)"
perform_download=0
-archs="i386 x86_64 arm64 arm mips ppc ppc64 ppc64le riscv s390 loongarch"
+archs="i386 x86_64 arm64 arm mipso32le ppc ppc64 ppc64le riscv s390 loongarch"

TEMP=$(getopt -o 'j:d:c:b:a:ph' -n "$0" -- "$@")


--
2.42.1

2023-11-05 10:16:17

by Thomas Weißschuh

[permalink] [raw]
Subject: [PATCH 2/6] tools/nolibc: move MIPS ABI validation into arch-mips.h

When installing nolibc to a sysroot arch.h is not used so its ABI check
is bypassed. This makes is possible to compile nolibc with a non O32 ABI
which may build but can not run.

Move the check into arch-mips.h so it will always be evaluated.

Signed-off-by: Thomas Weißschuh <[email protected]>
---
tools/include/nolibc/arch-mips.h | 4 ++++
tools/include/nolibc/arch.h | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/tools/include/nolibc/arch-mips.h b/tools/include/nolibc/arch-mips.h
index 4ab6fa54beee..3a2c76716b83 100644
--- a/tools/include/nolibc/arch-mips.h
+++ b/tools/include/nolibc/arch-mips.h
@@ -10,6 +10,10 @@
#include "compiler.h"
#include "crt.h"

+#if !defined(_ABIO32)
+#error Unsupported MIPS ABI
+#endif
+
/* Syscalls for MIPS ABI O32 :
* - WARNING! there's always a delayed slot!
* - WARNING again, the syntax is different, registers take a '$' and numbers
diff --git a/tools/include/nolibc/arch.h b/tools/include/nolibc/arch.h
index 2f72ccac0378..c8f4e5d3add9 100644
--- a/tools/include/nolibc/arch.h
+++ b/tools/include/nolibc/arch.h
@@ -23,7 +23,7 @@
#include "arch-arm.h"
#elif defined(__aarch64__)
#include "arch-aarch64.h"
-#elif defined(__mips__) && defined(_ABIO32)
+#elif defined(__mips__)
#include "arch-mips.h"
#elif defined(__powerpc__)
#include "arch-powerpc.h"

--
2.42.1

2023-11-05 10:32:58

by Willy Tarreau

[permalink] [raw]
Subject: Re: [PATCH 3/6] selftests/nolibc: use XARCH for MIPS

Hi Thomas,

On Sun, Nov 05, 2023 at 11:09:57AM +0100, Thomas Wei?schuh wrote:
> MIPS has many different configurations prepare the support of additional
> ones by moving the build of MIPS to the generic XARCH infrastructure.
>
> Signed-off-by: Thomas Wei?schuh <[email protected]>
> ---
> tools/testing/selftests/nolibc/Makefile | 12 +++++++-----
> tools/testing/selftests/nolibc/run-tests.sh | 2 +-
> 2 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile
> index c5df1617cbc3..15c12f3c27ba 100644
> --- a/tools/testing/selftests/nolibc/Makefile
> +++ b/tools/testing/selftests/nolibc/Makefile
> @@ -40,12 +40,14 @@ objtree ?= $(srctree)
>
> # configure default variants for target kernel supported architectures
> XARCH_powerpc = ppc
> +XARCH_mips = mipso32le
> XARCH = $(or $(XARCH_$(ARCH)),$(ARCH))
>
> # map from user input variants to their kernel supported architectures
> ARCH_ppc = powerpc
> ARCH_ppc64 = powerpc
> ARCH_ppc64le = powerpc
> +ARCH_mipso32le = mips

I *think* that what you called "mipso32le" above corresponds exactly to
what is commonly called "mips32le" in toolchains or distros, because,
unless I'm mistaken, "mips32" currently uses the O32 ABI. So that would
sound more intuitive and natural I think.

Willy

2023-11-05 10:38:18

by Willy Tarreau

[permalink] [raw]
Subject: Re: [PATCH 0/6] tools/nolibc: MIPS bugfixes and refactoring

Hi Thomas,

On Sun, Nov 05, 2023 at 11:09:54AM +0100, Thomas Wei?schuh wrote:
> Two bugfixes and some minor refactorings of the MIPS support.
>
> Signed-off-by: Thomas Wei?schuh <[email protected]>

besides the small comments about o32 and olddefconfig, consider this
series as:

Acked-by: Willy Tarreau <[email protected]>

Thanks!
Willy

2023-11-05 10:49:20

by Thomas Weißschuh

[permalink] [raw]
Subject: Re: [PATCH 3/6] selftests/nolibc: use XARCH for MIPS

On 2023-11-05 11:32:27+0100, Willy Tarreau wrote:
> On Sun, Nov 05, 2023 at 11:09:57AM +0100, Thomas Weißschuh wrote:
> > MIPS has many different configurations prepare the support of additional
> > ones by moving the build of MIPS to the generic XARCH infrastructure.
> >
> > Signed-off-by: Thomas Weißschuh <[email protected]>
> > ---
> > tools/testing/selftests/nolibc/Makefile | 12 +++++++-----
> > tools/testing/selftests/nolibc/run-tests.sh | 2 +-
> > 2 files changed, 8 insertions(+), 6 deletions(-)
> >
> > diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile
> > index c5df1617cbc3..15c12f3c27ba 100644
> > --- a/tools/testing/selftests/nolibc/Makefile
> > +++ b/tools/testing/selftests/nolibc/Makefile
> > @@ -40,12 +40,14 @@ objtree ?= $(srctree)
> >
> > # configure default variants for target kernel supported architectures
> > XARCH_powerpc = ppc
> > +XARCH_mips = mipso32le
> > XARCH = $(or $(XARCH_$(ARCH)),$(ARCH))
> >
> > # map from user input variants to their kernel supported architectures
> > ARCH_ppc = powerpc
> > ARCH_ppc64 = powerpc
> > ARCH_ppc64le = powerpc
> > +ARCH_mipso32le = mips
>
> I *think* that what you called "mipso32le" above corresponds exactly to
> what is commonly called "mips32le" in toolchains or distros, because,
> unless I'm mistaken, "mips32" currently uses the O32 ABI. So that would
> sound more intuitive and natural I think.

Ack.

I did the same for mipso32be -> mips32be.

Thomas