tools/nolibc: add stdarg.h header

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@weissschuh.net>
Signed-off-by: Willy Tarreau <w@1wt.eu>
This commit is contained in:
Thomas Weißschuh 2023-08-30 17:07:12 +02:00
parent 921992229b
commit b56a9492d0
5 changed files with 21 additions and 5 deletions

View file

@ -34,6 +34,7 @@ all_files := \
signal.h \
stackprotector.h \
std.h \
stdarg.h \
stdint.h \
stdlib.h \
string.h \

View file

@ -74,10 +74,10 @@
* -I../nolibc -o hello hello.c -lgcc
*
* The available standard (but limited) include files are:
* ctype.h, errno.h, signal.h, stdio.h, stdlib.h, string.h, time.h
* ctype.h, errno.h, signal.h, stdarg.h, stdio.h, stdlib.h, string.h, time.h
*
* In addition, the following ones are expected to be provided by the compiler:
* float.h, stdarg.h, stddef.h
* float.h, stddef.h
*
* The following ones which are part to the C standard are not provided:
* assert.h, locale.h, math.h, setjmp.h, limits.h

View file

@ -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 */

View file

@ -7,13 +7,12 @@
#ifndef _NOLIBC_STDIO_H
#define _NOLIBC_STDIO_H
#include <stdarg.h>
#include "std.h"
#include "arch.h"
#include "errno.h"
#include "types.h"
#include "sys.h"
#include "stdarg.h"
#include "stdlib.h"
#include "string.h"

View file

@ -7,7 +7,6 @@
#ifndef _NOLIBC_SYS_H
#define _NOLIBC_SYS_H
#include <stdarg.h>
#include "std.h"
/* system includes */
@ -25,6 +24,7 @@
#include "arch.h"
#include "errno.h"
#include "stdarg.h"
#include "types.h"