X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fginclude%2Fvarargs.h;h=098094cdd7b86d61d5d743da5541066ca671d336;hb=cfc95f868f2f76dd7c965692ab57dd4a4b01fee9;hp=7df05ae7e5ec7b2628524cef53195b1c49cdb5fb;hpb=acc048787315f5158a1c304dfe9e1aca3f400095;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/ginclude/varargs.h b/gcc/ginclude/varargs.h index 7df05ae7e5e..098094cdd7b 100644 --- a/gcc/ginclude/varargs.h +++ b/gcc/ginclude/varargs.h @@ -1,40 +1,32 @@ -#ifndef __GNUC__ -/* Use the system's macros with the system's compiler. */ -#include -#else -/* Record that this is varargs.h; this turns off stdarg.h. */ +/* 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 __sparc__ -#include -#else -#ifdef __spur__ -#include -#else -#ifdef __mips__ -#include -#else -#ifdef __i860__ -#include -#else -#ifdef __pyr__ -#include -#else -#ifdef __m88k__ -#include -#else -#if defined(__hppa__) || defined(hp800) -#include -#else -#ifdef __i960__ -#include -#else -#ifdef __alpha__ -#include -#else - #ifdef __NeXT__ /* On Next, erase any vestiges of stdarg.h. */ @@ -49,58 +41,32 @@ #undef va_list #undef va_start #undef va_end -#undef __va_rounded_size #undef va_arg #endif /* __NeXT__ */ -/* In GCC version 2, we want an ellipsis at the end of the declaration - of the argument list. GCC version 1 can't parse it. */ - -#if __GNUC__ > 1 -#define __va_ellipsis ... -#else -#define __va_ellipsis -#endif - /* These macros implement traditional (non-ANSI) varargs for GNU C. */ #define va_alist __builtin_va_alist -/* The ... causes current_function_varargs to be set in cc1. */ -#define va_dcl int __builtin_va_alist; __va_ellipsis -/* Define __gnuc_va_list, just as in gstdarg.h. */ +/* ??? 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 -#ifdef __svr4__ -typedef char *__gnuc_va_list; -#else -typedef void *__gnuc_va_list; +typedef __builtin_va_list __gnuc_va_list; #endif -#endif - -#define va_start(AP) AP=(char *) &__builtin_va_alist -#define va_end(AP) - -#define __va_rounded_size(TYPE) \ - (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) - -#define va_arg(AP, TYPE) \ - (AP += __va_rounded_size (TYPE), \ - *((TYPE *) (AP - __va_rounded_size (TYPE)))) - -#endif /* not alpha */ -#endif /* not i960 */ -#endif /* not hppa */ -#endif /* not m88k */ -#endif /* not pyr */ -#endif /* not i860 */ -#endif /* not mips */ -#endif /* not spur */ -#endif /* not sparc */ -#endif /* not _VARARGS_H */ +#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. */ @@ -108,28 +74,66 @@ typedef void *__gnuc_va_list; #undef _VA_LIST #endif -/* In 4.3bsd-net2, _VA_LIST_ is defined by machine/ansi.h, but no - typedef for va_list is in that file. Undef _VA_LIST_ here - so we do define va_list. */ -#ifdef _ANSI_H_ -#undef _VA_LIST_ +#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_ */ -/* The macro _VA_LIST_ is the same thing used by this file in Ultrix. */ -#ifndef _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 at Thu Sep 30 11:00:57 1993: + Sequent defines _VA_LIST_ in 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 -typedef __gnuc_va_list va_list; -#endif /* _VA_LIST */ -#endif /* _VA_LIST_ */ - -/* I think that in 4.3bsd-net2 there is some need - to leave _VA_LIST_ undefined after. I don't know why. -- rms. */ -#ifdef _ANSI_H_ -#undef _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_. */ @@ -137,4 +141,4 @@ typedef __gnuc_va_list va_list; #undef _BSD_VA_LIST #endif -#endif /* __GNUC__ */ +#endif /* _VARARGS_H */