| 3495279d | 08-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: support UBSAN on gcc
The UBSAN implementation in gcc requires a slightly different function attribute to skip instrumentation.
Extend __nolibc_no_sanitize_undefined to also handle gcc
tools/nolibc: support UBSAN on gcc
The UBSAN implementation in gcc requires a slightly different function attribute to skip instrumentation.
Extend __nolibc_no_sanitize_undefined to also handle gcc.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Link: https://patch.msgid.link/20260408-nolibc-gcc-15-v1-2-330d0c40f894@weissschuh.net
show more ...
|
| 08ab9580 | 08-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: create __nolibc_no_sanitize_ubsan
The logic to disable UBSAN will become a bit more complicated. Move it out into compiler.h, so crt.h stays readable.
Signed-off-by: Thomas Weißschuh
tools/nolibc: create __nolibc_no_sanitize_ubsan
The logic to disable UBSAN will become a bit more complicated. Move it out into compiler.h, so crt.h stays readable.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Link: https://patch.msgid.link/20260408-nolibc-gcc-15-v1-1-330d0c40f894@weissschuh.net
show more ...
|
| ce834c9c | 05-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: add byteorder conversions
Add some standard functions to convert between different byte orders. Conveniently the UAPI headers provide all the necessary functionality.
Signed-off-by: T
tools/nolibc: add byteorder conversions
Add some standard functions to convert between different byte orders. Conveniently the UAPI headers provide all the necessary functionality.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260405-nolibc-bswap-v1-1-f7699ca9cee0@weissschuh.net
show more ...
|
| 2eb64b93 | 05-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: add the _syscall() macro
The standard syscall() function or macro uses the libc return value convention. Errors returned from the kernel as negative values are stored in errno and -1 i
tools/nolibc: add the _syscall() macro
The standard syscall() function or macro uses the libc return value convention. Errors returned from the kernel as negative values are stored in errno and -1 is returned. Users who want to avoid using errno don't have a way to call raw syscalls and check the returned error.
Add a new macro _syscall() which works like the standard syscall() but passes through the return value from the kernel unchanged. The naming scheme and return values match the named _sys_foo() system call wrappers already part of nolibc.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260405-nolibc-syscall-v1-3-e5b12bc63211@weissschuh.net
show more ...
|
| 022bbb5a | 05-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: move the call to __sysret() into syscall()
__sysret() transforms the return value from the kernel into the libc return value convention. There is no reason for it to be called in the m
tools/nolibc: move the call to __sysret() into syscall()
__sysret() transforms the return value from the kernel into the libc return value convention. There is no reason for it to be called in the middle of the internals of the syscall() implementation macros.
Move the call up, directly into syscall(), to make the code simpler.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260405-nolibc-syscall-v1-2-e5b12bc63211@weissschuh.net
show more ...
|
| 3f5059f0 | 05-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: rename the internal macros used in syscall()
These macros are the internal implementation of syscall(). They can not be used by users. Align them with the standard naming scheme for in
tools/nolibc: rename the internal macros used in syscall()
These macros are the internal implementation of syscall(). They can not be used by users. Align them with the standard naming scheme for internal symbols.
The current name also prevents the addition of an application-usable _syscall() symbol.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260405-nolibc-syscall-v1-1-e5b12bc63211@weissschuh.net
show more ...
|
| 1e3c374e | 04-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: check for overflow in calloc() without divisions
On some architectures without native division instructions the division can generate calls into libgcc/compiler-rt. This library might
tools/nolibc: check for overflow in calloc() without divisions
On some architectures without native division instructions the division can generate calls into libgcc/compiler-rt. This library might not be available, so its use should be avoided.
Use the compiler builtin to check for overflows without needing a division. The builtin has been available since GCC 3 and clang 3.8.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260404-nolibc-asprintf-v2-1-17d2d0df9763@weissschuh.net
show more ...
|
| 12496aad | 01-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: add support for asprintf()
Add support for dynamically allocating formatted strings through asprintf() and vasprintf().
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by
tools/nolibc: add support for asprintf()
Add support for dynamically allocating formatted strings through asprintf() and vasprintf().
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260401-nolibc-asprintf-v1-3-46292313439f@weissschuh.net
show more ...
|
| fd2e9f82 | 01-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: use __builtin_offsetof()
The current custom implementation of offsetof() fails UBSAN: runtime error: member access within null pointer of type 'struct ...' This means that all its user
tools/nolibc: use __builtin_offsetof()
The current custom implementation of offsetof() fails UBSAN: runtime error: member access within null pointer of type 'struct ...' This means that all its users, including container_of(), free() and realloc(), fail.
Use __builtin_offsetof() instead which does not have this issue and has been available since GCC 4 and clang 3.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260401-nolibc-asprintf-v1-1-46292313439f@weissschuh.net
show more ...
|
| 867fb336 | 04-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: use makedev() in fstatat()
fstatat() contains two open-coded copies of makedev() to handle minor numbers >= 256. Now that the regular makedev() handles both large minor and major numbe
tools/nolibc: use makedev() in fstatat()
fstatat() contains two open-coded copies of makedev() to handle minor numbers >= 256. Now that the regular makedev() handles both large minor and major numbers correctly use the common function.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260404-nolibc-makedev-v2-6-456a429bf60c@weissschuh.net
show more ...
|
| 572246dc | 04-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: handle all major and minor numbers in makedev() and friends
Remove the limitation of only handling small major and minor numbers.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net
tools/nolibc: handle all major and minor numbers in makedev() and friends
Remove the limitation of only handling small major and minor numbers.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260404-nolibc-makedev-v2-5-456a429bf60c@weissschuh.net
show more ...
|
| df4ef52c | 04-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: make dev_t 64 bits wide
statx() returns both 32-bit minor and major numbers. For both of them to fit into the 'dev_t' in 'struct stat', that needs to be 64 bits wide.
The other uses o
tools/nolibc: make dev_t 64 bits wide
statx() returns both 32-bit minor and major numbers. For both of them to fit into the 'dev_t' in 'struct stat', that needs to be 64 bits wide.
The other uses of 'dev_t' in nolibc are makedev() and friends and mknod(). makedev() and friends are going to be adapted in an upcoming commit and mknod() will silently truncate 'dev_t' to 'unsigned int' in the kernel, similar to other libcs.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260404-nolibc-makedev-v2-4-456a429bf60c@weissschuh.net
show more ...
|
| 70091ead | 04-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: move the logic of makedev() and friends into functions
Functions make it easier to keep the input and output types straight and avoid duplicate evaluations of their arguments.
Also th
tools/nolibc: move the logic of makedev() and friends into functions
Functions make it easier to keep the input and output types straight and avoid duplicate evaluations of their arguments.
Also these functions will become a bit more complex to handle full 64-bit 'dev_t' which is easier to read in a function.
Still stay compatible with code which expects these to be macros.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260404-nolibc-makedev-v2-3-456a429bf60c@weissschuh.net
show more ...
|
| 7933969e | 01-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: explicitly list architecture headers
Relying on $(wildcard) is brittle and non-deterministic.
similar to all the other headers. Switch the list of architecture headers to an explicit
tools/nolibc: explicitly list architecture headers
Relying on $(wildcard) is brittle and non-deterministic.
similar to all the other headers. Switch the list of architecture headers to an explicit list,
Link: https://patch.msgid.link/20260401-nolibc-cleanup-v1-4-bcf4c9f5c1be@weissschuh.net Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
show more ...
|
| b972b37c | 01-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: drop superfluous definition of Q
Q is already defined by tools/scripts/Makefile.include which is included at the top of tools/include/nolibc/Makefile.
Signed-off-by: Thomas Weißschuh
tools/nolibc: drop superfluous definition of Q
Q is already defined by tools/scripts/Makefile.include which is included at the top of tools/include/nolibc/Makefile.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Link: https://patch.msgid.link/20260401-nolibc-cleanup-v1-3-bcf4c9f5c1be@weissschuh.net
show more ...
|
| 010d03d0 | 01-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: drop superfluous invocation of mkdir
The call to 'mkdir -p $(OUTPUT)sysroot/include' will also create the sysroot directory.
Drop the unnecessary explicit invocation of mkdir.
Signed
tools/nolibc: drop superfluous invocation of mkdir
The call to 'mkdir -p $(OUTPUT)sysroot/include' will also create the sysroot directory.
Drop the unnecessary explicit invocation of mkdir.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Link: https://patch.msgid.link/20260401-nolibc-cleanup-v1-2-bcf4c9f5c1be@weissschuh.net
show more ...
|
| 5bf4b30e | 01-Apr-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: drop superfluous invocation of 'make headers'
The headers_install target of the toplevel Makefile will already make sure that the headers are up-to-date.
Drop the superfluous explicit
tools/nolibc: drop superfluous invocation of 'make headers'
The headers_install target of the toplevel Makefile will already make sure that the headers are up-to-date.
Drop the superfluous explicit invocation.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Link: https://patch.msgid.link/20260401-nolibc-cleanup-v1-1-bcf4c9f5c1be@weissschuh.net
show more ...
|
| 1dff9ac2 | 23-Mar-2026 |
David Laight <david.laight.linux@gmail.com> |
tools/nolibc/printf: Support negative variable width and precision
For (eg) "%*.*s" treat a negative field width as a request to left align the output (the same as the '-' flag), and a negative prec
tools/nolibc/printf: Support negative variable width and precision
For (eg) "%*.*s" treat a negative field width as a request to left align the output (the same as the '-' flag), and a negative precision to request the default precision.
Set the default precision to -1 (not INT_MAX) and add explicit checks to the string handling for negative values (makes the tet unsigned).
For numeric output check for 'precision >= 0' instead of testing _NOLIBC_PF_FLAGS_CONTAIN(flags, '.'). This needs an inverted test, some extra goto and removes an indentation. The changed conditionals fix printf("%0-#o", 0) - but '0' and '-' shouldn't both be specified.
Signed-off-by: David Laight <david.laight.linux@gmail.com> Link: https://patch.msgid.link/20260323112247.3196-1-david.laight.linux@gmail.com Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
show more ...
|
| 6285f088 | 19-Mar-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: rename sys_foo() functions to _sys_foo()
The sys_foo() naming scheme used by the syscall wrappers may collide with application symbols. Especially as 'sys_' is an obvious naming scheme
tools/nolibc: rename sys_foo() functions to _sys_foo()
The sys_foo() naming scheme used by the syscall wrappers may collide with application symbols. Especially as 'sys_' is an obvious naming scheme an application may choose for its own custom systemcall wrappers.
Avoid these conflicts by using an leading underscore which moves the names into the implementation's namespace. This naming scheme was chosen over a '__nolibc_' prefix, as these functions are not an implementation detail but a documented interface meant to be used by applications.
While this may break some existing users, adapting them should be straightforward. Given that nolibc is most-likely vendored, no unexpected breakage should happen. No in-tree users are affected.
These conflicts happen when compiling some of the kernel selftests with nolibc.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260319-nolibc-namespacing-v1-1-33c22eaddb5e@weissschuh.net
show more ...
|
| 3eb97c4c | 18-Mar-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: avoid -Wundef warning for __STDC_VERSION__
With -std=c89 the macro __STDC_VERSION__ is not defined. While undefined identifiers in '#if' directives are assumed to be '0', with -Wundef
tools/nolibc: avoid -Wundef warning for __STDC_VERSION__
With -std=c89 the macro __STDC_VERSION__ is not defined. While undefined identifiers in '#if' directives are assumed to be '0', with -Wundef a warning is emitted.
Avoid the warning by explicitly falling back to '0' if __STDC_VERSION__ is not provided by the preprocessor.
Fixes: 37219aa5b123 ("tools/nolibc: add __nolibc_static_assert()") Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260318-nolibc-wundef-v1-1-fcb7f9ac7298@weissschuh.net
show more ...
|
| 9da0f529 | 18-Mar-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: add err.h
Add a few convenient helpers to print error and warning messages.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://pat
tools/nolibc: add err.h
Add a few convenient helpers to print error and warning messages.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260318-nolibc-err-h-v4-2-08247a694bd9@weissschuh.net
show more ...
|
| b74be922 | 18-Mar-2026 |
Thomas Weißschuh <linux@weissschuh.net> |
tools/nolibc: add support for program_invocation_{,short_}name
Add support for the GNU extensions 'program_invocation_name' and 'program_invocation_short_name'. These are useful to print error messa
tools/nolibc: add support for program_invocation_{,short_}name
Add support for the GNU extensions 'program_invocation_name' and 'program_invocation_short_name'. These are useful to print error messages, which by convention include the program name.
As these are global variables which take up memory even if not used, similar to 'errno', gate them behind NOLIBC_IGNORE_ERRNO.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260318-nolibc-err-h-v4-1-08247a694bd9@weissschuh.net
show more ...
|
| e83b07dc | 17-Mar-2026 |
Thomas Weißschuh <thomas.weissschuh@linutronix.de> |
tools/nolibc: MIPS: fix clobbers of 'lo' and 'hi' registers on different ISAs
All MIPS ISAs before r6 use the 'lo' and 'hi' special registers. These are clobbered by system calls and need to be mark
tools/nolibc: MIPS: fix clobbers of 'lo' and 'hi' registers on different ISAs
All MIPS ISAs before r6 use the 'lo' and 'hi' special registers. These are clobbered by system calls and need to be marked as such to avoid miscompilations. Currently nolibc ties the clobbers to the ABI. But this is wrong and leads to ISA<->ABI combinations which are not handled correctly, leading to compiler errors or miscompilations.
Handle all different combinations of ABI and ISA.
Fixes: a6a2a8a42972 ("tools/nolibc: MIPS: add support for N64 and N32 ABIs") Fixes: 66b6f755ad45 ("rcutorture: Import a copy of nolibc") Suggested-by: Maciej W. Rozycki <macro@orcam.me.uk> Link: https://lore.kernel.org/lkml/alpine.DEB.2.21.2603141744240.55200@angie.orcam.me.uk/ Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Link: https://patch.msgid.link/20260317-nolibc-mips-clobber-v2-1-5b9a97761a9e@linutronix.de Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
show more ...
|
| 248c7cf6 | 08-Mar-2026 |
David Laight <david.laight.linux@gmail.com> |
tools/nolibc/printf: Add support for octal output
Octal output isn't often used, but adding it costs very little.
Supporting "%#o" is mildly annoying, it has to add a leading '0' if there isn't one
tools/nolibc/printf: Add support for octal output
Octal output isn't often used, but adding it costs very little.
Supporting "%#o" is mildly annoying, it has to add a leading '0' if there isn't one present. In simple cases this is the same as adding a sign of '0' - but that adds an extra '0' in a few places. So you need 3 tests, %o, # and no leading '0' (which can only be checked after the zero pad for precision). If all the test are deferred until after zero padding then too many values are 'live' across the call to _nolibc_u64toa_base() and get spilled to stack. Hence the check that ignores the 'sign' if it is the same as the first character of the output string.
Add tests for octal output.
Signed-off-by: David Laight <david.laight.linux@gmail.com> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260308113742.12649-17-david.laight.linux@gmail.com [Thomas: avoid a -Wsign-compare] Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
show more ...
|
| d3d3f64f | 08-Mar-2026 |
David Laight <david.laight.linux@gmail.com> |
tools/nolibc/printf: Add support for zero padding and field precision
Includes support for variable field widths (eg "%*.*d").
Zero padding is limited to 31 zero characters. This is wider than the
tools/nolibc/printf: Add support for zero padding and field precision
Includes support for variable field widths (eg "%*.*d").
Zero padding is limited to 31 zero characters. This is wider than the largest numeric field so shouldn't be a problem.
All the standard printf formats are now supported except octal and floating point.
Add tests for new features
Signed-off-by: David Laight <david.laight.linux@gmail.com> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260308113742.12649-16-david.laight.linux@gmail.com [Thomas: fixup testcases for musl libc] Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
show more ...
|