On Sun, Aug 27, 2023 at 10:00:15AM +0200, Thomas Weißschuh wrote: > This allows nolic to work with `-nostdinc` avoiding any reliance on > system headers. > > The implementation has been lifted from musl libc 1.2.4. > There is already an implementation of stdarg.h in include/linux/stdarg.h > but that is GPL licensed and therefore not suitable for nolibc. > > The used compiler builtins have been validated to be at least available > since GCC 4.1.2 and clang 3.0.0. > > Signed-off-by: Thomas Weißschuh <linux@xxxxxxxxxxxxxx> > --- > tools/include/nolibc/Makefile | 1 + > tools/include/nolibc/stdarg.h | 16 ++++++++++++++++ > 2 files changed, 17 insertions(+) > > diff --git a/tools/include/nolibc/Makefile b/tools/include/nolibc/Makefile > index 909b6eb500fe..e69c26abe1ea 100644 > --- a/tools/include/nolibc/Makefile > +++ b/tools/include/nolibc/Makefile > @@ -34,6 +34,7 @@ all_files := \ > signal.h \ > stackprotector.h \ > std.h \ > + stdarg.h \ > stdint.h \ > stdlib.h \ > string.h \ > diff --git a/tools/include/nolibc/stdarg.h b/tools/include/nolibc/stdarg.h > new file mode 100644 > index 000000000000..c628b5783da6 > --- /dev/null > +++ b/tools/include/nolibc/stdarg.h > @@ -0,0 +1,16 @@ > +/* SPDX-License-Identifier: LGPL-2.1 OR MIT */ > +/* > + * Variadic argument support for NOLIBC > + * Copyright (C) 2005-2020 Rich Felker, et al. > + */ > + > +#ifndef _NOLIBC_STDARG_H > +#define _NOLIBC_STDARG_H > + > +typedef __builtin_va_list va_list; > +#define va_start(v, l) __builtin_va_start(v, l) > +#define va_end(v) __builtin_va_end(v) > +#define va_arg(v, l) __builtin_va_arg(v, l) > +#define va_copy(d, s) __builtin_va_copy(d, s) > + > +#endif /* _NOLIBC_STDARG_H */ Now with your other explanation I agree, however we need to change: #include <stdarg.h> to #include "stdarg.h" in stdio.h and sys.h so that we always use ours from now on. Willy