1 /* $NetBSD: cdefs.h,v 1.58 2004/12/11 05:59:00 christos Exp $ */ 2 3 /* 4 * Copyright (c) 1991, 1993 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * Berkeley Software Design, Inc. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. Neither the name of the University nor the names of its contributors 19 * may be used to endorse or promote products derived from this software 20 * without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 * 34 * @(#)cdefs.h 8.8 (Berkeley) 1/9/95 35 */ 36 37 #ifndef _SYS_CDEFS_H_ 38 #define _SYS_CDEFS_H_ 39 40 /* 41 * Testing against Clang-specific extensions. 42 */ 43 44 #ifndef __has_extension 45 #define __has_extension __has_feature 46 #endif 47 #ifndef __has_feature 48 #define __has_feature(x) 0 49 #endif 50 #ifndef __has_include 51 #define __has_include(x) 0 52 #endif 53 #ifndef __has_builtin 54 #define __has_builtin(x) 0 55 #endif 56 #ifndef __has_attribute 57 #define __has_attribute(x) 0 58 #endif 59 60 61 /* 62 * Macro to test if we're using a GNU C compiler of a specific vintage 63 * or later, for e.g. features that appeared in a particular version 64 * of GNU C. Usage: 65 * 66 * #if __GNUC_PREREQ(major, minor) 67 * ...cool feature... 68 * #else 69 * ...delete feature... 70 * #endif 71 */ 72 #ifdef __GNUC__ 73 #define __GNUC_PREREQ(x, y) \ 74 ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \ 75 (__GNUC__ > (x))) 76 #else 77 #define __GNUC_PREREQ(x, y) 0 78 #endif 79 80 #define __strong_alias(alias, sym) \ 81 __asm__(".global " #alias "\n" \ 82 #alias " = " #sym); 83 84 #if defined(__cplusplus) 85 #define __BEGIN_DECLS extern "C" { 86 #define __END_DECLS } 87 #define __static_cast(x,y) static_cast<x>(y) 88 #else 89 #define __BEGIN_DECLS 90 #define __END_DECLS 91 #define __static_cast(x,y) (x)y 92 #endif 93 94 /* 95 * The __CONCAT macro is used to concatenate parts of symbol names, e.g. 96 * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo. 97 * The __CONCAT macro is a bit tricky -- make sure you don't put spaces 98 * in between its arguments. __CONCAT can also concatenate double-quoted 99 * strings produced by the __STRING macro, but this only works with ANSI C. 100 */ 101 102 #define ___STRING(x) __STRING(x) 103 #define ___CONCAT(x,y) __CONCAT(x,y) 104 105 #if defined(__STDC__) || defined(__cplusplus) 106 #define __P(protos) protos /* full-blown ANSI C */ 107 #define __CONCAT(x,y) x ## y 108 #define __STRING(x) #x 109 110 #define __const const /* define reserved names to standard */ 111 #define __signed signed 112 #define __volatile volatile 113 #if defined(__cplusplus) 114 #define __inline inline /* convert to C++ keyword */ 115 #else 116 #if !defined(__GNUC__) && !defined(__lint__) 117 #define __inline /* delete GCC keyword */ 118 #endif /* !__GNUC__ && !__lint__ */ 119 #endif /* !__cplusplus */ 120 121 #else /* !(__STDC__ || __cplusplus) */ 122 #define __P(protos) () /* traditional C preprocessor */ 123 #define __CONCAT(x,y) x/**/y 124 #define __STRING(x) "x" 125 126 #ifndef __GNUC__ 127 #define __const /* delete pseudo-ANSI C keywords */ 128 #define __inline 129 #define __signed 130 #define __volatile 131 #endif /* !__GNUC__ */ 132 133 /* 134 * In non-ANSI C environments, new programs will want ANSI-only C keywords 135 * deleted from the program and old programs will want them left alone. 136 * Programs using the ANSI C keywords const, inline etc. as normal 137 * identifiers should define -DNO_ANSI_KEYWORDS. 138 */ 139 #ifndef NO_ANSI_KEYWORDS 140 #define const __const /* convert ANSI C keywords */ 141 #define inline __inline 142 #define signed __signed 143 #define volatile __volatile 144 #endif /* !NO_ANSI_KEYWORDS */ 145 #endif /* !(__STDC__ || __cplusplus) */ 146 147 /* 148 * Used for internal auditing of the NetBSD source tree. 149 */ 150 #ifdef __AUDIT__ 151 #define __aconst __const 152 #else 153 #define __aconst 154 #endif 155 156 /* 157 * The following macro is used to remove const cast-away warnings 158 * from gcc -Wcast-qual; it should be used with caution because it 159 * can hide valid errors; in particular most valid uses are in 160 * situations where the API requires it, not to cast away string 161 * constants. We don't use *intptr_t on purpose here and we are 162 * explicit about unsigned long so that we don't have additional 163 * dependencies. 164 */ 165 #define __UNCONST(a) ((void *)(unsigned long)(const void *)(a)) 166 167 /* 168 * GCC2 provides __extension__ to suppress warnings for various GNU C 169 * language extensions under "-ansi -pedantic". 170 */ 171 #if !__GNUC_PREREQ(2, 0) 172 #define __extension__ /* delete __extension__ if non-gcc or gcc1 */ 173 #endif 174 175 /* 176 * GCC1 and some versions of GCC2 declare dead (non-returning) and 177 * pure (no side effects) functions using "volatile" and "const"; 178 * unfortunately, these then cause warnings under "-ansi -pedantic". 179 * GCC2 uses a new, peculiar __attribute__((attrs)) style. All of 180 * these work for GNU C++ (modulo a slight glitch in the C++ grammar 181 * in the distribution version of 2.5.5). 182 */ 183 #if !__GNUC_PREREQ(2, 5) 184 #define __attribute__(x) /* delete __attribute__ if non-gcc or gcc1 */ 185 #if defined(__GNUC__) && !defined(__STRICT_ANSI__) 186 #define __dead __volatile 187 #define __pure __const 188 #endif 189 #endif 190 191 /* Delete pseudo-keywords wherever they are not available or needed. */ 192 #ifndef __dead 193 #define __dead 194 #define __pure 195 #endif 196 197 #if __GNUC_PREREQ(2, 7) 198 #define __unused __attribute__((__unused__)) 199 #else 200 #define __unused /* delete */ 201 #endif 202 203 #define __pure2 __attribute__((__const__)) /* Android-added: used by FreeBSD libm */ 204 205 #if __GNUC_PREREQ(3, 1) 206 #define __used __attribute__((__used__)) 207 #else 208 #define __used /* delete */ 209 #endif 210 211 #if __GNUC_PREREQ(2, 7) 212 #define __packed __attribute__((__packed__)) 213 #define __aligned(x) __attribute__((__aligned__(x))) 214 #define __section(x) __attribute__((__section__(x))) 215 #elif defined(__lint__) 216 #define __packed /* delete */ 217 #define __aligned(x) /* delete */ 218 #define __section(x) /* delete */ 219 #else 220 #define __packed error: no __packed for this compiler 221 #define __aligned(x) error: no __aligned for this compiler 222 #define __section(x) error: no __section for this compiler 223 #endif 224 225 #if !__GNUC_PREREQ(2, 8) 226 #define __extension__ 227 #endif 228 229 #if __GNUC_PREREQ(2, 8) 230 #define __statement(x) __extension__(x) 231 #elif defined(lint) 232 #define __statement(x) (0) 233 #else 234 #define __statement(x) (x) 235 #endif 236 237 #define __nonnull(args) __attribute__((__nonnull__ args)) 238 239 #define __printflike(x, y) __attribute__((__format__(printf, x, y))) __nonnull((x)) 240 #define __scanflike(x, y) __attribute__((__format__(scanf, x, y))) __nonnull((x)) 241 242 /* 243 * C99 defines the restrict type qualifier keyword, which was made available 244 * in GCC 2.92. 245 */ 246 #if defined(__STDC__VERSION__) && __STDC_VERSION__ >= 199901L 247 #define __restrict restrict 248 #else 249 #if !__GNUC_PREREQ(2, 92) 250 #define __restrict /* delete __restrict when not supported */ 251 #endif 252 #endif 253 254 /* 255 * C99 defines __func__ predefined identifier, which was made available 256 * in GCC 2.95. 257 */ 258 #if !defined(__STDC_VERSION__) || !(__STDC_VERSION__ >= 199901L) 259 #if __GNUC_PREREQ(2, 6) 260 #define __func__ __PRETTY_FUNCTION__ 261 #elif __GNUC_PREREQ(2, 4) 262 #define __func__ __FUNCTION__ 263 #else 264 #define __func__ "" 265 #endif 266 #endif /* !(__STDC_VERSION__ >= 199901L) */ 267 268 /* 269 * A barrier to stop the optimizer from moving code or assume live 270 * register values. This is gcc specific, the version is more or less 271 * arbitrary, might work with older compilers. 272 */ 273 #if __GNUC_PREREQ(2, 95) 274 #define __insn_barrier() __asm __volatile("":::"memory") 275 #else 276 #define __insn_barrier() /* */ 277 #endif 278 279 /* 280 * GNU C version 2.96 adds explicit branch prediction so that 281 * the CPU back-end can hint the processor and also so that 282 * code blocks can be reordered such that the predicted path 283 * sees a more linear flow, thus improving cache behavior, etc. 284 * 285 * The following two macros provide us with a way to use this 286 * compiler feature. Use __predict_true() if you expect the expression 287 * to evaluate to true, and __predict_false() if you expect the 288 * expression to evaluate to false. 289 * 290 * A few notes about usage: 291 * 292 * * Generally, __predict_false() error condition checks (unless 293 * you have some _strong_ reason to do otherwise, in which case 294 * document it), and/or __predict_true() `no-error' condition 295 * checks, assuming you want to optimize for the no-error case. 296 * 297 * * Other than that, if you don't know the likelihood of a test 298 * succeeding from empirical or other `hard' evidence, don't 299 * make predictions. 300 * 301 * * These are meant to be used in places that are run `a lot'. 302 * It is wasteful to make predictions in code that is run 303 * seldomly (e.g. at subsystem initialization time) as the 304 * basic block reordering that this affects can often generate 305 * larger code. 306 */ 307 #if __GNUC_PREREQ(2, 96) 308 #define __predict_true(exp) __builtin_expect((exp) != 0, 1) 309 #define __predict_false(exp) __builtin_expect((exp) != 0, 0) 310 #else 311 #define __predict_true(exp) (exp) 312 #define __predict_false(exp) (exp) 313 #endif 314 315 #if __GNUC_PREREQ(2, 96) 316 #define __noreturn __attribute__((__noreturn__)) 317 #define __mallocfunc __attribute__((malloc)) 318 #define __purefunc __attribute__((pure)) 319 #else 320 #define __noreturn 321 #define __mallocfunc 322 #define __purefunc 323 #endif 324 325 #if __GNUC_PREREQ(3, 1) 326 #define __always_inline __attribute__((__always_inline__)) 327 #else 328 #define __always_inline 329 #endif 330 331 #if __GNUC_PREREQ(3, 4) 332 #define __wur __attribute__((__warn_unused_result__)) 333 #else 334 #define __wur 335 #endif 336 337 #if __GNUC_PREREQ(4, 3) 338 #define __errorattr(msg) __attribute__((__error__(msg))) 339 #define __warnattr(msg) __attribute__((__warning__(msg))) 340 #else 341 #define __errorattr(msg) 342 #define __warnattr(msg) 343 #endif 344 345 #define __errordecl(name, msg) extern void name(void) __errorattr(msg) 346 347 /* 348 * Some BSD source needs these macros. 349 * Originally they embedded the rcs versions of each source file 350 * in the generated binary. We strip strings during build anyway,. 351 */ 352 #define __IDSTRING(_prefix,_s) /* nothing */ 353 #define __COPYRIGHT(_s) /* nothing */ 354 #define __FBSDID(_s) /* nothing */ 355 #define __RCSID(_s) /* nothing */ 356 #define __SCCSID(_s) /* nothing */ 357 358 /* 359 * _BSD_SOURCE and _GNU_SOURCE are expected to be defined by callers before 360 * any standard header file is included. In those header files we test 361 * against __USE_BSD and __USE_GNU. glibc does this in <features.h> but we 362 * do it in <sys/cdefs.h> instead because that's where our existing 363 * _POSIX_C_SOURCE tests were, and we're already confident that <sys/cdefs.h> 364 * is included everywhere it should be. 365 * 366 * The _GNU_SOURCE test needs to come before any _BSD_SOURCE or _POSIX* tests 367 * because _GNU_SOURCE implies everything else. 368 */ 369 #if defined(_GNU_SOURCE) 370 # define __USE_GNU 1 371 # undef _POSIX_SOURCE 372 # define _POSIX_SOURCE 1 373 # undef _POSIX_C_SOURCE 374 # define _POSIX_C_SOURCE 200809L 375 # undef _BSD_SOURCE 376 # define _BSD_SOURCE 1 377 #endif 378 379 #if defined(_BSD_SOURCE) 380 # define __USE_BSD 1 381 #endif 382 383 /* 384 * _FILE_OFFSET_BITS 64 support. 385 */ 386 #if !defined(__LP64__) && defined(_FILE_OFFSET_BITS) 387 #if _FILE_OFFSET_BITS == 64 388 #define __USE_FILE_OFFSET64 1 389 #endif 390 #endif 391 392 /*- 393 * POSIX.1 requires that the macros we test be defined before any standard 394 * header file is included. 395 * 396 * Here's a quick run-down of the versions: 397 * defined(_POSIX_SOURCE) 1003.1-1988 398 * _POSIX_C_SOURCE == 1 1003.1-1990 399 * _POSIX_C_SOURCE == 2 1003.2-1992 C Language Binding Option 400 * _POSIX_C_SOURCE == 199309 1003.1b-1993 401 * _POSIX_C_SOURCE == 199506 1003.1c-1995, 1003.1i-1995, 402 * and the omnibus ISO/IEC 9945-1: 1996 403 * _POSIX_C_SOURCE == 200112 1003.1-2001 404 * _POSIX_C_SOURCE == 200809 1003.1-2008 405 * 406 * In addition, the X/Open Portability Guide, which is now the Single UNIX 407 * Specification, defines a feature-test macro which indicates the version of 408 * that specification, and which subsumes _POSIX_C_SOURCE. 409 * 410 * Our macros begin with two underscores to avoid namespace screwage. 411 */ 412 413 /* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */ 414 #if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1 415 #undef _POSIX_C_SOURCE /* Probably illegal, but beyond caring now. */ 416 #define _POSIX_C_SOURCE 199009 417 #endif 418 419 /* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */ 420 #if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2 421 #undef _POSIX_C_SOURCE 422 #define _POSIX_C_SOURCE 199209 423 #endif 424 425 /* Deal with various X/Open Portability Guides and Single UNIX Spec. */ 426 #ifdef _XOPEN_SOURCE 427 #if _XOPEN_SOURCE - 0 >= 700 428 #define __XSI_VISIBLE 700 429 #undef _POSIX_C_SOURCE 430 #define _POSIX_C_SOURCE 200809 431 #elif _XOPEN_SOURCE - 0 >= 600 432 #define __XSI_VISIBLE 600 433 #undef _POSIX_C_SOURCE 434 #define _POSIX_C_SOURCE 200112 435 #elif _XOPEN_SOURCE - 0 >= 500 436 #define __XSI_VISIBLE 500 437 #undef _POSIX_C_SOURCE 438 #define _POSIX_C_SOURCE 199506 439 #endif 440 #endif 441 442 /* 443 * Deal with all versions of POSIX. The ordering relative to the tests above is 444 * important. 445 */ 446 #if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) 447 #define _POSIX_C_SOURCE 198808 448 #endif 449 #ifdef _POSIX_C_SOURCE 450 #if _POSIX_C_SOURCE >= 200809 451 #define __POSIX_VISIBLE 200809 452 #define __ISO_C_VISIBLE 1999 453 #elif _POSIX_C_SOURCE >= 200112 454 #define __POSIX_VISIBLE 200112 455 #define __ISO_C_VISIBLE 1999 456 #elif _POSIX_C_SOURCE >= 199506 457 #define __POSIX_VISIBLE 199506 458 #define __ISO_C_VISIBLE 1990 459 #elif _POSIX_C_SOURCE >= 199309 460 #define __POSIX_VISIBLE 199309 461 #define __ISO_C_VISIBLE 1990 462 #elif _POSIX_C_SOURCE >= 199209 463 #define __POSIX_VISIBLE 199209 464 #define __ISO_C_VISIBLE 1990 465 #elif _POSIX_C_SOURCE >= 199009 466 #define __POSIX_VISIBLE 199009 467 #define __ISO_C_VISIBLE 1990 468 #else 469 #define __POSIX_VISIBLE 198808 470 #define __ISO_C_VISIBLE 0 471 #endif /* _POSIX_C_SOURCE */ 472 #else 473 /*- 474 * Deal with _ANSI_SOURCE: 475 * If it is defined, and no other compilation environment is explicitly 476 * requested, then define our internal feature-test macros to zero. This 477 * makes no difference to the preprocessor (undefined symbols in preprocessing 478 * expressions are defined to have value zero), but makes it more convenient for 479 * a test program to print out the values. 480 * 481 * If a program mistakenly defines _ANSI_SOURCE and some other macro such as 482 * _POSIX_C_SOURCE, we will assume that it wants the broader compilation 483 * environment (and in fact we will never get here). 484 */ 485 #if defined(_ANSI_SOURCE) /* Hide almost everything. */ 486 #define __POSIX_VISIBLE 0 487 #define __XSI_VISIBLE 0 488 #define __BSD_VISIBLE 0 489 #define __ISO_C_VISIBLE 1990 490 #elif defined(_C99_SOURCE) /* Localism to specify strict C99 env. */ 491 #define __POSIX_VISIBLE 0 492 #define __XSI_VISIBLE 0 493 #define __BSD_VISIBLE 0 494 #define __ISO_C_VISIBLE 1999 495 #else /* Default environment: show everything. */ 496 #define __POSIX_VISIBLE 200809 497 #define __XSI_VISIBLE 700 498 #define __BSD_VISIBLE 1 499 #define __ISO_C_VISIBLE 1999 500 #endif 501 #endif 502 503 /* 504 * Default values. 505 */ 506 #ifndef __XPG_VISIBLE 507 # define __XPG_VISIBLE 700 508 #endif 509 #ifndef __POSIX_VISIBLE 510 # define __POSIX_VISIBLE 200809 511 #endif 512 #ifndef __ISO_C_VISIBLE 513 # define __ISO_C_VISIBLE 1999 514 #endif 515 #ifndef __BSD_VISIBLE 516 # define __BSD_VISIBLE 1 517 #endif 518 519 #define __BIONIC__ 1 520 #include <android/api-level.h> 521 522 /* glibc compatibility. */ 523 #if __LP64__ 524 #define __WORDSIZE 64 525 #else 526 #define __WORDSIZE 32 527 #endif 528 529 /* 530 * When _FORTIFY_SOURCE is defined, automatic bounds checking is 531 * added to commonly used libc functions. If a buffer overrun is 532 * detected, the program is safely aborted. 533 * 534 * See 535 * http://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html for details. 536 */ 537 #if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 && defined(__OPTIMIZE__) && __OPTIMIZE__ > 0 538 #define __BIONIC_FORTIFY 1 539 #if _FORTIFY_SOURCE == 2 540 #define __bos(s) __builtin_object_size((s), 1) 541 #else 542 #define __bos(s) __builtin_object_size((s), 0) 543 #endif 544 #define __bos0(s) __builtin_object_size((s), 0) 545 546 #if __GNUC_PREREQ(4,3) || __has_attribute(__artificial__) 547 #define __BIONIC_FORTIFY_INLINE extern __inline__ __always_inline __attribute__((gnu_inline)) __attribute__((__artificial__)) 548 #else 549 #define __BIONIC_FORTIFY_INLINE extern __inline__ __always_inline __attribute__((gnu_inline)) 550 #endif 551 #endif 552 #define __BIONIC_FORTIFY_UNKNOWN_SIZE ((size_t) -1) 553 554 /* Used to tag non-static symbols that are private and never exposed by the shared library. */ 555 #define __LIBC_HIDDEN__ __attribute__((visibility("hidden"))) 556 557 /* Like __LIBC_HIDDEN__, but preserves binary compatibility for LP32. */ 558 #ifdef __LP64__ 559 #define __LIBC64_HIDDEN__ __LIBC_HIDDEN__ 560 #else 561 #define __LIBC64_HIDDEN__ __LIBC_ABI_PUBLIC__ 562 #endif 563 564 /* Used to tag non-static symbols that are public and exposed by the shared library. */ 565 #define __LIBC_ABI_PUBLIC__ __attribute__((visibility ("default"))) 566 567 /* Used to rename functions so that the compiler emits a call to 'x' rather than the function this was applied to. */ 568 #define __RENAME(x) __asm__(#x) 569 570 #if __ANDROID_API__ >= 21 571 #define _BIONIC_NOT_BEFORE_21(x) x 572 #else 573 #define _BIONIC_NOT_BEFORE_21(x) 574 #endif /* __ANDROID_API__ >= 21 */ 575 576 #endif /* !_SYS_CDEFS_H_ */ 577