| /* Copyright (C) 1989, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. |
| |
| This file is part of GNU CC. |
| |
| GNU CC is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU CC is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU CC; see the file COPYING. If not, write to |
| the Free Software Foundation, 59 Temple Place - Suite 330, |
| Boston, MA 02111-1307, USA. */ |
| |
| /* As a special exception, if you include this header file into source |
| files compiled by GCC, this header file does not by itself cause |
| the resulting executable to be covered by the GNU General Public |
| License. This exception does not however invalidate any other |
| reasons why the executable file might be covered by the GNU General |
| Public License. */ |
| |
| #ifndef _VARARGS_H |
| #define _VARARGS_H |
| |
| #ifdef __NeXT__ |
| |
| /* On Next, erase any vestiges of stdarg.h. */ |
| |
| #ifdef _ANSI_STDARG_H_ |
| #define _VA_LIST_ |
| #endif |
| #define _ANSI_STDARG_H_ |
| |
| #undef va_alist |
| #undef va_dcl |
| #undef va_list |
| #undef va_start |
| #undef va_end |
| #undef va_arg |
| #endif /* __NeXT__ */ |
| |
| /* These macros implement traditional (non-ANSI) varargs |
| for GNU C. */ |
| |
| #define va_alist __builtin_va_alist |
| |
| /* ??? We don't process attributes correctly in K&R argument context. */ |
| typedef int __builtin_va_alist_t __attribute__((__mode__(__word__))); |
| |
| /* ??? It would be nice to get rid of the ellipsis here. It causes |
| current_function_varargs to be set in cc1. */ |
| #define va_dcl __builtin_va_alist_t __builtin_va_alist; ... |
| |
| /* Define __gnuc_va_list, just as in stdarg.h. */ |
| |
| #ifndef __GNUC_VA_LIST |
| #define __GNUC_VA_LIST |
| typedef __builtin_va_list __gnuc_va_list; |
| #endif |
| |
| #define va_start(v) __builtin_varargs_start((v)) |
| #define va_end __builtin_va_end |
| #define va_arg __builtin_va_arg |
| #define __va_copy(d,s) __builtin_va_copy((d),(s)) |
| |
| /* Define va_list from __gnuc_va_list. */ |
| |
| #ifdef _HIDDEN_VA_LIST /* On OSF1, this means varargs.h is "half-loaded". */ |
| #undef _VA_LIST |
| #endif |
| |
| #if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST)) |
| /* SVR4.2 uses _VA_LIST for an internal alias for va_list, |
| so we must avoid testing it and setting it here. |
| SVR4 uses _VA_LIST as a flag in stdarg.h, but we should |
| have no conflict with that. */ |
| #ifndef _VA_LIST_ |
| #define _VA_LIST_ |
| #ifdef __i860__ |
| #ifndef _VA_LIST |
| #define _VA_LIST va_list |
| #endif |
| #endif /* __i860__ */ |
| typedef __gnuc_va_list va_list; |
| #ifdef _SCO_DS |
| #define __VA_LIST |
| #endif |
| #endif /* _VA_LIST_ */ |
| |
| #else /* not __svr4__ || _SCO_DS */ |
| |
| /* The macro _VA_LIST_ is the same thing used by this file in Ultrix. |
| But on BSD NET2 we must not test or define or undef it. |
| (Note that the comments in NET 2's ansi.h |
| are incorrect for _VA_LIST_--see stdio.h!) */ |
| /* Michael Eriksson <mer@sics.se> at Thu Sep 30 11:00:57 1993: |
| Sequent defines _VA_LIST_ in <machine/machtypes.h> to be the type to |
| use for va_list (``typedef _VA_LIST_ va_list'') */ |
| #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT) |
| /* The macro _VA_LIST_DEFINED is used in Windows NT 3.5 */ |
| #ifndef _VA_LIST_DEFINED |
| /* The macro _VA_LIST is used in SCO Unix 3.2. */ |
| #ifndef _VA_LIST |
| /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ |
| #ifndef _VA_LIST_T_H |
| /* The macro __va_list__ is used by BeOS. */ |
| #ifndef __va_list__ |
| typedef __gnuc_va_list va_list; |
| #endif /* not __va_list__ */ |
| #endif /* not _VA_LIST_T_H */ |
| #endif /* not _VA_LIST */ |
| #endif /* not _VA_LIST_DEFINED */ |
| #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__)) |
| #define _VA_LIST_ |
| #endif |
| #ifndef _VA_LIST |
| #define _VA_LIST |
| #endif |
| #ifndef _VA_LIST_DEFINED |
| #define _VA_LIST_DEFINED |
| #endif |
| #ifndef _VA_LIST_T_H |
| #define _VA_LIST_T_H |
| #endif |
| #ifndef __va_list__ |
| #define __va_list__ |
| #endif |
| |
| #endif /* not _VA_LIST_, except on certain systems */ |
| |
| #endif /* not __svr4__ */ |
| |
| /* The next BSD release (if there is one) wants this symbol to be |
| undefined instead of _VA_LIST_. */ |
| #ifdef _BSD_VA_LIST |
| #undef _BSD_VA_LIST |
| #endif |
| |
| #endif /* _VARARGS_H */ |