Commit b56a9492 authored by Thomas Weißschuh's avatar Thomas Weißschuh
Browse files

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: default avatarThomas Weißschuh <linux@weissschuh.net>
Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
parent 92199222
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ all_files := \
		signal.h \
		stackprotector.h \
		std.h \
		stdarg.h \
		stdint.h \
		stdlib.h \
		string.h \
+2 −2
Original line number Diff line number Diff line
@@ -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
+16 −0
Original line number Diff line number Diff line
/* 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 */
+1 −2
Original line number Diff line number Diff line
@@ -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"

+1 −1
Original line number Diff line number Diff line
@@ -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"