Fix varargs/stdarg on PowerPC Windows NT

From-SVN: r12637
This commit is contained in:
Michael Meissner 1996-08-14 15:49:57 +00:00
parent c7c27cd3e2
commit 06737be4a3
3 changed files with 58 additions and 3 deletions

View File

@ -38,7 +38,7 @@
#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__)
#include <va-h8300.h>
#else
#if defined (__PPC__) && defined (_CALL_SYSV)
#if defined (__PPC__) && (defined (_CALL_SYSV) || defined (__WIN32__))
#include <va-ppc.h>
#else
#ifdef __sh__

View File

@ -1,5 +1,7 @@
/* GNU C varargs support for the PowerPC with V.4 calling sequence */
/* GNU C varargs support for the PowerPC with either the V.4 or Windows NT calling sequences */
#ifndef __WIN32__
/* System V.4 support */
/* Define __gnuc_va_list. */
#ifndef __GNUC_VA_LIST
@ -167,3 +169,56 @@ __extension__ (*({ \
#define va_end(AP) ((void)0)
#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
#else
/* Windows NT */
/* Define __gnuc_va_list. */
#ifndef __GNUC_VA_LIST
#define __GNUC_VA_LIST
typedef char *__gnuc_va_list;
#endif /* not __GNUC_VA_LIST */
/* If this is for internal libc use, don't define anything but
__gnuc_va_list. */
#if defined (_STDARG_H) || defined (_VARARGS_H)
#define __va_start_common(AP, LASTARG, FAKE) \
((__builtin_saveregs ()), ((AP) = ((char *) &LASTARG) + __va_rounded_size (AP)), 0)
#ifdef _STDARG_H /* stdarg.h support */
/* Calling __builtin_next_arg gives the proper error message if LASTARG is
not indeed the last argument. */
#define va_start(AP,LASTARG) \
(__builtin_saveregs (), \
(AP) = __builtin_next_arg (LASTARG), \
0)
#else /* varargs.h support */
#define va_start(AP) \
(__builtin_saveregs (), \
(AP) = __builtin_next_arg (__va_1st_arg) - sizeof (int), \
0)
#define va_alist __va_1st_arg
#define va_dcl register int __va_1st_arg; ...
#endif /* _STDARG_H */
#define __va_rounded_size(TYPE) ((sizeof (TYPE) + 3) & ~3)
#define __va_align(AP, TYPE) \
((((unsigned long)(AP)) + ((sizeof (TYPE) >= 8) ? 7 : 3)) \
& ~((sizeof (TYPE) >= 8) ? 7 : 3))
#define va_arg(AP,TYPE) \
( *(TYPE *)((AP = (char *) (__va_align(AP, TYPE) \
+ __va_rounded_size(TYPE))) \
- __va_rounded_size(TYPE)))
#define va_end(AP) ((void)0)
#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
#endif /* Windows NT */

View File

@ -36,7 +36,7 @@
#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__)
#include <va-h8300.h>
#else
#if defined (__PPC__) && defined (_CALL_SYSV)
#if defined (__PPC__) && (defined (_CALL_SYSV) || defined (__WIN32__))
#include <va-ppc.h>
#else
#ifdef __sh__