From nobody Tue Oct 7 07:06:11 2025 Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8CEAE2222A1; Sat, 12 Jul 2025 09:01:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.69.126.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752310871; cv=none; b=rwjjCggGKz5lbfl0D2vlxf2rgCHY8fSekFHDaSSS75KcI87kPvylAUxKhrnlYgYsUutiTlIVOepj/dilIbA+E75waV0cBACzYVd4JwZLFc3uPzOFqz0DEEjTdUqadLrRMZV0/zNrTnAGKXNKs1Yyi9SHLBXbCnvHdaKzAapHcXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752310871; c=relaxed/simple; bh=I0Za4MEKM7buIuLwCwH7lBjcRz9CuM5dT8TU7XLat0I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=De4dts15bRTZR6gkSbpOs4g7ar9JvFx90jdnTxx1Ry9Eye+6lgeLxtt+83BPGhyTK2+3Hadj1PzRSeY/4c69OfBdfGaMeown+909rTMDM6IdFkIoltRlGHy43twhxA8PeeoFebu38m6eTdp+oG8zAMVxOTGozoONTaxwDvKlpgA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net; spf=pass smtp.mailfrom=weissschuh.net; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b=tqGnIweP; arc=none smtp.client-ip=159.69.126.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b="tqGnIweP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=weissschuh.net; s=mail; t=1752310860; bh=I0Za4MEKM7buIuLwCwH7lBjcRz9CuM5dT8TU7XLat0I=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=tqGnIwePXLbsa0mw3yWZR7Xaepn2mEEzHVK1daQ41ehH9tsVhteHORrrxQrUD2HDX Xr0TrGkR9tvoLyMn7fT0mvbHNFhanfmnfZJCQQH7AQgHM2XdYwrdi+2wFOgFRVieiL 6eJMPyM70M2O/4fYC/sFRqyZZf8rkHtw8eGL+cvY= From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Date: Sat, 12 Jul 2025 11:00:55 +0200 Subject: [PATCH 1/2] tools/nolibc: define time_t in terms of __kernel_old_time_t Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250712-nolibc-x32-v1-1-6d81cb798710@weissschuh.net> References: <20250712-nolibc-x32-v1-0-6d81cb798710@weissschuh.net> In-Reply-To: <20250712-nolibc-x32-v1-0-6d81cb798710@weissschuh.net> To: Willy Tarreau , Shuah Khan Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1752310859; l=1408; i=linux@weissschuh.net; s=20221212; h=from:subject:message-id; bh=I0Za4MEKM7buIuLwCwH7lBjcRz9CuM5dT8TU7XLat0I=; b=UZN9QsKRiZ8w3QI2KQzkkXzaU+kAUvayrhE5jq+vw5OP8yYGgnpmuoQiF89gi0tzUK0bfqNhL oUmsGDrKwijAnzE87BhhDdqzikLGYMFSozz5AcTH/WDdbqbQ3Q1fYjM X-Developer-Key: i=linux@weissschuh.net; a=ed25519; pk=KcycQgFPX2wGR5azS7RhpBqedglOZVgRPfdFSPB1LNw= Nolibc assumes that the kernel ABI is using a time values that are as large as a long integer. For most ABIs this holds true. But for x32 this is not correct, as it uses 32bit longs but 64bit times. Also the 'struct stat' implementation of nolibc relies on timespec::tv_sec and time_t being the same type. While timespec::tv_sec comes from the kernel and is of type __kernel_old_time_t, time_t is defined within nolibc. Switch to the __kernel_old_time_t to always get the correct type. Signed-off-by: Thomas Wei=C3=9Fschuh Acked-by: Willy Tarreau --- tools/include/nolibc/std.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/include/nolibc/std.h b/tools/include/nolibc/std.h index adda7333d12e7d2c336938ede1aaf215b4b93165..ba950f0e7338438823b4ee8c68a= 067391c719823 100644 --- a/tools/include/nolibc/std.h +++ b/tools/include/nolibc/std.h @@ -16,6 +16,8 @@ #include "stdint.h" #include "stddef.h" =20 +#include + /* those are commonly provided by sys/types.h */ typedef unsigned int dev_t; typedef unsigned long ino_t; @@ -27,6 +29,6 @@ typedef unsigned long nlink_t; typedef signed long off_t; typedef signed long blksize_t; typedef signed long blkcnt_t; -typedef signed long time_t; +typedef __kernel_old_time_t time_t; =20 #endif /* _NOLIBC_STD_H */ --=20 2.50.1 From nobody Tue Oct 7 07:06:11 2025 Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8CF072236E3; Sat, 12 Jul 2025 09:01:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.69.126.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752310870; cv=none; b=M8roHAAPOlZgpOhDarAfSggD6hkL3vX3BINR1qflsXoJS0ZK/vUAeyFoEDPEGz5yydOmIURTg4klkTUm8DiElEBaDM6DznpFtIyYrehEDy83zPulWa3g04f1y0MrktiSMaa2w/xWJQroxns+LvPEI1iVX5Y5l5O+M4rU27lzlzI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752310870; c=relaxed/simple; bh=z0mpkzYEyZYkp5eI4TzRWS1qJqzKdrkv1vY/VtruD00=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JhsgFj7tgCa38yq2skh+Xy3jdcO1kSK2LQ2DXmGPg+gCOr4hgY6d8wdHvEFHGzDWs97njMtU/08f1A9HZi1dGWBDiZpiFhwUJm+04ND2+U9iw0rdzF4BE/HNdkBgkCLmOvLQiHDm17KHl2BJKjrOZS6TPfDbvJiJnlGVEYxqf3k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net; spf=pass smtp.mailfrom=weissschuh.net; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b=j7X6F1nu; arc=none smtp.client-ip=159.69.126.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b="j7X6F1nu" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=weissschuh.net; s=mail; t=1752310860; bh=z0mpkzYEyZYkp5eI4TzRWS1qJqzKdrkv1vY/VtruD00=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=j7X6F1nuKPTuubmTUAkWzeWr2hnzuwSOFPNN6sUQZ6+KFPM5KhCrwRla7oh9LqdKJ XknGtXBpq2ffm5xhSY9Y5Ga3SCPt/h6s7+tJNoY/EZzGwn+H/GEGV+sJ4vRW/86puG ltcuxpUx15OZdirJtwQOAWkxOu70JgYQiBBpCuNo= From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Date: Sat, 12 Jul 2025 11:00:56 +0200 Subject: [PATCH 2/2] selftests/nolibc: add x32 test configuration Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250712-nolibc-x32-v1-2-6d81cb798710@weissschuh.net> References: <20250712-nolibc-x32-v1-0-6d81cb798710@weissschuh.net> In-Reply-To: <20250712-nolibc-x32-v1-0-6d81cb798710@weissschuh.net> To: Willy Tarreau , Shuah Khan Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1752310859; l=4386; i=linux@weissschuh.net; s=20221212; h=from:subject:message-id; bh=z0mpkzYEyZYkp5eI4TzRWS1qJqzKdrkv1vY/VtruD00=; b=nu+wyouVgc+1vMzG+Qh+sC1cKrHUm3O+feaLWmJfs1CIl9vO/GtjM6Y3SJpYt860CgZvHejds AjAd2WWE5BBCsTvIusGWxoV+nQ3JHOBanXaHqIHt88boZ8aBAXjGPcJ X-Developer-Key: i=linux@weissschuh.net; a=ed25519; pk=KcycQgFPX2wGR5azS7RhpBqedglOZVgRPfdFSPB1LNw= Nolibc supports the x32 ABI on x86. Add a testcase to make sure the support stays functional. QEMU user does not have support for x32, so skip the test there. Signed-off-by: Thomas Wei=C3=9Fschuh --- tools/testing/selftests/nolibc/Makefile.nolibc | 12 ++++++++++++ tools/testing/selftests/nolibc/run-tests.sh | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/nolibc/Makefile.nolibc b/tools/testing= /selftests/nolibc/Makefile.nolibc index 51ba853dd97eebed32f9808b0979460071f2514f..0fb759ba992ee6b1693b88f1b2e= 77463afa9f38b 100644 --- a/tools/testing/selftests/nolibc/Makefile.nolibc +++ b/tools/testing/selftests/nolibc/Makefile.nolibc @@ -47,6 +47,7 @@ XARCH_riscv =3D riscv64 XARCH =3D $(or $(XARCH_$(ARCH)),$(ARCH)) =20 # map from user input variants to their kernel supported architectures +ARCH_x32 =3D x86 ARCH_armthumb =3D arm ARCH_ppc =3D powerpc ARCH_ppc64 =3D powerpc @@ -68,6 +69,7 @@ ARCH :=3D $(or $(ARCH_$(XARCH)),$(XARCH)) # kernel image names by architecture IMAGE_i386 =3D arch/x86/boot/bzImage IMAGE_x86_64 =3D arch/x86/boot/bzImage +IMAGE_x32 =3D arch/x86/boot/bzImage IMAGE_x86 =3D arch/x86/boot/bzImage IMAGE_arm64 =3D arch/arm64/boot/Image IMAGE_arm =3D arch/arm/boot/zImage @@ -97,6 +99,7 @@ IMAGE_NAME =3D $(notdir $(IMAGE)) # default kernel configurations that appear to be usable DEFCONFIG_i386 =3D defconfig DEFCONFIG_x86_64 =3D defconfig +DEFCONFIG_x32 =3D defconfig DEFCONFIG_x86 =3D defconfig DEFCONFIG_arm64 =3D defconfig DEFCONFIG_arm =3D multi_v7_defconfig @@ -122,6 +125,7 @@ DEFCONFIG_m68k =3D virt_defconfig DEFCONFIG_sh4 =3D rts7751r2dplus_defconfig DEFCONFIG =3D $(DEFCONFIG_$(XARCH)) =20 +EXTRACONFIG_x32 =3D -e CONFIG_X86_X32_ABI EXTRACONFIG_arm =3D -e CONFIG_NAMESPACES EXTRACONFIG_armthumb =3D -e CONFIG_NAMESPACES EXTRACONFIG_m68k =3D -e CONFIG_BLK_DEV_INITRD @@ -134,6 +138,7 @@ TEST =3D # QEMU_ARCH: arch names used by qemu QEMU_ARCH_i386 =3D i386 QEMU_ARCH_x86_64 =3D x86_64 +QEMU_ARCH_x32 =3D x86_64 QEMU_ARCH_x86 =3D x86_64 QEMU_ARCH_arm64 =3D aarch64 QEMU_ARCH_arm =3D arm @@ -174,6 +179,7 @@ endif # QEMU_ARGS : some arch-specific args to pass to qemu QEMU_ARGS_i386 =3D -M pc -append "console=3DttyS0,9600 i8042.noaux p= anic=3D-1 $(TEST:%=3DNOLIBC_TEST=3D%)" QEMU_ARGS_x86_64 =3D -M pc -append "console=3DttyS0,9600 i8042.noaux p= anic=3D-1 $(TEST:%=3DNOLIBC_TEST=3D%)" +QEMU_ARGS_x32 =3D -M pc -append "console=3DttyS0,9600 i8042.noaux p= anic=3D-1 $(TEST:%=3DNOLIBC_TEST=3D%)" QEMU_ARGS_x86 =3D -M pc -append "console=3DttyS0,9600 i8042.noaux p= anic=3D-1 $(TEST:%=3DNOLIBC_TEST=3D%)" QEMU_ARGS_arm64 =3D -M virt -cpu cortex-a53 -append "panic=3D-1 $(TES= T:%=3DNOLIBC_TEST=3D%)" QEMU_ARGS_arm =3D -M virt -append "panic=3D-1 $(TEST:%=3DNOLIBC_TES= T=3D%)" @@ -210,6 +216,7 @@ Q=3D@ endif =20 CFLAGS_i386 =3D $(call cc-option,-m32) +CFLAGS_x32 =3D -mx32 CFLAGS_arm =3D -marm CFLAGS_armthumb =3D -mthumb -march=3Darmv6t2 CFLAGS_ppc =3D -m32 -mbig-endian -mno-vsx $(call cc-option,-mmultiple) @@ -236,6 +243,11 @@ LDFLAGS :=3D =20 LIBGCC :=3D -lgcc =20 +ifeq ($(ARCH),x86) +# Not needed on x86, probably not present for x32 +LIBGCC :=3D +endif + ifneq ($(LLVM),) # Not needed for clang LIBGCC :=3D diff --git a/tools/testing/selftests/nolibc/run-tests.sh b/tools/testing/se= lftests/nolibc/run-tests.sh index 43eb30be316ae7bac7f0ba2c38b494a283833bec..e8af1fb505cf3573b4a6b37228d= ee764fe2e5277 100755 --- a/tools/testing/selftests/nolibc/run-tests.sh +++ b/tools/testing/selftests/nolibc/run-tests.sh @@ -18,7 +18,7 @@ test_mode=3Dsystem werror=3D1 llvm=3D all_archs=3D( - i386 x86_64 + i386 x86_64 x32 arm64 arm armthumb mips32le mips32be mipsn32le mipsn32be mips64le mips64be ppc ppc64 ppc64le @@ -115,6 +115,7 @@ crosstool_arch() { mips*) echo mips;; s390*) echo s390;; sparc*) echo sparc64;; + x32*) echo x86_64;; *) echo "$1";; esac } @@ -192,6 +193,10 @@ test_arch() { echo "Unsupported configuration" return fi + if [ "$arch" =3D "x32" ] && [ "$test_mode" =3D "user" ]; then + echo "Unsupported configuration" + return + fi =20 mkdir -p "$build_dir" swallow_output "${MAKE[@]}" defconfig --=20 2.50.1