1c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*	$NetBSD: cdefs.h,v 1.58 2004/12/11 05:59:00 christos Exp $	*/
2c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
3c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
4c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Copyright (c) 1991, 1993
5c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	The Regents of the University of California.  All rights reserved.
6c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
7c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * This code is derived from software contributed to Berkeley by
8c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Berkeley Software Design, Inc.
9c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
10c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Redistribution and use in source and binary forms, with or without
11c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * modification, are permitted provided that the following conditions
12c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * are met:
13c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 1. Redistributions of source code must retain the above copyright
14c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *    notice, this list of conditions and the following disclaimer.
15c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 2. Redistributions in binary form must reproduce the above copyright
16c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *    notice, this list of conditions and the following disclaimer in the
17c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *    documentation and/or other materials provided with the distribution.
18c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 3. Neither the name of the University nor the names of its contributors
19c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *    may be used to endorse or promote products derived from this software
20c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *    without specific prior written permission.
21c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
22c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * SUCH DAMAGE.
33c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
34c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	@(#)cdefs.h	8.8 (Berkeley) 1/9/95
35c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
36c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
37c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifndef	_SYS_CDEFS_H_
38c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	_SYS_CDEFS_H_
39c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
40c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
41c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* our implementation of wchar_t is only 8-bit - die die non-portable code */
42c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#undef  __WCHAR_TYPE__
43c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __WCHAR_TYPE__  unsigned char
44c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
45c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
46c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
47c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Macro to test if we're using a GNU C compiler of a specific vintage
48c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * or later, for e.g. features that appeared in a particular version
49c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * of GNU C.  Usage:
50c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
51c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	#if __GNUC_PREREQ__(major, minor)
52c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	...cool feature...
53c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	#else
54c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	...delete feature...
55c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	#endif
56c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
57c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifdef __GNUC__
58c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__GNUC_PREREQ__(x, y)						\
59c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner	((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) ||			\
60c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner	 (__GNUC__ > (x)))
61c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
62c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__GNUC_PREREQ__(x, y)	0
63c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
64c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
65c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <sys/cdefs_elf.h>
66c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
67c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if defined(__cplusplus)
68c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__BEGIN_DECLS		extern "C" {
69c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__END_DECLS		}
70c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__static_cast(x,y)	static_cast<x>(y)
71c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
72c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__BEGIN_DECLS
73c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__END_DECLS
74c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__static_cast(x,y)	(x)y
75c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
76c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
77c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
78c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
79c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
80c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
81c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * in between its arguments.  __CONCAT can also concatenate double-quoted
82c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * strings produced by the __STRING macro, but this only works with ANSI C.
83c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
84c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
85c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	___STRING(x)	__STRING(x)
86c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	___CONCAT(x,y)	__CONCAT(x,y)
87c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
88bea05255de4372e7c2d41489b637338f59df9361David 'Digit' Turner#if defined(__STDC__) || defined(__cplusplus)
89c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__P(protos)	protos		/* full-blown ANSI C */
90c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__CONCAT(x,y)	x ## y
91c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__STRING(x)	#x
92c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
93c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__const		const		/* define reserved names to standard */
94c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__signed	signed
95c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__volatile	volatile
96c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if defined(__cplusplus)
97c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__inline	inline		/* convert to C++ keyword */
98c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
99c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if !defined(__GNUC__) && !defined(__lint__)
100c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__inline			/* delete GCC keyword */
101c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* !__GNUC__  && !__lint__ */
102c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* !__cplusplus */
103c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
104c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else	/* !(__STDC__ || __cplusplus) */
105c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__P(protos)	()		/* traditional C preprocessor */
106c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__CONCAT(x,y)	x/**/y
107c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__STRING(x)	"x"
108c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
109c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifndef __GNUC__
110c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__const				/* delete pseudo-ANSI C keywords */
111c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__inline
112c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__signed
113c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__volatile
114c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif	/* !__GNUC__ */
115c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
116c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
117c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * In non-ANSI C environments, new programs will want ANSI-only C keywords
118c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * deleted from the program and old programs will want them left alone.
119c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Programs using the ANSI C keywords const, inline etc. as normal
120c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * identifiers should define -DNO_ANSI_KEYWORDS.
121c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
122c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifndef	NO_ANSI_KEYWORDS
123c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	const		__const		/* convert ANSI C keywords */
124c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	inline		__inline
125c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	signed		__signed
126c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	volatile	__volatile
127c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* !NO_ANSI_KEYWORDS */
128c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif	/* !(__STDC__ || __cplusplus) */
129c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
130c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
131c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Used for internal auditing of the NetBSD source tree.
132c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
133c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifdef __AUDIT__
134c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__aconst	__const
135c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
136c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__aconst
137c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
138c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
139c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
140c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * The following macro is used to remove const cast-away warnings
141c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * from gcc -Wcast-qual; it should be used with caution because it
142c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * can hide valid errors; in particular most valid uses are in
143c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * situations where the API requires it, not to cast away string
144c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * constants. We don't use *intptr_t on purpose here and we are
145c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * explicit about unsigned long so that we don't have additional
146c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * dependencies.
147c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
148c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __UNCONST(a)	((void *)(unsigned long)(const void *)(a))
149c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
150c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
151c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * GCC2 provides __extension__ to suppress warnings for various GNU C
152c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * language extensions under "-ansi -pedantic".
153c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
154c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if !__GNUC_PREREQ__(2, 0)
155c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__extension__		/* delete __extension__ if non-gcc or gcc1 */
156c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
157c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
158c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
159c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * GCC1 and some versions of GCC2 declare dead (non-returning) and
160c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * pure (no side effects) functions using "volatile" and "const";
161c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * unfortunately, these then cause warnings under "-ansi -pedantic".
162c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * GCC2 uses a new, peculiar __attribute__((attrs)) style.  All of
163c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * these work for GNU C++ (modulo a slight glitch in the C++ grammar
164c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * in the distribution version of 2.5.5).
165c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
166c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if !__GNUC_PREREQ__(2, 5)
167c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__attribute__(x)	/* delete __attribute__ if non-gcc or gcc1 */
168c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
169c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__dead		__volatile
170c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__pure		__const
171c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
172c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
173c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
174c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* Delete pseudo-keywords wherever they are not available or needed. */
175c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifndef __dead
176c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__dead
177c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__pure
178c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
179c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
180c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if __GNUC_PREREQ__(2, 7)
181c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__unused	__attribute__((__unused__))
182c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
183c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__unused	/* delete */
184c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
185c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
186c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if __GNUC_PREREQ__(3, 1)
187c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__used		__attribute__((__used__))
188c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
189c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__used		/* delete */
190c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
191c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
192c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if __GNUC_PREREQ__(2, 7)
193c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__packed	__attribute__((__packed__))
194c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__aligned(x)	__attribute__((__aligned__(x)))
195c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__section(x)	__attribute__((__section__(x)))
196c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#elif defined(__lint__)
197c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__packed	/* delete */
198c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__aligned(x)	/* delete */
199c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__section(x)	/* delete */
200c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
201c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__packed	error: no __packed for this compiler
202c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__aligned(x)	error: no __aligned for this compiler
203c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__section(x)	error: no __section for this compiler
204c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
205c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
206c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if !__GNUC_PREREQ__(2, 8)
207c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__extension__
208c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
209c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
210c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if __GNUC_PREREQ__(2, 8)
211c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __statement(x)	__extension__(x)
212c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#elif defined(lint)
213c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __statement(x)	(0)
214c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
215c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __statement(x)	(x)
216c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
217c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
218c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
219c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * C99 defines the restrict type qualifier keyword, which was made available
220c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * in GCC 2.92.
221c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
222bea05255de4372e7c2d41489b637338f59df9361David 'Digit' Turner#if defined(__STDC__VERSION__) && __STDC_VERSION__ >= 199901L
223c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__restrict	restrict
224c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
225c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if !__GNUC_PREREQ__(2, 92)
226c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__restrict	/* delete __restrict when not supported */
227c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
228c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
229c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
230c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
231c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * C99 defines __func__ predefined identifier, which was made available
232c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * in GCC 2.95.
233c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
234bea05255de4372e7c2d41489b637338f59df9361David 'Digit' Turner#if !defined(__STDC_VERSION__) || !(__STDC_VERSION__ >= 199901L)
235c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if __GNUC_PREREQ__(2, 6)
236c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__func__	__PRETTY_FUNCTION__
237c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#elif __GNUC_PREREQ__(2, 4)
238c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__func__	__FUNCTION__
239c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
240c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__func__	""
241c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
242c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* !(__STDC_VERSION__ >= 199901L) */
243c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
244c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if defined(_KERNEL)
245c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if defined(NO_KERNEL_RCSIDS)
246c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#undef __KERNEL_RCSID
247c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__KERNEL_RCSID(_n, _s)		/* nothing */
248c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* NO_KERNEL_RCSIDS */
249c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* _KERNEL */
250c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
251c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if !defined(_STANDALONE) && !defined(_KERNEL)
252c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifdef __GNUC__
253c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__RENAME(x)	___RENAME(x)
254c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
255c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifdef __lint__
256c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__RENAME(x)	__symbolrename(x)
257c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
258c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#error "No function renaming possible"
259c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* __lint__ */
260c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* __GNUC__ */
261c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else /* _STANDALONE || _KERNEL */
262c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__RENAME(x)	no renaming in kernel or standalone environment
263c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
264c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
265c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
266c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * A barrier to stop the optimizer from moving code or assume live
267c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * register values. This is gcc specific, the version is more or less
268c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * arbitrary, might work with older compilers.
269c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
270c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if __GNUC_PREREQ__(2, 95)
271c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__insn_barrier()	__asm __volatile("":::"memory")
272c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
273c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__insn_barrier()	/* */
274c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
275c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
276c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
277c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * GNU C version 2.96 adds explicit branch prediction so that
278c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * the CPU back-end can hint the processor and also so that
279c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * code blocks can be reordered such that the predicted path
280c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * sees a more linear flow, thus improving cache behavior, etc.
281c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
282c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * The following two macros provide us with a way to use this
283c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * compiler feature.  Use __predict_true() if you expect the expression
284c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * to evaluate to true, and __predict_false() if you expect the
285c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * expression to evaluate to false.
286c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
287c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * A few notes about usage:
288c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
289c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	* Generally, __predict_false() error condition checks (unless
290c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	  you have some _strong_ reason to do otherwise, in which case
291c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	  document it), and/or __predict_true() `no-error' condition
292c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	  checks, assuming you want to optimize for the no-error case.
293c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
294c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	* Other than that, if you don't know the likelihood of a test
295c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	  succeeding from empirical or other `hard' evidence, don't
296c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	  make predictions.
297c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
298c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	* These are meant to be used in places that are run `a lot'.
299c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	  It is wasteful to make predictions in code that is run
300c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	  seldomly (e.g. at subsystem initialization time) as the
301c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	  basic block reordering that this affects can often generate
302c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	  larger code.
303c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
304c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if __GNUC_PREREQ__(2, 96)
305c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__predict_true(exp)	__builtin_expect((exp) != 0, 1)
306c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__predict_false(exp)	__builtin_expect((exp) != 0, 0)
307c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
308c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__predict_true(exp)	(exp)
309c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__predict_false(exp)	(exp)
310c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
311c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
312c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#if __GNUC_PREREQ__(2, 96)
313c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __noreturn    __attribute__((__noreturn__))
314c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __mallocfunc  __attribute__((malloc))
315c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#else
316c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __noreturn
317c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __mallocfunc
318c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif
319c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
320c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/*
321c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Macros for manipulating "link sets".  Link sets are arrays of pointers
322c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * to objects, which are gathered up by the linker.
323c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
324c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Object format-specific code has provided us with the following macros:
325c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
326c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	__link_set_add_text(set, sym)
327c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		Add a reference to the .text symbol `sym' to `set'.
328c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
329c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	__link_set_add_rodata(set, sym)
330c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		Add a reference to the .rodata symbol `sym' to `set'.
331c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
332c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	__link_set_add_data(set, sym)
333c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		Add a reference to the .data symbol `sym' to `set'.
334c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
335c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	__link_set_add_bss(set, sym)
336c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		Add a reference to the .bss symbol `sym' to `set'.
337c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
338c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	__link_set_decl(set, ptype)
339c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		Provide an extern declaration of the set `set', which
340c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		contains an array of the pointer type `ptype'.  This
341c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		macro must be used by any code which wishes to reference
342c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		the elements of a link set.
343c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
344c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	__link_set_start(set)
345c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		This points to the first slot in the link set.
346c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
347c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	__link_set_end(set)
348c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		This points to the (non-existent) slot after the last
349c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		entry in the link set.
350c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
351c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	__link_set_count(set)
352c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		Count the number of entries in link set `set'.
353c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
354c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * In addition, we provide the following macros for accessing link sets:
355c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
356c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	__link_set_foreach(pvar, set)
357c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		Iterate over the link set `set'.  Because a link set is
358c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		an array of pointers, pvar must be declared as "type **pvar",
359c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		and the actual entry accessed as "*pvar".
360c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *
361c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *	__link_set_entry(set, idx)
362c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner *		Access the link set entry at index `idx' from set `set'.
363c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */
364c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__link_set_foreach(pvar, set)					\
365c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner	for (pvar = __link_set_start(set); pvar < __link_set_end(set); pvar++)
366c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
367c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define	__link_set_entry(set, idx)	(__link_set_begin(set)[idx])
368c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
3697c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner/*
3707c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * Some of the recend FreeBSD sources used in Bionic need this.
3717c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * Originally, this is used to embed the rcs versions of each source file
3727c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * in the generated binary. We certainly don't want this in Bionic.
3737c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner */
3747c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__FBSDID(s)	struct __hack
3757c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner
3767c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner/*-
3777c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * The following definitions are an extension of the behavior originally
3787c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * implemented in <sys/_posix.h>, but with a different level of granularity.
3797c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * POSIX.1 requires that the macros we test be defined before any standard
3807c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * header file is included.
3817c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *
3827c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * Here's a quick run-down of the versions:
3837c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *  defined(_POSIX_SOURCE)		1003.1-1988
3847c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *  _POSIX_C_SOURCE == 1		1003.1-1990
3857c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *  _POSIX_C_SOURCE == 2		1003.2-1992 C Language Binding Option
3867c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *  _POSIX_C_SOURCE == 199309		1003.1b-1993
3877c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *  _POSIX_C_SOURCE == 199506		1003.1c-1995, 1003.1i-1995,
3887c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *					and the omnibus ISO/IEC 9945-1: 1996
3897c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *  _POSIX_C_SOURCE == 200112		1003.1-2001
3907c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *  _POSIX_C_SOURCE == 200809		1003.1-2008
3917c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *
3927c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * In addition, the X/Open Portability Guide, which is now the Single UNIX
3937c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * Specification, defines a feature-test macro which indicates the version of
3947c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * that specification, and which subsumes _POSIX_C_SOURCE.
3957c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *
3967c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * Our macros begin with two underscores to avoid namespace screwage.
3977c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner */
3987c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner
3997c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */
4007c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1
4017c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#undef _POSIX_C_SOURCE		/* Probably illegal, but beyond caring now. */
4027c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	_POSIX_C_SOURCE		199009
4037c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
4047c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner
4057c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */
4067c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2
4077c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#undef _POSIX_C_SOURCE
4087c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	_POSIX_C_SOURCE		199209
4097c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
4107c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner
4117c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner/* Deal with various X/Open Portability Guides and Single UNIX Spec. */
4127c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#ifdef _XOPEN_SOURCE
4137c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#if _XOPEN_SOURCE - 0 >= 700
4147c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__XSI_VISIBLE		700
4157c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#undef _POSIX_C_SOURCE
4167c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	_POSIX_C_SOURCE		200809
4177c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#elif _XOPEN_SOURCE - 0 >= 600
4187c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__XSI_VISIBLE		600
4197c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#undef _POSIX_C_SOURCE
4207c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	_POSIX_C_SOURCE		200112
4217c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#elif _XOPEN_SOURCE - 0 >= 500
4227c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__XSI_VISIBLE		500
4237c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#undef _POSIX_C_SOURCE
4247c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	_POSIX_C_SOURCE		199506
4257c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
4267c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
4277c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner
4287c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner/*
4297c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * Deal with all versions of POSIX.  The ordering relative to the tests above is
4307c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * important.
4317c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner */
4327c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
4337c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	_POSIX_C_SOURCE		198808
4347c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
4357c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#ifdef _POSIX_C_SOURCE
4367c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#if _POSIX_C_SOURCE >= 200809
4377c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__POSIX_VISIBLE		200809
4387c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__ISO_C_VISIBLE		1999
4397c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#elif _POSIX_C_SOURCE >= 200112
4407c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__POSIX_VISIBLE		200112
4417c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__ISO_C_VISIBLE		1999
4427c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#elif _POSIX_C_SOURCE >= 199506
4437c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__POSIX_VISIBLE		199506
4447c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__ISO_C_VISIBLE		1990
4457c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#elif _POSIX_C_SOURCE >= 199309
4467c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__POSIX_VISIBLE		199309
4477c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__ISO_C_VISIBLE		1990
4487c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#elif _POSIX_C_SOURCE >= 199209
4497c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__POSIX_VISIBLE		199209
4507c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__ISO_C_VISIBLE		1990
4517c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#elif _POSIX_C_SOURCE >= 199009
4527c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__POSIX_VISIBLE		199009
4537c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__ISO_C_VISIBLE		1990
4547c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#else
4557c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__POSIX_VISIBLE		198808
4567c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__ISO_C_VISIBLE		0
4577c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif /* _POSIX_C_SOURCE */
4587c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#else
4597c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner/*-
4607c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * Deal with _ANSI_SOURCE:
4617c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * If it is defined, and no other compilation environment is explicitly
4627c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * requested, then define our internal feature-test macros to zero.  This
4637c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * makes no difference to the preprocessor (undefined symbols in preprocessing
4647c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * expressions are defined to have value zero), but makes it more convenient for
4657c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * a test program to print out the values.
4667c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner *
4677c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * If a program mistakenly defines _ANSI_SOURCE and some other macro such as
4687c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * _POSIX_C_SOURCE, we will assume that it wants the broader compilation
4697c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * environment (and in fact we will never get here).
4707c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner */
4717c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#if defined(_ANSI_SOURCE)	/* Hide almost everything. */
4727c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__POSIX_VISIBLE		0
4737c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__XSI_VISIBLE		0
4747c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__BSD_VISIBLE		0
4757c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__ISO_C_VISIBLE		1990
4767c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#elif defined(_C99_SOURCE)	/* Localism to specify strict C99 env. */
4777c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__POSIX_VISIBLE		0
4787c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__XSI_VISIBLE		0
4797c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__BSD_VISIBLE		0
4807c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__ISO_C_VISIBLE		1999
4817c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#else				/* Default environment: show everything. */
4827c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__POSIX_VISIBLE		200809
4837c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__XSI_VISIBLE		700
4847c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__BSD_VISIBLE		1
4857c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#define	__ISO_C_VISIBLE		1999
4867c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
4877c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
4887c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner
4897c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner/*
4907c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner * Default values.
4917c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner */
4927c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#ifndef __XPG_VISIBLE
4937c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner# define __XPG_VISIBLE          700
4947c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
4957c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#ifndef __POSIX_VISIBLE
4967c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner# define __POSIX_VISIBLE        200809
4977c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
4987c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#ifndef __ISO_C_VISIBLE
4997c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner# define __ISO_C_VISIBLE        1999
5007c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
5017c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#ifndef __BSD_VISIBLE
5027c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner# define __BSD_VISIBLE          1
5037c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner#endif
5047c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turner
505c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define  __BIONIC__   1
506bea05255de4372e7c2d41489b637338f59df9361David 'Digit' Turner#include <android/api-level.h>
507c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner
508c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* !_SYS_CDEFS_H_ */
509