Re: [PATCH] selftests/nolibc: Fix build with host headers and libc

From: David Laight

Date: Wed Feb 18 2026 - 17:51:58 EST


On Wed, 18 Feb 2026 18:23:33 +0100
Thomas Weißschuh <linux@xxxxxxxxxxxxxx> wrote:

> On 2026-02-16 22:21:18+0000, David Laight wrote:
> > On Mon, 16 Feb 2026 19:51:24 +0100
> > Thomas Weißschuh <linux@xxxxxxxxxxxxxx> wrote:
> >
> > > On 2026-02-14 11:57:24+0000, david.laight.linux@xxxxxxxxx wrote:
> > > > From: David Laight <david.laight.linux@xxxxxxxxx>
> > > >
> > > > Many systems don't have strlcpy() or strlcat().
> > > > Change is_nolibc to a #define so that the calls are optimised out.
> > > > Create #define wrappers so the code is syntactially valid.
> > > >
> > > > Additionall readdir_r() is likely to be marked deprecated.
> > >
> > > "Additionally"
> > >
> > > > So disable "-Wdeprecated-declarations".
> > >
> > > Could you split this into multiple patches?
> > >
> > > > Fixes: 6fe8360b16acb ("selftests/nolibc: also test libc-test through regular selftest framework")
> > > > Signed-off-by: David Laight <david.laight.linux@xxxxxxxxx>
> > > > ---
> > > > tools/testing/selftests/nolibc/nolibc-test.c | 13 +++++++++----
> > > > 1 file changed, 9 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c
> > > > index 1b9d3b2e2491..eb2421b42e75 100644
> > > > --- a/tools/testing/selftests/nolibc/nolibc-test.c
> > > > +++ b/tools/testing/selftests/nolibc/nolibc-test.c
> > > > @@ -66,13 +66,18 @@ static const char *argv0;
> > > > /* will be used by constructor tests */
> > > > static int constructor_test_value;
> > > >
> > > > -static const int is_nolibc =
> > > > #ifdef NOLIBC
> > > > - 1
> > > > +#define is_nolibc 1
> > > > #else
> > > > - 0
> > > > +#define is_nolibc 0
> > > > +/* strlcat() and strlcpy() may not be in the system headers. */
> > > > +#undef strlcat
> > > > +#undef strlcpy
> > > > +#define strlcat(d, s, l) 0
> > > > +#define strlcpy(d, s, l) 0
> > > > +/* readdir_r() is likely to be marked deprecated */
> > > > +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
> > > > #endif
> > >
> > > I'd prefer to disable this via $(cc-option) in the Makefile.
> > > Unknown pragmas tend to introduce more warnings.
> >
> > There is already a similar pragma in the file and this one isn't a new one warning.
>
> Fair enough, then this is fine. Maybe I'll clean it up at some point.

That one is actually to avoid the warnings for a visible function with no prototype.

The readir_r() test is probably best made is_nolibc only and a #define used
so that the code compiles.
Changing is_nolibc to #define isn't enough to help either.
It isn't needed if the strcpy/strlcat/readdir_r are #defined away.

David


>
> (...)