Thomas Weißschuh
60fe18237f
selftests/nolibc: add configurations for riscv32
...
nolibc already supports riscv32. Wire it up in the testsuite.
Link: https://lore.kernel.org/r/20241221-nolibc-rv32-v1-6-d9ef6dab7c63@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2025-01-13 22:21:34 +01:00
Thomas Weißschuh
a47b4b9fba
selftests/nolibc: rename riscv to riscv64
...
riscv32 support is about the be added. To keep the naming clear and
consistent with other architectures rename riscv to riscv64, as that is
what it actually represents.
Link: https://lore.kernel.org/r/20241221-nolibc-rv32-v1-5-d9ef6dab7c63@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2025-01-13 22:21:34 +01:00
Thomas Weißschuh
349afc8a52
selftests/nolibc: skip tests for unimplemented syscalls
...
The riscv32 architecture is missing many of the older syscalls.
Instead of providing wrappers for everything at once, introducing a lot
of complexity, skip the tests for those syscalls for now.
Link: https://lore.kernel.org/r/20241221-nolibc-rv32-v1-4-d9ef6dab7c63@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2025-01-13 22:21:34 +01:00
Thomas Weißschuh
4c7f09ab79
selftests/nolibc: use a pipe to in vfprintf tests
...
Not all architectures implement lseek(), for example riscv32 only
implements llseek() which is not equivalent to normal lseek().
Remove the need for lseek() by using a pipe instead.
Link: https://lore.kernel.org/r/20241221-nolibc-rv32-v1-3-d9ef6dab7c63@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2025-01-13 22:21:34 +01:00
Thomas Weißschuh
a0bc8947ac
selftests/nolibc: use waitid() over waitpid()
...
Newer archs like riscv32 don't provide waitpid() anymore.
Switch to waitid() which is available everywhere.
Link: https://lore.kernel.org/r/20241221-nolibc-rv32-v1-2-d9ef6dab7c63@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2025-01-13 22:21:34 +01:00
Willy Tarreau
4b92b79c56
selftests/nolibc: run-tests.sh: detect missing toolchain
...
The script tries to resolve the path to the current toolchain using
realpath, which fails in case it's not installed, and since it's run
under -e, it doesn't have the opportunity to display a help message.
Let's detect the absence of the required toolchain before running that
command and provide a friendlier message when this happens.
Link: https://lore.kernel.org/all/ZtlQbpgpn9OQOPyI@1wt.eu/
Signed-off-by: Willy Tarreau <w@1wt.eu >
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2025-01-08 22:02:54 +01:00
Thomas Weißschuh
ad0558f388
selftests/nolibc: start qemu with 1 GiB of memory
...
Recently the loongarch defconfig stopped working with the default 128 MiB
of memory. The VM just spins infinitively.
Increasing the available memory to 1 GiB, similar to s390, fixes the
issue. To avoid having to do this for each architecture on its own,
proactively apply to all architectures.
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de >
Link: https://lore.kernel.org/r/20241007-nolibc-qemu-mem-v1-1-c1c2f9acd0f8@linutronix.de
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-10-07 21:57:45 +02:00
Thomas Weißschuh
22ba81c50a
selftests/nolibc: run-tests.sh: allow building through LLVM
...
The nolibc tests can now be properly built with LLVM.
Expose this through run-tests.sh.
Reviewed-by: Shuah Khan <skhan@linuxfoundation.org >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20240807-nolibc-llvm-v2-15-c20f2f5fc7c2@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-08-12 22:22:17 +02:00
Thomas Weißschuh
8404af7e13
selftests/nolibc: use correct clang target for s390/systemz
...
The target names between GCC and clang differ for s390.
While GCC uses "s390", clang uses "systemz".
This mapping is not handled by tools/scripts/Makefile.include,
so do it in the nolibc-test Makefile.
Acked-by: Willy Tarreau <w@1wt.eu >
Reviewed-by: Shuah Khan <skhan@linuxfoundation.org >
Link: https://lore.kernel.org/r/20240807-nolibc-llvm-v2-14-c20f2f5fc7c2@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-08-12 22:22:16 +02:00
Thomas Weißschuh
801cf69ca0
selftests/nolibc: don't use libgcc when building with clang
...
The logic in clang to find the libgcc.a from a GCC toolchain for a
specific ABI does not work reliably and can lead to errors.
Instead disable libgcc when building with clang, as it's not needed
anyways.
Acked-by: Willy Tarreau <w@1wt.eu >
Reviewed-by: Shuah Khan <skhan@linuxfoundation.org >
Link: https://lore.kernel.org/r/20240807-nolibc-llvm-v2-13-c20f2f5fc7c2@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-08-12 22:22:16 +02:00
Thomas Weißschuh
27e458bbeb
selftests/nolibc: run-tests.sh: avoid overwriting CFLAGS_EXTRA
...
If the user specified their own CFLAGS_EXTRA these should not be
overwritten by `-e`.
Reviewed-by: Shuah Khan <skhan@linuxfoundation.org >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20240807-nolibc-llvm-v2-12-c20f2f5fc7c2@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-08-12 22:22:15 +02:00
Thomas Weißschuh
1bd75aeb54
selftests/nolibc: add cc-option compatible with clang cross builds
...
The cc-option macro from Build.include is not compatible with clang
cross builds, as it does not respect the "--target" and similar flags,
set up by Mekfile.include.
Provide a custom variant which works correctly.
Reviewed-by: Shuah Khan <skhan@linuxfoundation.org >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20240807-nolibc-llvm-v2-11-c20f2f5fc7c2@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-08-12 22:22:15 +02:00
Thomas Weißschuh
ae574ae370
selftests/nolibc: add support for LLVM= parameter
...
Makefile.include can modify CC and CFLAGS for usage with clang.
Make use of it.
Makefile.include is currently used to handle the O= variable.
This is incompatible with the LLVM= handling as for O= it has to be
included as early as possible, while for LLVM= it needs to be included
after CFLAGS are set up.
To avoid this incompatibility, switch the O= handling to custom logic.
Reviewed-by: Shuah Khan <skhan@linuxfoundation.org >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20240807-nolibc-llvm-v2-10-c20f2f5fc7c2@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-08-12 22:22:14 +02:00
Thomas Weißschuh
1a1200b66f
selftests/nolibc: determine $(srctree) first
...
The nolibc-test Makefile includes various other Makefiles from the tree.
At first these are included with relative paths like
"../../../build/Build.include" but as soon as $(srctree) is set up,
the inclusions use that instead to build full paths.
To keep the style of inclusions consistent, perform the setup
$(srctree) as early as possible and use it for all inclusions.
Reviewed-by: Shuah Khan <skhan@linuxfoundation.org >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20240807-nolibc-llvm-v2-9-c20f2f5fc7c2@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-08-12 22:22:14 +02:00
Thomas Weißschuh
f1a58f61d8
selftests/nolibc: avoid passing NULL to printf("%s")
...
Clang on higher optimization levels detects that NULL is passed to
printf("%s") and warns about it.
While printf() from nolibc gracefully handles that NULL,
it is undefined behavior as per POSIX, so the warning is reasonable.
Avoid the warning by transforming NULL into a non-NULL placeholder.
Reviewed-by: Shuah Khan <skhan@linuxfoundation.org >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20240807-nolibc-llvm-v2-8-c20f2f5fc7c2@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-08-12 22:22:13 +02:00
Thomas Weißschuh
ddae1d7fab
selftests/nolibc: report failure if no testcase passed
...
When nolibc-test is so broken, it doesn't even start,
don't report success.
Reviewed-by: Shuah Khan <skhan@linuxfoundation.org >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20240807-nolibc-llvm-v2-7-c20f2f5fc7c2@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-08-12 22:22:13 +02:00
Thomas Weißschuh
754283ce83
tools/nolibc: pass argc, argv and envp to constructors
...
Since 2005 glibc has passed argc, argv, and envp to all constructors.
As it is cheap and easy to do so, mirror that behaviour in nolibc.
This makes it easier to migrate applications to nolibc.
Link: https://lore.kernel.org/r/20240728-nolibc-constructor-args-v1-1-36d0bf5cd4c0@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-08-09 07:40:18 +02:00
Thomas Weißschuh
d20d0b10f8
tools/nolibc: implement strerror()
...
strerror() is commonly used.
For example in kselftest which currently needs to do an #ifdef NOLIBC to
handle the lack of strerror().
Keep it simple and reuse the output format of perror() for strerror().
Acked-by: Shuah Khan <skhan@linuxfoundation.org >
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-06-29 09:44:57 +02:00
Thomas Weißschuh
582facfa5a
selftests/nolibc: introduce condition to run tests only on nolibc
...
Some tests only make sense on nolibc. To avoid gaps in the test numbers
do to inline "#ifdef NOLIBC", add a condition to formally skip these
tests.
Acked-by: Shuah Khan <skhan@linuxfoundation.org >
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-06-29 09:44:57 +02:00
Thomas Weißschuh
0cf24d36bb
tools/nolibc: implement strtol() and friends
...
The implementation always works on uintmax_t values.
This is inefficient when only 32bit are needed.
However for all functions this only happens for strtol() on 32bit
platforms.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20240425-nolibc-strtol-v1-2-bfeef7846902@weissschuh.net
2024-06-29 09:44:55 +02:00
Thomas Weißschuh
774e6ef284
selftests/nolibc: run-tests.sh: use -Werror by default
...
run-tests.sh hides the output from the compiler unless the compilation
fails. To recognize newly introduced warnings use -Werror by default.
Also add a switch to disable -Werror in case the warnings are expected.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20240423-nolibc-werror-v1-1-e6f0bd66eb45@weissschuh.net
2024-06-29 09:44:54 +02:00
Thomas Weißschuh
6cada28465
selftests/nolibc: disable brk()/sbrk() tests on musl
...
On musl calls to brk() and sbrk() always fail with ENOMEM.
Detect this and skip the tests on musl.
Tested on glibc 2.39 and musl 1.2.5 in addition to nolibc.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20240424-nolibc-musl-brk-v1-1-b49882dd9a93@weissschuh.net
2024-06-29 09:44:53 +02:00
Thomas Weißschuh
92098b1c10
selftests/nolibc: fix printf format mismatch in expect_str_buf_eq()
...
Fix the following compiler warning on 32bit:
i386-linux-gcc -Os -fno-ident -fno-asynchronous-unwind-tables -std=c89 -W -Wall -Wextra -fno-stack-protector -m32 -mstack-protector-guard=global -fstack-protector-all -o nolibc-test \
-nostdlib -nostdinc -static -Isysroot/i386/include nolibc-test.c nolibc-test-linkage.c -lgcc
nolibc-test.c: In function 'expect_str_buf_eq':
nolibc-test.c:610:30: error: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t' {aka 'unsigned int'} [-Werror=format=]
610 | llen += printf(" = %lu <%s> ", expr, buf);
| ~~^ ~~~~
| | |
| | size_t {aka unsigned int}
| long unsigned int
| %u
Fixes: 1063649cf5 ("selftests/nolibc: Add tests for strlcat() and strlcpy()")
Cc: stable@vger.kernel.org
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-06-29 09:44:53 +02:00
Thomas Weißschuh
0adab2b6b7
tools/nolibc: add support for uname(2)
...
All supported kernels are assumed to use struct new_utsname.
This is validated in test_uname().
uname(2) can for example be used in ksft_min_kernel_version() from the
kernels selftest framework.
Link: https://lore.kernel.org/lkml/20240412123536.GA32444@redhat.com/
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
2024-04-14 20:28:54 +02:00
Rodrigo Campos
1063649cf5
selftests/nolibc: Add tests for strlcat() and strlcpy()
...
I've verified that the tests matches libbsd's strlcat()/strlcpy()
implementation.
Please note that as strlcat()/strlcpy() are not part of the libc, the
tests are only compiled when using nolibc.
Signed-off-by: Rodrigo Campos <rodrigo@sdfg.com.ar >
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2024-04-10 23:19:02 +02:00
Thomas Weißschuh
d543d9ddf5
selftests/nolibc: disable coredump via setrlimit
...
qemu-user does has its own implementation of coredumping.
That implementation does not respect the call to
prctl(PR_SET_DUMPABLE, 0) in run_protection().
This leads to a coredump for every test run under qemu-user.
Use also setrlimit() to inhibit coredump creation which is respected by
qemu-user.
Link: https://lore.kernel.org/qemu-devel/20231115-qemu-user-dumpable-v1-2-edbe7f0fbb02@t-8ch.de/
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Link: https://lore.kernel.org/lkml/20231123-nolibc-rlimit-v1-3-a428b131de2a@weissschuh.net/
Acked-by: Willy Tarreau <w@1wt.eu >
2023-12-11 22:38:37 +01:00
Thomas Weißschuh
a0bb5f88fc
tools/nolibc: add support for getrlimit/setrlimit
...
The implementation uses the prlimit64 systemcall as that is available on
all architectures.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Link: https://lore.kernel.org/lkml/20231123-nolibc-rlimit-v1-2-a428b131de2a@weissschuh.net/
Acked-by: Willy Tarreau <w@1wt.eu >
2023-12-11 22:38:35 +01:00
Thomas Weißschuh
825f404776
tools/nolibc: drop duplicated testcase ioctl_tiocinq
...
The same testcase is present on the line above.
Fixes: b4844fa0bd ("selftests/nolibc: implement a few tests for various syscalls")
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2023-12-11 22:38:33 +01:00
Thomas Weißschuh
b9e64724cd
selftests/nolibc: make result alignment more robust
...
Move the check of the existing length into the function so it can't be
forgotten by the caller.
Also hardcode the padding character as only spaces are ever used.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2023-12-11 22:38:31 +01:00
Thomas Weißschuh
544102458a
tools/nolibc: mips: add support for PIC
...
MIPS requires some extra instructions to set up the $gp register for the
with a pointer to the global data area.
This isn't needed for non-PIC builds, but this patch enables the code
unconditionally to prevent bitrot.
Also enable PIC in one of the test configurations for ongoing
validation.
Link: https://lore.kernel.org/r/20231108-nolibc-pic-v2-1-4fb0d6284757@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2023-12-11 22:38:30 +01:00
Thomas Weißschuh
8bcf9a4855
selftests/nolibc: run-tests.sh: enable testing via qemu-user
...
qemu-user is faster than a full system test.
Link: https://lore.kernel.org/r/20770915-nolibc-run-user-v1-2-3caec61726dc@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2023-12-11 22:38:29 +01:00
Thomas Weißschuh
d7233e2b75
selftests/nolibc: introduce QEMU_ARCH_USER
...
While ppc64le shares the same executable with regular ppc64 the user
variant needs has a dedicated executable.
Introduce a new QEMU_ARCH_USER Makefile variable to accommodate that.
Fixes: 17362f3d0b ("selftests/nolibc: use qemu-system-ppc64 for ppc64le")
Link: https://lore.kernel.org/r/20770915-nolibc-run-user-v1-1-3caec61726dc@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2023-12-11 22:38:28 +01:00
Thomas Weißschuh
07f679b502
selftests/nolibc: fix testcase status alignment
...
Center-align all possible status reports.
Before OK and FAIL were center-aligned in relation to each other but
SKIPPED and FAILED would be left-aligned.
Before:
7 environ_addr = <0x7fffef3e7c50> [OK]
8 environ_envp = <0x7fffef3e7c58> [FAIL]
9 environ_auxv [SKIPPED]
10 environ_total [SKIPPED]
11 environ_HOME = <0x7fffef3e99bd> [OK]
12 auxv_addr [SKIPPED]
13 auxv_AT_UID = 1000 [OK]
After:
7 environ_addr = <0x7ffff13b00a0> [OK]
8 environ_envp = <0x7ffff13b00a8> [FAIL]
9 environ_auxv [SKIPPED]
10 environ_total [SKIPPED]
11 environ_HOME = <0x7ffff13b19bd> [OK]
12 auxv_addr [SKIPPED]
13 auxv_AT_UID = 1000 [OK]
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2023-12-11 22:38:26 +01:00
Thomas Weißschuh
b4b9fb91da
selftests/nolibc: add configuration for mipso32be
...
Allow testing MIPS O32 big endian.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
2023-12-11 22:38:25 +01:00
Thomas Weißschuh
3ab1e9db09
selftests/nolibc: extraconfig support
...
Allow some postprocessing of defconfig files.
Suggested-by: Zhangjin Wu <falcon@tinylab.org >
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
2023-12-11 22:38:24 +01:00
Thomas Weißschuh
bb503f5f01
selftests/nolibc: explicitly specify ABI for MIPS
...
More ABIs exist, for better clarity specify it explicitly everywhere.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
2023-12-11 22:38:23 +01:00
Thomas Weißschuh
c4c20a7d6e
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 <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
2023-12-11 22:38:22 +01:00
Thomas Weißschuh
91f1645159
selftests/nolibc: add script to run testsuite
...
The script can run the testsuite for multiple architectures and provides
an overall test report.
Furthermore it can automatically download crosstools from
mirrors.kernel.org if requested by the user.
Example execution:
$ ./run-tests.sh
i386: 162 test(s): 162 passed, 0 skipped, 0 failed => status: success
x86_64: 162 test(s): 162 passed, 0 skipped, 0 failed => status: success
arm64: 162 test(s): 162 passed, 0 skipped, 0 failed => status: success
arm: 162 test(s): 162 passed, 0 skipped, 0 failed => status: success
mips: 162 test(s): 161 passed, 1 skipped, 0 failed => status: warning
ppc: 162 test(s): 162 passed, 0 skipped, 0 failed => status: success
ppc64: 162 test(s): 162 passed, 0 skipped, 0 failed => status: success
ppc64le: 162 test(s): 162 passed, 0 skipped, 0 failed => status: success
riscv: 162 test(s): 162 passed, 0 skipped, 0 failed => status: success
s390: 162 test(s): 161 passed, 1 skipped, 0 failed => status: warning
loongarch: 162 test(s): 161 passed, 1 skipped, 0 failed => status: warning
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20231105-nolibc-run-tests-v1-1-b59ff770a978@weissschuh.net
2023-12-11 22:38:17 +01:00
Thomas Weißschuh
69620b3a5b
selftests/nolibc: support out-of-tree builds
...
Out of tree builds are much more convenient when building for multiple
architectures or configurations in parallel.
Only absolute O= parameters are supported as Makefile.include will
always resolve relative paths in relation to $(srctree) instead of the
current directory.
Add a call to "make outputmakefile" to verify that the sourcetree is
clean.
This is based on Zhangjins out-of-tree patch.
It extends that work for get_init_cpio support and also drops relative
O= specifications explicitly.
Link: https://lore.kernel.org/lkml/06d96bd81fe812a9718098a383678ad3beba98b1.1691215074.git.falcon@tinylab.org/
Co-developed-by: Zhangjin Wu <falcon@tinylab.org >
Signed-off-by: Zhangjin Wu <falcon@tinylab.org >
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20231031-nolibc-out-of-tree-v1-3-47c92f73590a@weissschuh.net
2023-12-11 22:38:16 +01:00
Thomas Weißschuh
7263c9d9b6
selftests/nolibc: anchor paths in $(srcdir) if possible
...
It is easier to recognize paths from their well-known location in the
source tree than having to resolve the relative path in ones head.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20231031-nolibc-out-of-tree-v1-2-47c92f73590a@weissschuh.net
2023-12-11 22:38:15 +01:00
Thomas Weißschuh
bdeeeaba83
selftests/nolibc: use EFI -bios for LoongArch qemu
...
qemu for LoongArch does not work properly with direct kernel boot.
The kernel will panic during initialization and hang without any output.
When booting in EFI mode everything work correctly.
While users most likely don't have the LoongArch EFI binary installed at
least an explicit error about 'file not found' is better than a hanging
test without output that can never succeed.
Link: https://lore.kernel.org/loongarch/1738d60a-df3a-4102-b1da-d16a29b6e06a@t-8ch.de/
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20231031-nolibc-out-of-tree-v1-1-47c92f73590a@weissschuh.net
2023-12-11 22:38:14 +01:00
Thomas Weißschuh
89b212d4af
selftests/nolibc: don't hang on config input
...
When the kernel code has changed the build may ask for configuration
input and hang. Prevent this and instead use the default settings.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2023-11-13 22:02:48 +01:00
Thomas Weißschuh
b8c60e8fc6
selftests/nolibc: add tests for multi-object linkage
...
While uncommon, nolibc executables can be linked together from multiple
compilation units.
Add some tests to make sure everything works in that case.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Link: https://lore.kernel.org/lkml/20231012-nolibc-linkage-test-v1-1-315e682768b4@weissschuh.net/
Acked-by: Willy Tarreau <w@1wt.eu >
2023-10-12 21:14:20 +02:00
Thomas Weißschuh
17362f3d0b
selftests/nolibc: use qemu-system-ppc64 for ppc64le
...
qemu-system-ppc64 can handle both big and little endian kernels.
While some setups, like Debian, provide a symlink to execute
qemu-system-ppc64 as qemu-system-ppc64le, others, like ArchLinux, do not.
So always use qemu-system-ppc64 directly.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Link: https://lore.kernel.org/lkml/20231008-nolibc-qemu-ppc64-v1-1-29e2326e0420@weissschuh.net/
Acked-by: Willy Tarreau <w@1wt.eu >
2023-10-12 21:14:19 +02:00
Thomas Weißschuh
63aa531716
tools/nolibc: add support for constructors and destructors
...
With the startup code moved to C, implementing support for
constructors and deconstructors is fairly easy to implement.
Examples for code size impact:
text data bss dec hex filename
21837 104 88 22029 560d nolibc-test.before
22135 120 88 22343 5747 nolibc-test.after
21970 104 88 22162 5692 nolibc-test.after-only-crt.h-changes
The sections are defined by [0].
[0] https://refspecs.linuxfoundation.org/elf/gabi4+/ch5.dynamic.html
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/lkml/20231007-nolibc-constructors-v2-1-ef84693efbc1@weissschuh.net/
2023-10-12 21:14:16 +02:00
Thomas Weißschuh
eddfc3c742
tools/nolibc: drop test for getauxval(AT_PAGESZ)
...
Other testcases are already testing the same functionality:
* auxv_AT_UID tests getauxval() in general.
* test_getpagesize() tests pagesize() which directly calls
getauxval(AT_PAGESZ).
Link: https://lore.kernel.org/r/20231007-nolibc-auxval-pagesz-v1-1-af00804edead@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2023-10-12 21:14:15 +02:00
Thomas Weißschuh
9531548675
selftests/nolibc: allow building i386 with multiarch compiler
...
When building with a multiarch-capable compiler, like those provided by
common distributions the -m32 argument is required to build 32bit code.
Wrap it in cc-option in case the compiler is not multiarch-capable.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Acked-by: Willy Tarreau <w@1wt.eu >
Link: https://lore.kernel.org/r/20230917-nolibc-syscall-nr-v2-1-03863d509b9a@weissschuh.net
2023-10-12 21:14:09 +02:00
Thomas Weißschuh
45839d0991
selftests/nolibc: don't embed initramfs into kernel image
...
When the initramfs is embedded into the kernel each rebuild of it will
trigger a full kernel relink and all the expensive postprocessing steps.
Currently nolibc-test and therefore the initramfs are always rebuild,
even without source changes, leading to lots of slow kernel relinks.
Instead of linking the initramfs into the kernel assemble it manually
and pass it explicitly to qemu.
This avoids all of the kernel relinks.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu >
Link: https://lore.kernel.org/r/20230917-nolibc-initramfs-v2-1-f0f293a8b198@weissschuh.net
2023-10-12 21:14:07 +02:00
Thomas Weißschuh
4ed03f639e
selftests/nolibc: libc-test: avoid -Wstringop-overflow warnings
...
Newer versions of glibc annotate the poll() function with
__attribute__(access) which triggers a compiler warning inside the
testcase poll_fault.
Avoid this by using a plain NULL which is enough for the testcase.
To avoid potential future warnings also adapt the other EFAULT
testcases, except select_fault as NULL is a valid value for its
argument.
nolibc-test.c: In function ‘run_syscall’:
nolibc-test.c:338:62: warning: ‘poll’ writing 8 bytes into a region of size 0 overflows the destination [-Wstringop-overflow=]
338 | do { if (!(cond)) result(llen, SKIPPED); else ret += expect_syserr2(expr, expret, experr1, experr2, llen); } while (0)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nolibc-test.c:341:9: note: in expansion of macro ‘EXPECT_SYSER2’
341 | EXPECT_SYSER2(cond, expr, expret, experr, 0)
| ^~~~~~~~~~~~~
nolibc-test.c:905:47: note: in expansion of macro ‘EXPECT_SYSER’
905 | CASE_TEST(poll_fault); EXPECT_SYSER(1, poll((void *)1, 1, 0), -1, EFAULT); break;
| ^~~~~~~~~~~~
cc1: note: destination object is likely at address zero
In file included from /usr/include/poll.h:1,
from nolibc-test.c:33:
/usr/include/sys/poll.h:54:12: note: in a call to function ‘poll’ declared with attribute ‘access (write_only, 1, 2)’
54 | extern int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
| ^~~~
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
2023-10-12 21:14:05 +02:00
Thomas Weißschuh
265fbb4be0
selftests/nolibc: use -nostdinc for nolibc-test
...
Avoid any accidental reliance on system includes.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net >
Signed-off-by: Willy Tarreau <w@1wt.eu >
2023-10-12 21:13:55 +02:00