Make va_*() macros available to the kernel in <sys/stdarg.h>.
authorSascha Wildner <saw@online.de>
Wed, 10 Jul 2019 18:41:14 +0000 (20:41 +0200)
committerSascha Wildner <saw@online.de>
Wed, 10 Jul 2019 18:41:14 +0000 (20:41 +0200)
Previously, the kernel was restricted to __va_*() only but I can't see
any real reason to do that and it also forces stuff like ACPICA and
drm to use workarounds. Those will be cleaned up in subsequent commits.

For now, I've used <sys/stdarg.h>, because everything resolves to
__builtin_va*() in the end. If we ever need more machine specific
definitions, it has to be moved to <machine/stdarg.h>.

include/stdarg.h
sys/sys/stdarg.h [copied from include/stdarg.h with 90% similarity]

index c1bb067..55b2615 100644 (file)
 #ifndef _STDARG_H_
 #define _STDARG_H_
 
-#ifndef        _SYS_CDEFS_H_
-#include <sys/cdefs.h>
-#endif
+#include <sys/stdarg.h>
 
-#include <machine/stdarg.h>
-
-#ifndef _VA_LIST_DECLARED
-typedef        __va_list       va_list;
-#define        _VA_LIST_DECLARED
-#endif
-
-#define va_start(ap, last)     __va_start(ap, last)
-#define va_arg(ap, type)       __va_arg(ap, type)
-/* __STRICT_ANSI__ case is for compatibility with other implementations */
-#if __ISO_C_VISIBLE >= 1999 || __cplusplus >= 201103L || !defined(__STRICT_ANSI__)
-#define va_copy(dest, src)     __va_copy(dest, src)
-#endif
-#define va_end(ap)             __va_end(ap)
-
-#endif
+#endif /* !_STDARG_H_ */
 
similarity index 90%
copy from include/stdarg.h
copy to sys/sys/stdarg.h
index c1bb067..d138dfd 100644 (file)
  * SUCH DAMAGE.
  */
 
-#ifndef _STDARG_H_
-#define _STDARG_H_
+#ifndef _SYS_STDARG_H_
+#define _SYS_STDARG_H_
 
-#ifndef        _SYS_CDEFS_H_
 #include <sys/cdefs.h>
-#endif
 
 #include <machine/stdarg.h>
 
@@ -41,10 +39,9 @@ typedef      __va_list       va_list;
 #define va_start(ap, last)     __va_start(ap, last)
 #define va_arg(ap, type)       __va_arg(ap, type)
 /* __STRICT_ANSI__ case is for compatibility with other implementations */
-#if __ISO_C_VISIBLE >= 1999 || __cplusplus >= 201103L || !defined(__STRICT_ANSI__)
+#if defined(_KERNEL) || __ISO_C_VISIBLE >= 1999 || __cplusplus >= 201103L || !defined(__STRICT_ANSI__)
 #define va_copy(dest, src)     __va_copy(dest, src)
 #endif
 #define va_end(ap)             __va_end(ap)
 
-#endif
-
+#endif /* !_SYS_STDARG_H_ */