xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/sys/cdefs.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* Copyright (C) 1992-2001, 2002, 2004, 2005, 2006, 2007
2*53ee8cc1Swenshuai.xi    Free Software Foundation, Inc.
3*53ee8cc1Swenshuai.xi    This file is part of the GNU C Library.
4*53ee8cc1Swenshuai.xi 
5*53ee8cc1Swenshuai.xi    The GNU C Library is free software; you can redistribute it and/or
6*53ee8cc1Swenshuai.xi    modify it under the terms of the GNU Lesser General Public
7*53ee8cc1Swenshuai.xi    License as published by the Free Software Foundation; either
8*53ee8cc1Swenshuai.xi    version 2.1 of the License, or (at your option) any later version.
9*53ee8cc1Swenshuai.xi 
10*53ee8cc1Swenshuai.xi    The GNU C Library is distributed in the hope that it will be useful,
11*53ee8cc1Swenshuai.xi    but WITHOUT ANY WARRANTY; without even the implied warranty of
12*53ee8cc1Swenshuai.xi    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13*53ee8cc1Swenshuai.xi    Lesser General Public License for more details.
14*53ee8cc1Swenshuai.xi 
15*53ee8cc1Swenshuai.xi    You should have received a copy of the GNU Lesser General Public
16*53ee8cc1Swenshuai.xi    License along with the GNU C Library; if not, write to the Free
17*53ee8cc1Swenshuai.xi    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18*53ee8cc1Swenshuai.xi    02111-1307 USA.  */
19*53ee8cc1Swenshuai.xi 
20*53ee8cc1Swenshuai.xi #ifndef	_SYS_CDEFS_H
21*53ee8cc1Swenshuai.xi #define	_SYS_CDEFS_H	1
22*53ee8cc1Swenshuai.xi 
23*53ee8cc1Swenshuai.xi /* We are almost always included from features.h. */
24*53ee8cc1Swenshuai.xi #ifndef _FEATURES_H
25*53ee8cc1Swenshuai.xi # include <features.h>
26*53ee8cc1Swenshuai.xi #endif
27*53ee8cc1Swenshuai.xi 
28*53ee8cc1Swenshuai.xi /* The GNU libc does not support any K&R compilers or the traditional mode
29*53ee8cc1Swenshuai.xi    of ISO C compilers anymore.  Check for some of the combinations not
30*53ee8cc1Swenshuai.xi    anymore supported.  */
31*53ee8cc1Swenshuai.xi #if defined __GNUC__ && !defined __STDC__
32*53ee8cc1Swenshuai.xi # error "You need a ISO C conforming compiler to use the glibc headers"
33*53ee8cc1Swenshuai.xi #endif
34*53ee8cc1Swenshuai.xi 
35*53ee8cc1Swenshuai.xi /* Some user header file might have defined this before.  */
36*53ee8cc1Swenshuai.xi #undef	__P
37*53ee8cc1Swenshuai.xi #undef	__PMT
38*53ee8cc1Swenshuai.xi 
39*53ee8cc1Swenshuai.xi #ifdef __GNUC__
40*53ee8cc1Swenshuai.xi 
41*53ee8cc1Swenshuai.xi /* GCC can always grok prototypes.  For C++ programs we add throw()
42*53ee8cc1Swenshuai.xi    to help it optimize the function calls.  But this works only with
43*53ee8cc1Swenshuai.xi    gcc 2.8.x and egcs.  For gcc 3.2 and up we even mark C functions
44*53ee8cc1Swenshuai.xi    as non-throwing using a function attribute since programs can use
45*53ee8cc1Swenshuai.xi    the -fexceptions options for C code as well.  */
46*53ee8cc1Swenshuai.xi # if !defined __cplusplus && __GNUC_PREREQ (3, 3)
47*53ee8cc1Swenshuai.xi #  define __THROW	__attribute__ ((__nothrow__))
48*53ee8cc1Swenshuai.xi #  define __NTH(fct)	__attribute__ ((__nothrow__)) fct
49*53ee8cc1Swenshuai.xi # else
50*53ee8cc1Swenshuai.xi #  if defined __cplusplus && __GNUC_PREREQ (2,8)
51*53ee8cc1Swenshuai.xi #   define __THROW	throw ()
52*53ee8cc1Swenshuai.xi #   define __NTH(fct)	fct throw ()
53*53ee8cc1Swenshuai.xi #  else
54*53ee8cc1Swenshuai.xi #   define __THROW
55*53ee8cc1Swenshuai.xi #   define __NTH(fct)	fct
56*53ee8cc1Swenshuai.xi #  endif
57*53ee8cc1Swenshuai.xi # endif
58*53ee8cc1Swenshuai.xi 
59*53ee8cc1Swenshuai.xi #else	/* Not GCC.  */
60*53ee8cc1Swenshuai.xi 
61*53ee8cc1Swenshuai.xi # define __inline		/* No inline functions.  */
62*53ee8cc1Swenshuai.xi 
63*53ee8cc1Swenshuai.xi # define __THROW
64*53ee8cc1Swenshuai.xi # define __NTH(fct)	fct
65*53ee8cc1Swenshuai.xi 
66*53ee8cc1Swenshuai.xi # define __const	const
67*53ee8cc1Swenshuai.xi # define __signed	signed
68*53ee8cc1Swenshuai.xi # define __volatile	volatile
69*53ee8cc1Swenshuai.xi 
70*53ee8cc1Swenshuai.xi #endif	/* GCC.  */
71*53ee8cc1Swenshuai.xi 
72*53ee8cc1Swenshuai.xi /* These two macros are not used in glibc anymore.  They are kept here
73*53ee8cc1Swenshuai.xi    only because some other projects expect the macros to be defined.  */
74*53ee8cc1Swenshuai.xi #define __P(args)	args
75*53ee8cc1Swenshuai.xi #define __PMT(args)	args
76*53ee8cc1Swenshuai.xi 
77*53ee8cc1Swenshuai.xi /* For these things, GCC behaves the ANSI way normally,
78*53ee8cc1Swenshuai.xi    and the non-ANSI way under -traditional.  */
79*53ee8cc1Swenshuai.xi 
80*53ee8cc1Swenshuai.xi #define __CONCAT(x,y)	x ## y
81*53ee8cc1Swenshuai.xi #define __STRING(x)	#x
82*53ee8cc1Swenshuai.xi 
83*53ee8cc1Swenshuai.xi /* This is not a typedef so `const __ptr_t' does the right thing.  */
84*53ee8cc1Swenshuai.xi #define __ptr_t void *
85*53ee8cc1Swenshuai.xi #define __long_double_t  long double
86*53ee8cc1Swenshuai.xi 
87*53ee8cc1Swenshuai.xi 
88*53ee8cc1Swenshuai.xi /* C++ needs to know that types and declarations are C, not C++.  */
89*53ee8cc1Swenshuai.xi #ifdef	__cplusplus
90*53ee8cc1Swenshuai.xi # define __BEGIN_DECLS	extern "C" {
91*53ee8cc1Swenshuai.xi # define __END_DECLS	}
92*53ee8cc1Swenshuai.xi #else
93*53ee8cc1Swenshuai.xi # define __BEGIN_DECLS
94*53ee8cc1Swenshuai.xi # define __END_DECLS
95*53ee8cc1Swenshuai.xi #endif
96*53ee8cc1Swenshuai.xi 
97*53ee8cc1Swenshuai.xi 
98*53ee8cc1Swenshuai.xi /* The standard library needs the functions from the ISO C90 standard
99*53ee8cc1Swenshuai.xi    in the std namespace.  At the same time we want to be safe for
100*53ee8cc1Swenshuai.xi    future changes and we include the ISO C99 code in the non-standard
101*53ee8cc1Swenshuai.xi    namespace __c99.  The C++ wrapper header take case of adding the
102*53ee8cc1Swenshuai.xi    definitions to the global namespace.  */
103*53ee8cc1Swenshuai.xi #if defined __cplusplus && defined _GLIBCPP_USE_NAMESPACES
104*53ee8cc1Swenshuai.xi # define __BEGIN_NAMESPACE_STD	namespace std {
105*53ee8cc1Swenshuai.xi # define __END_NAMESPACE_STD	}
106*53ee8cc1Swenshuai.xi # define __USING_NAMESPACE_STD(name) using std::name;
107*53ee8cc1Swenshuai.xi # define __BEGIN_NAMESPACE_C99	namespace __c99 {
108*53ee8cc1Swenshuai.xi # define __END_NAMESPACE_C99	}
109*53ee8cc1Swenshuai.xi # define __USING_NAMESPACE_C99(name) using __c99::name;
110*53ee8cc1Swenshuai.xi #else
111*53ee8cc1Swenshuai.xi /* For compatibility we do not add the declarations into any
112*53ee8cc1Swenshuai.xi    namespace.  They will end up in the global namespace which is what
113*53ee8cc1Swenshuai.xi    old code expects.  */
114*53ee8cc1Swenshuai.xi # define __BEGIN_NAMESPACE_STD
115*53ee8cc1Swenshuai.xi # define __END_NAMESPACE_STD
116*53ee8cc1Swenshuai.xi # define __USING_NAMESPACE_STD(name)
117*53ee8cc1Swenshuai.xi # define __BEGIN_NAMESPACE_C99
118*53ee8cc1Swenshuai.xi # define __END_NAMESPACE_C99
119*53ee8cc1Swenshuai.xi # define __USING_NAMESPACE_C99(name)
120*53ee8cc1Swenshuai.xi #endif
121*53ee8cc1Swenshuai.xi 
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi /* Support for bounded pointers.  */
124*53ee8cc1Swenshuai.xi #ifndef __BOUNDED_POINTERS__
125*53ee8cc1Swenshuai.xi # define __bounded	/* nothing */
126*53ee8cc1Swenshuai.xi # define __unbounded	/* nothing */
127*53ee8cc1Swenshuai.xi # define __ptrvalue	/* nothing */
128*53ee8cc1Swenshuai.xi #endif
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi /* Fortify support.  */
132*53ee8cc1Swenshuai.xi #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
133*53ee8cc1Swenshuai.xi #define __bos0(ptr) __builtin_object_size (ptr, 0)
134*53ee8cc1Swenshuai.xi 
135*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (4,3)
136*53ee8cc1Swenshuai.xi # define __warndecl(name, msg) \
137*53ee8cc1Swenshuai.xi   extern void name (void) __attribute__((__warning__ (msg)))
138*53ee8cc1Swenshuai.xi # define __warnattr(msg) __attribute__((__warning__ (msg)))
139*53ee8cc1Swenshuai.xi # define __errordecl(name, msg) \
140*53ee8cc1Swenshuai.xi   extern void name (void) __attribute__((__error__ (msg)))
141*53ee8cc1Swenshuai.xi #else
142*53ee8cc1Swenshuai.xi # define __warndecl(name, msg) extern void name (void)
143*53ee8cc1Swenshuai.xi # define __warnattr(msg)
144*53ee8cc1Swenshuai.xi # define __errordecl(name, msg) extern void name (void)
145*53ee8cc1Swenshuai.xi #endif
146*53ee8cc1Swenshuai.xi 
147*53ee8cc1Swenshuai.xi /* Support for flexible arrays.  */
148*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (2,97)
149*53ee8cc1Swenshuai.xi /* GCC 2.97 supports C99 flexible array members.  */
150*53ee8cc1Swenshuai.xi # define __flexarr	[]
151*53ee8cc1Swenshuai.xi #else
152*53ee8cc1Swenshuai.xi # ifdef __GNUC__
153*53ee8cc1Swenshuai.xi #  define __flexarr	[0]
154*53ee8cc1Swenshuai.xi # else
155*53ee8cc1Swenshuai.xi #  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
156*53ee8cc1Swenshuai.xi #   define __flexarr	[]
157*53ee8cc1Swenshuai.xi #  else
158*53ee8cc1Swenshuai.xi /* Some other non-C99 compiler.  Approximate with [1].  */
159*53ee8cc1Swenshuai.xi #   define __flexarr	[1]
160*53ee8cc1Swenshuai.xi #  endif
161*53ee8cc1Swenshuai.xi # endif
162*53ee8cc1Swenshuai.xi #endif
163*53ee8cc1Swenshuai.xi 
164*53ee8cc1Swenshuai.xi 
165*53ee8cc1Swenshuai.xi /* __asm__ ("xyz") is used throughout the headers to rename functions
166*53ee8cc1Swenshuai.xi    at the assembly language level.  This is wrapped by the __REDIRECT
167*53ee8cc1Swenshuai.xi    macro, in order to support compilers that can do this some other
168*53ee8cc1Swenshuai.xi    way.  When compilers don't support asm-names at all, we have to do
169*53ee8cc1Swenshuai.xi    preprocessor tricks instead (which don't have exactly the right
170*53ee8cc1Swenshuai.xi    semantics, but it's the best we can do).
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi    Example:
173*53ee8cc1Swenshuai.xi    int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
174*53ee8cc1Swenshuai.xi 
175*53ee8cc1Swenshuai.xi #if defined __GNUC__ && __GNUC__ >= 2
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
178*53ee8cc1Swenshuai.xi # ifdef __cplusplus
179*53ee8cc1Swenshuai.xi #  define __REDIRECT_NTH(name, proto, alias) \
180*53ee8cc1Swenshuai.xi      name proto __THROW __asm__ (__ASMNAME (#alias))
181*53ee8cc1Swenshuai.xi # else
182*53ee8cc1Swenshuai.xi #  define __REDIRECT_NTH(name, proto, alias) \
183*53ee8cc1Swenshuai.xi      name proto __asm__ (__ASMNAME (#alias)) __THROW
184*53ee8cc1Swenshuai.xi # endif
185*53ee8cc1Swenshuai.xi # define __ASMNAME(cname)  __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
186*53ee8cc1Swenshuai.xi # define __ASMNAME2(prefix, cname) __STRING (prefix) cname
187*53ee8cc1Swenshuai.xi 
188*53ee8cc1Swenshuai.xi /*
189*53ee8cc1Swenshuai.xi #elif __SOME_OTHER_COMPILER__
190*53ee8cc1Swenshuai.xi 
191*53ee8cc1Swenshuai.xi # define __REDIRECT(name, proto, alias) name proto; \
192*53ee8cc1Swenshuai.xi 	_Pragma("let " #name " = " #alias)
193*53ee8cc1Swenshuai.xi */
194*53ee8cc1Swenshuai.xi #endif
195*53ee8cc1Swenshuai.xi 
196*53ee8cc1Swenshuai.xi /* GCC has various useful declarations that can be made with the
197*53ee8cc1Swenshuai.xi    `__attribute__' syntax.  All of the ways we use this do fine if
198*53ee8cc1Swenshuai.xi    they are omitted for compilers that don't understand it. */
199*53ee8cc1Swenshuai.xi #if !defined __GNUC__ || __GNUC__ < 2
200*53ee8cc1Swenshuai.xi # define __attribute__(xyz)	/* Ignore */
201*53ee8cc1Swenshuai.xi #endif
202*53ee8cc1Swenshuai.xi 
203*53ee8cc1Swenshuai.xi /* At some point during the gcc 2.96 development the `malloc' attribute
204*53ee8cc1Swenshuai.xi    for functions was introduced.  We don't want to use it unconditionally
205*53ee8cc1Swenshuai.xi    (although this would be possible) since it generates warnings.  */
206*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (2,96)
207*53ee8cc1Swenshuai.xi # define __attribute_malloc__ __attribute__ ((__malloc__))
208*53ee8cc1Swenshuai.xi #else
209*53ee8cc1Swenshuai.xi # define __attribute_malloc__ /* Ignore */
210*53ee8cc1Swenshuai.xi #endif
211*53ee8cc1Swenshuai.xi 
212*53ee8cc1Swenshuai.xi /* At some point during the gcc 2.96 development the `pure' attribute
213*53ee8cc1Swenshuai.xi    for functions was introduced.  We don't want to use it unconditionally
214*53ee8cc1Swenshuai.xi    (although this would be possible) since it generates warnings.  */
215*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (2,96)
216*53ee8cc1Swenshuai.xi # define __attribute_pure__ __attribute__ ((__pure__))
217*53ee8cc1Swenshuai.xi #else
218*53ee8cc1Swenshuai.xi # define __attribute_pure__ /* Ignore */
219*53ee8cc1Swenshuai.xi #endif
220*53ee8cc1Swenshuai.xi 
221*53ee8cc1Swenshuai.xi /* At some point during the gcc 3.1 development the `used' attribute
222*53ee8cc1Swenshuai.xi    for functions was introduced.  We don't want to use it unconditionally
223*53ee8cc1Swenshuai.xi    (although this would be possible) since it generates warnings.  */
224*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (3,1)
225*53ee8cc1Swenshuai.xi # define __attribute_used__ __attribute__ ((__used__))
226*53ee8cc1Swenshuai.xi # define __attribute_noinline__ __attribute__ ((__noinline__))
227*53ee8cc1Swenshuai.xi #else
228*53ee8cc1Swenshuai.xi # define __attribute_used__ __attribute__ ((__unused__))
229*53ee8cc1Swenshuai.xi # define __attribute_noinline__ /* Ignore */
230*53ee8cc1Swenshuai.xi #endif
231*53ee8cc1Swenshuai.xi 
232*53ee8cc1Swenshuai.xi /* gcc allows marking deprecated functions.  */
233*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (3,2)
234*53ee8cc1Swenshuai.xi # define __attribute_deprecated__ __attribute__ ((__deprecated__))
235*53ee8cc1Swenshuai.xi #else
236*53ee8cc1Swenshuai.xi # define __attribute_deprecated__ /* Ignore */
237*53ee8cc1Swenshuai.xi #endif
238*53ee8cc1Swenshuai.xi 
239*53ee8cc1Swenshuai.xi /* At some point during the gcc 2.8 development the `format_arg' attribute
240*53ee8cc1Swenshuai.xi    for functions was introduced.  We don't want to use it unconditionally
241*53ee8cc1Swenshuai.xi    (although this would be possible) since it generates warnings.
242*53ee8cc1Swenshuai.xi    If several `format_arg' attributes are given for the same function, in
243*53ee8cc1Swenshuai.xi    gcc-3.0 and older, all but the last one are ignored.  In newer gccs,
244*53ee8cc1Swenshuai.xi    all designated arguments are considered.  */
245*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (2,8)
246*53ee8cc1Swenshuai.xi # define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
247*53ee8cc1Swenshuai.xi #else
248*53ee8cc1Swenshuai.xi # define __attribute_format_arg__(x) /* Ignore */
249*53ee8cc1Swenshuai.xi #endif
250*53ee8cc1Swenshuai.xi 
251*53ee8cc1Swenshuai.xi /* At some point during the gcc 2.97 development the `strfmon' format
252*53ee8cc1Swenshuai.xi    attribute for functions was introduced.  We don't want to use it
253*53ee8cc1Swenshuai.xi    unconditionally (although this would be possible) since it
254*53ee8cc1Swenshuai.xi    generates warnings.  */
255*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (2,97)
256*53ee8cc1Swenshuai.xi # define __attribute_format_strfmon__(a,b) \
257*53ee8cc1Swenshuai.xi   __attribute__ ((__format__ (__strfmon__, a, b)))
258*53ee8cc1Swenshuai.xi #else
259*53ee8cc1Swenshuai.xi # define __attribute_format_strfmon__(a,b) /* Ignore */
260*53ee8cc1Swenshuai.xi #endif
261*53ee8cc1Swenshuai.xi 
262*53ee8cc1Swenshuai.xi /* The nonull function attribute allows to mark pointer parameters which
263*53ee8cc1Swenshuai.xi    must not be NULL.  */
264*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (3,3)
265*53ee8cc1Swenshuai.xi # define __nonnull(params) __attribute__ ((__nonnull__ params))
266*53ee8cc1Swenshuai.xi #else
267*53ee8cc1Swenshuai.xi # define __nonnull(params)
268*53ee8cc1Swenshuai.xi #endif
269*53ee8cc1Swenshuai.xi 
270*53ee8cc1Swenshuai.xi /* If fortification mode, we warn about unused results of certain
271*53ee8cc1Swenshuai.xi    function calls which can lead to problems.  */
272*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (3,4)
273*53ee8cc1Swenshuai.xi # define __attribute_warn_unused_result__ \
274*53ee8cc1Swenshuai.xi    __attribute__ ((__warn_unused_result__))
275*53ee8cc1Swenshuai.xi # if __USE_FORTIFY_LEVEL > 0
276*53ee8cc1Swenshuai.xi #  define __wur __attribute_warn_unused_result__
277*53ee8cc1Swenshuai.xi # endif
278*53ee8cc1Swenshuai.xi #else
279*53ee8cc1Swenshuai.xi # define __attribute_warn_unused_result__ /* empty */
280*53ee8cc1Swenshuai.xi #endif
281*53ee8cc1Swenshuai.xi #ifndef __wur
282*53ee8cc1Swenshuai.xi # define __wur /* Ignore */
283*53ee8cc1Swenshuai.xi #endif
284*53ee8cc1Swenshuai.xi 
285*53ee8cc1Swenshuai.xi /* Forces a function to be always inlined.  */
286*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (3,2)
287*53ee8cc1Swenshuai.xi # define __always_inline __inline __attribute__ ((__always_inline__))
288*53ee8cc1Swenshuai.xi #else
289*53ee8cc1Swenshuai.xi # define __always_inline __inline
290*53ee8cc1Swenshuai.xi #endif
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
293*53ee8cc1Swenshuai.xi    inline semantics, unless -fgnu89-inline is used.  */
294*53ee8cc1Swenshuai.xi #if !defined __cplusplus || __GNUC_PREREQ (4,3)
295*53ee8cc1Swenshuai.xi # if defined __GNUC_STDC_INLINE__ || defined __cplusplus
296*53ee8cc1Swenshuai.xi #  define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
297*53ee8cc1Swenshuai.xi #  if __GNUC_PREREQ (4,3)
298*53ee8cc1Swenshuai.xi #   define __extern_always_inline \
299*53ee8cc1Swenshuai.xi   extern __always_inline __attribute__ ((__gnu_inline__, __artificial__))
300*53ee8cc1Swenshuai.xi #  else
301*53ee8cc1Swenshuai.xi #   define __extern_always_inline \
302*53ee8cc1Swenshuai.xi   extern __always_inline __attribute__ ((__gnu_inline__))
303*53ee8cc1Swenshuai.xi #  endif
304*53ee8cc1Swenshuai.xi # else
305*53ee8cc1Swenshuai.xi #  define __extern_inline extern __inline
306*53ee8cc1Swenshuai.xi #  define __extern_always_inline extern __always_inline
307*53ee8cc1Swenshuai.xi # endif
308*53ee8cc1Swenshuai.xi #endif
309*53ee8cc1Swenshuai.xi 
310*53ee8cc1Swenshuai.xi /* GCC 4.3 and above allow passing all anonymous arguments of an
311*53ee8cc1Swenshuai.xi    __extern_always_inline function to some other vararg function.  */
312*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (4,3)
313*53ee8cc1Swenshuai.xi # define __va_arg_pack() __builtin_va_arg_pack ()
314*53ee8cc1Swenshuai.xi # define __va_arg_pack_len() __builtin_va_arg_pack_len ()
315*53ee8cc1Swenshuai.xi #endif
316*53ee8cc1Swenshuai.xi 
317*53ee8cc1Swenshuai.xi /* It is possible to compile containing GCC extensions even if GCC is
318*53ee8cc1Swenshuai.xi    run in pedantic mode if the uses are carefully marked using the
319*53ee8cc1Swenshuai.xi    `__extension__' keyword.  But this is not generally available before
320*53ee8cc1Swenshuai.xi    version 2.8.  */
321*53ee8cc1Swenshuai.xi #if !__GNUC_PREREQ (2,8)
322*53ee8cc1Swenshuai.xi # define __extension__		/* Ignore */
323*53ee8cc1Swenshuai.xi #endif
324*53ee8cc1Swenshuai.xi 
325*53ee8cc1Swenshuai.xi /* __restrict is known in EGCS 1.2 and above. */
326*53ee8cc1Swenshuai.xi #if !__GNUC_PREREQ (2,92)
327*53ee8cc1Swenshuai.xi # define __restrict	/* Ignore */
328*53ee8cc1Swenshuai.xi #endif
329*53ee8cc1Swenshuai.xi 
330*53ee8cc1Swenshuai.xi /* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is
331*53ee8cc1Swenshuai.xi      array_name[restrict]
332*53ee8cc1Swenshuai.xi    GCC 3.1 supports this.  */
333*53ee8cc1Swenshuai.xi #if __GNUC_PREREQ (3,1) && !defined __GNUG__
334*53ee8cc1Swenshuai.xi # define __restrict_arr	__restrict
335*53ee8cc1Swenshuai.xi #else
336*53ee8cc1Swenshuai.xi # ifdef __GNUC__
337*53ee8cc1Swenshuai.xi #  define __restrict_arr	/* Not supported in old GCC.  */
338*53ee8cc1Swenshuai.xi # else
339*53ee8cc1Swenshuai.xi #  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
340*53ee8cc1Swenshuai.xi #   define __restrict_arr	restrict
341*53ee8cc1Swenshuai.xi #  else
342*53ee8cc1Swenshuai.xi /* Some other non-C99 compiler.  */
343*53ee8cc1Swenshuai.xi #   define __restrict_arr	/* Not supported.  */
344*53ee8cc1Swenshuai.xi #  endif
345*53ee8cc1Swenshuai.xi # endif
346*53ee8cc1Swenshuai.xi #endif
347*53ee8cc1Swenshuai.xi 
348*53ee8cc1Swenshuai.xi #include <bits/wordsize.h>
349*53ee8cc1Swenshuai.xi 
350*53ee8cc1Swenshuai.xi #if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
351*53ee8cc1Swenshuai.xi # define __LDBL_COMPAT 1
352*53ee8cc1Swenshuai.xi # ifdef __REDIRECT
353*53ee8cc1Swenshuai.xi #  define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias)
354*53ee8cc1Swenshuai.xi #  define __LDBL_REDIR(name, proto) \
355*53ee8cc1Swenshuai.xi   __LDBL_REDIR1 (name, proto, __nldbl_##name)
356*53ee8cc1Swenshuai.xi #  define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias)
357*53ee8cc1Swenshuai.xi #  define __LDBL_REDIR_NTH(name, proto) \
358*53ee8cc1Swenshuai.xi   __LDBL_REDIR1_NTH (name, proto, __nldbl_##name)
359*53ee8cc1Swenshuai.xi #  define __LDBL_REDIR1_DECL(name, alias) \
360*53ee8cc1Swenshuai.xi   extern __typeof (name) name __asm (__ASMNAME (#alias));
361*53ee8cc1Swenshuai.xi #  define __LDBL_REDIR_DECL(name) \
362*53ee8cc1Swenshuai.xi   extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name));
363*53ee8cc1Swenshuai.xi #  define __REDIRECT_LDBL(name, proto, alias) \
364*53ee8cc1Swenshuai.xi   __LDBL_REDIR1 (name, proto, __nldbl_##alias)
365*53ee8cc1Swenshuai.xi #  define __REDIRECT_NTH_LDBL(name, proto, alias) \
366*53ee8cc1Swenshuai.xi   __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias)
367*53ee8cc1Swenshuai.xi # endif
368*53ee8cc1Swenshuai.xi #endif
369*53ee8cc1Swenshuai.xi #if !defined __LDBL_COMPAT || !defined __REDIRECT
370*53ee8cc1Swenshuai.xi # define __LDBL_REDIR1(name, proto, alias) name proto
371*53ee8cc1Swenshuai.xi # define __LDBL_REDIR(name, proto) name proto
372*53ee8cc1Swenshuai.xi # define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW
373*53ee8cc1Swenshuai.xi # define __LDBL_REDIR_NTH(name, proto) name proto __THROW
374*53ee8cc1Swenshuai.xi # define __LDBL_REDIR_DECL(name)
375*53ee8cc1Swenshuai.xi # ifdef __REDIRECT
376*53ee8cc1Swenshuai.xi #  define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias)
377*53ee8cc1Swenshuai.xi #  define __REDIRECT_NTH_LDBL(name, proto, alias) \
378*53ee8cc1Swenshuai.xi   __REDIRECT_NTH (name, proto, alias)
379*53ee8cc1Swenshuai.xi # endif
380*53ee8cc1Swenshuai.xi #endif
381*53ee8cc1Swenshuai.xi 
382*53ee8cc1Swenshuai.xi #endif	 /* sys/cdefs.h */
383