1 /* $OpenBSD: cdefs.h,v 1.25 2007/06/26 10:30:05 tom Exp $ */ 2 /* $NetBSD: cdefs.h,v 1.16 1996/04/03 20:46:39 christos Exp $ */ 3 4 /* 5 * Copyright (c) 1991, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * This code is derived from software contributed to Berkeley by 9 * Berkeley Software Design, Inc. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. Neither the name of the University nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)cdefs.h 8.7 (Berkeley) 1/21/94 36 */ 37 38 #ifndef _SYS_CDEFS_H_ 39 #define _SYS_CDEFS_H_ 40 41 #include <machine/cdefs.h> 42 43 #if defined(__cplusplus) 44 #define __BEGIN_DECLS extern "C" { 45 #define __END_DECLS } 46 #else 47 #define __BEGIN_DECLS 48 #define __END_DECLS 49 #endif 50 51 /* 52 * Macro to test if we're using a specific version of gcc or later. 53 */ 54 #ifdef __GNUC__ 55 #define __GNUC_PREREQ__(ma, mi) \ 56 ((__GNUC__ > (ma)) || (__GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))) 57 #else 58 #define __GNUC_PREREQ__(ma, mi) 0 59 #endif 60 61 /* 62 * The __CONCAT macro is used to concatenate parts of symbol names, e.g. 63 * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo. 64 * The __CONCAT macro is a bit tricky -- make sure you don't put spaces 65 * in between its arguments. __CONCAT can also concatenate double-quoted 66 * strings produced by the __STRING macro, but this only works with ANSI C. 67 */ 68 #if defined(__STDC__) || defined(__cplusplus) 69 #define __P(protos) protos /* full-blown ANSI C */ 70 #define __CONCAT(x,y) x ## y 71 #define __STRING(x) #x 72 73 #define __const const /* define reserved names to standard */ 74 #define __signed signed 75 #define __volatile volatile 76 #if defined(__cplusplus) 77 #define __inline inline /* convert to C++ keyword */ 78 #else 79 #if !defined(__GNUC__) && !defined(lint) 80 #define __inline /* delete GCC keyword */ 81 #endif /* !__GNUC__ && !lint */ 82 #endif /* !__cplusplus */ 83 84 #else /* !(__STDC__ || __cplusplus) */ 85 #define __P(protos) () /* traditional C preprocessor */ 86 #define __CONCAT(x,y) x/**/y 87 #define __STRING(x) "x" 88 89 #if !defined(__GNUC__) && !defined(lint) 90 #define __const /* delete pseudo-ANSI C keywords */ 91 #define __inline 92 #define __signed 93 #define __volatile 94 #endif /* !__GNUC__ && !lint */ 95 96 /* 97 * In non-ANSI C environments, new programs will want ANSI-only C keywords 98 * deleted from the program and old programs will want them left alone. 99 * Programs using the ANSI C keywords const, inline etc. as normal 100 * identifiers should define -DNO_ANSI_KEYWORDS. 101 */ 102 #ifndef NO_ANSI_KEYWORDS 103 #define const __const /* convert ANSI C keywords */ 104 #define inline __inline 105 #define signed __signed 106 #define volatile __volatile 107 #endif /* !NO_ANSI_KEYWORDS */ 108 #endif /* !(__STDC__ || __cplusplus) */ 109 110 /* 111 * GCC1 and some versions of GCC2 declare dead (non-returning) and 112 * pure (no side effects) functions using "volatile" and "const"; 113 * unfortunately, these then cause warnings under "-ansi -pedantic". 114 * GCC >= 2.5 uses the __attribute__((attrs)) style. All of these 115 * work for GNU C++ (modulo a slight glitch in the C++ grammar in 116 * the distribution version of 2.5.5). 117 */ 118 119 #if !__GNUC_PREREQ__(2, 5) 120 #define __attribute__(x) /* delete __attribute__ if non-gcc or gcc1 */ 121 #if defined(__GNUC__) && !defined(__STRICT_ANSI__) 122 #define __dead __volatile 123 #define __pure __const 124 #elif defined(lint) 125 #define __dead /* NORETURN */ 126 #endif 127 #elif !defined(__STRICT_ANSI__) 128 #define __dead __attribute__((__noreturn__)) 129 #define __pure __attribute__((__const__)) 130 #endif 131 132 /* 133 * GNU C version 2.96 adds explicit branch prediction so that 134 * the CPU back-end can hint the processor and also so that 135 * code blocks can be reordered such that the predicted path 136 * sees a more linear flow, thus improving cache behavior, etc. 137 * 138 * The following two macros provide us with a way to utilize this 139 * compiler feature. Use __predict_true() if you expect the expression 140 * to evaluate to true, and __predict_false() if you expect the 141 * expression to evaluate to false. 142 * 143 * A few notes about usage: 144 * 145 * * Generally, __predict_false() error condition checks (unless 146 * you have some _strong_ reason to do otherwise, in which case 147 * document it), and/or __predict_true() `no-error' condition 148 * checks, assuming you want to optimize for the no-error case. 149 * 150 * * Other than that, if you don't know the likelihood of a test 151 * succeeding from empirical or other `hard' evidence, don't 152 * make predictions. 153 * 154 * * These are meant to be used in places that are run `a lot'. 155 * It is wasteful to make predictions in code that is run 156 * seldomly (e.g. at subsystem initialization time) as the 157 * basic block reordering that this affects can often generate 158 * larger code. 159 */ 160 #if __GNUC_PREREQ__(2, 96) 161 #define __predict_true(exp) __builtin_expect(((exp) != 0), 1) 162 #define __predict_false(exp) __builtin_expect(((exp) != 0), 0) 163 #else 164 #define __predict_true(exp) ((exp) != 0) 165 #define __predict_false(exp) ((exp) != 0) 166 #endif 167 168 /* Delete pseudo-keywords wherever they are not available or needed. */ 169 #ifndef __dead 170 #define __dead 171 #define __pure 172 #endif 173 174 #if __GNUC_PREREQ__(2, 7) 175 #define __packed __attribute__((__packed__)) 176 #elif defined(lint) 177 #define __packed 178 #endif 179 180 #if !__GNUC_PREREQ__(2, 8) 181 #define __extension__ 182 #endif 183 184 #if __GNUC_PREREQ__(2, 8) 185 #define __statement(x) __extension__(x) 186 #elif defined(lint) 187 #define __statement(x) (0) 188 #else 189 #define __statement(x) (x) 190 #endif 191 192 #if __GNUC_PREREQ__(3, 0) 193 #define __malloc __attribute__((__malloc__)) 194 #else 195 #define __malloc 196 #endif 197 198 /* 199 * "The nice thing about standards is that there are so many to choose from." 200 * There are a number of "feature test macros" specified by (different) 201 * standards that determine which interfaces and types the header files 202 * should expose. 203 * 204 * Because of inconsistencies in these macros, we define our own 205 * set in the private name space that end in _VISIBLE. These are 206 * always defined and so headers can test their values easily. 207 * Things can get tricky when multiple feature macros are defined. 208 * We try to take the union of all the features requested. 209 * 210 * The following macros are guaranteed to have a value after cdefs.h 211 * has been included: 212 * __POSIX_VISIBLE 213 * __XPG_VISIBLE 214 * __ISO_C_VISIBLE 215 * __BSD_VISIBLE 216 */ 217 218 /* 219 * X/Open Portability Guides and Single Unix Specifications. 220 * _XOPEN_SOURCE XPG3 221 * _XOPEN_SOURCE && _XOPEN_VERSION = 4 XPG4 222 * _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED = 1 XPG4v2 223 * _XOPEN_SOURCE == 500 XPG5 224 * _XOPEN_SOURCE == 520 XPG5v2 225 * _XOPEN_SOURCE == 600 POSIX 1003.1-2001 with XSI 226 * 227 * The XPG spec implies a specific value for _POSIX_C_SOURCE. 228 */ 229 #ifdef _XOPEN_SOURCE 230 # if (_XOPEN_SOURCE - 0 >= 600) 231 # define __XPG_VISIBLE 600 232 # undef _POSIX_C_SOURCE 233 # define _POSIX_C_SOURCE 200112L 234 # elif (_XOPEN_SOURCE - 0 >= 520) 235 # define __XPG_VISIBLE 520 236 # undef _POSIX_C_SOURCE 237 # define _POSIX_C_SOURCE 199506L 238 # elif (_XOPEN_SOURCE - 0 >= 500) 239 # define __XPG_VISIBLE 500 240 # undef _POSIX_C_SOURCE 241 # define _POSIX_C_SOURCE 199506L 242 # elif (_XOPEN_SOURCE_EXTENDED - 0 == 1) 243 # define __XPG_VISIBLE 420 244 # elif (_XOPEN_VERSION - 0 >= 4) 245 # define __XPG_VISIBLE 400 246 # else 247 # define __XPG_VISIBLE 300 248 # endif 249 #endif 250 251 /* 252 * POSIX macros, these checks must follow the XOPEN ones above. 253 * 254 * _POSIX_SOURCE == 1 1003.1-1988 (superseded by _POSIX_C_SOURCE) 255 * _POSIX_C_SOURCE == 1 1003.1-1990 256 * _POSIX_C_SOURCE == 2 1003.2-1992 257 * _POSIX_C_SOURCE == 199309L 1003.1b-1993 258 * _POSIX_C_SOURCE == 199506L 1003.1c-1995, 1003.1i-1995, 259 * and the omnibus ISO/IEC 9945-1:1996 260 * _POSIX_C_SOURCE == 200112L 1003.1-2001 261 * 262 * The POSIX spec implies a specific value for __ISO_C_VISIBLE, though 263 * this may be overridden by the _ISOC99_SOURCE macro later. 264 */ 265 #ifdef _POSIX_C_SOURCE 266 # if (_POSIX_C_SOURCE - 0 >= 200112) 267 # define __POSIX_VISIBLE 200112 268 # define __ISO_C_VISIBLE 1999 269 # elif (_POSIX_C_SOURCE - 0 >= 199506) 270 # define __POSIX_VISIBLE 199506 271 # define __ISO_C_VISIBLE 1990 272 # elif (_POSIX_C_SOURCE - 0 >= 199309) 273 # define __POSIX_VISIBLE 199309 274 # define __ISO_C_VISIBLE 1990 275 # elif (_POSIX_C_SOURCE - 0 >= 2) 276 # define __POSIX_VISIBLE 199209 277 # define __ISO_C_VISIBLE 1990 278 # else 279 # define __POSIX_VISIBLE 199009 280 # define __ISO_C_VISIBLE 1990 281 # endif 282 #elif defined(_POSIX_SOURCE) 283 # define __POSIX_VISIBLE 198808 284 # define __ISO_C_VISIBLE 0 285 #endif 286 287 /* 288 * _ANSI_SOURCE means to expose ANSI C89 interfaces only. 289 * If the user defines it in addition to one of the POSIX or XOPEN 290 * macros, assume the POSIX/XOPEN macro(s) should take precedence. 291 */ 292 #if defined(_ANSI_SOURCE) && !defined(__POSIX_VISIBLE) && \ 293 !defined(__XPG_VISIBLE) 294 # define __POSIX_VISIBLE 0 295 # define __XPG_VISIBLE 0 296 # define __ISO_C_VISIBLE 1990 297 #endif 298 299 /* 300 * _ISOC99_SOURCE and __STDC_VERSION__ override any of the other macros since 301 * they are non-exclusive. 302 */ 303 #if defined(_ISOC99_SOURCE) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901) 304 # undef __ISO_C_VISIBLE 305 # define __ISO_C_VISIBLE 1999 306 #endif 307 308 /* 309 * Finally deal with BSD-specific interfaces that are not covered 310 * by any standards. We expose these when one of the POSIX or XPG 311 * macros is defined or if the user explicitly asks for them. 312 */ 313 #if !defined(_BSD_SOURCE) && \ 314 (defined(_ANSI_SOURCE) || defined(__XPG_VISIBLE) || defined(__POSIX_VISIBLE)) 315 # define __BSD_VISIBLE 0 316 #endif 317 318 /* 319 * Default values. 320 */ 321 #ifndef __XPG_VISIBLE 322 # define __XPG_VISIBLE 600 323 #endif 324 #ifndef __POSIX_VISIBLE 325 # define __POSIX_VISIBLE 200112 326 #endif 327 #ifndef __ISO_C_VISIBLE 328 # define __ISO_C_VISIBLE 1999 329 #endif 330 #ifndef __BSD_VISIBLE 331 # define __BSD_VISIBLE 1 332 #endif 333 334 #endif /* !_SYS_CDEFS_H_ */