17372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* $NetBSD: cdefs.h,v 1.58 2004/12/11 05:59:00 christos Exp $ */ 27372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 37372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 47372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Copyright (c) 1991, 1993 57372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * The Regents of the University of California. All rights reserved. 67372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 77372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * This code is derived from software contributed to Berkeley by 87372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Berkeley Software Design, Inc. 97372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 107372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Redistribution and use in source and binary forms, with or without 117372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * modification, are permitted provided that the following conditions 127372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * are met: 137372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 1. Redistributions of source code must retain the above copyright 147372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * notice, this list of conditions and the following disclaimer. 157372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 2. Redistributions in binary form must reproduce the above copyright 167372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * notice, this list of conditions and the following disclaimer in the 177372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * documentation and/or other materials provided with the distribution. 187372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3. Neither the name of the University nor the names of its contributors 197372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * may be used to endorse or promote products derived from this software 207372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * without specific prior written permission. 217372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 227372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 237372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 247372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 257372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 267372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 277372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 287372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 297372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 307372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 317372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 327372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * SUCH DAMAGE. 337372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 347372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * @(#)cdefs.h 8.8 (Berkeley) 1/9/95 357372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 367372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 377372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifndef _SYS_CDEFS_H_ 387372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define _SYS_CDEFS_H_ 397372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 407372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 41244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh * Testing against Clang-specific extensions. 42244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh */ 43244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh 44244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#ifndef __has_extension 45244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#define __has_extension __has_feature 46244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#endif 47244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#ifndef __has_feature 48244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#define __has_feature(x) 0 49244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#endif 50244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#ifndef __has_include 51244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#define __has_include(x) 0 52244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#endif 53244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#ifndef __has_builtin 54244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#define __has_builtin(x) 0 55244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh#endif 56244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh 57244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh 58244dca2ed2a3f87b0f93d23f1bc2ea0ba9c8d783Andrew Hsieh/* 597372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Macro to test if we're using a GNU C compiler of a specific vintage 607372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * or later, for e.g. features that appeared in a particular version 617372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * of GNU C. Usage: 627372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 6370265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh * #if __GNUC_PREREQ(major, minor) 647372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * ...cool feature... 657372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * #else 667372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * ...delete feature... 677372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * #endif 687372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 697372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifdef __GNUC__ 7070265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#define __GNUC_PREREQ(x, y) \ 717372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \ 727372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh (__GNUC__ > (x))) 737372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 7470265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#define __GNUC_PREREQ(x, y) 0 757372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 767372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 777372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#include <sys/cdefs_elf.h> 787372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 797372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(__cplusplus) 807372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __BEGIN_DECLS extern "C" { 817372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __END_DECLS } 827372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __static_cast(x,y) static_cast<x>(y) 837372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 847372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __BEGIN_DECLS 857372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __END_DECLS 867372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __static_cast(x,y) (x)y 877372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 887372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 897372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 907372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * The __CONCAT macro is used to concatenate parts of symbol names, e.g. 917372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo. 927372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * The __CONCAT macro is a bit tricky -- make sure you don't put spaces 937372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * in between its arguments. __CONCAT can also concatenate double-quoted 947372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * strings produced by the __STRING macro, but this only works with ANSI C. 957372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 967372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 977372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define ___STRING(x) __STRING(x) 987372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define ___CONCAT(x,y) __CONCAT(x,y) 997372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1007372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(__STDC__) || defined(__cplusplus) 1017372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __P(protos) protos /* full-blown ANSI C */ 1027372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __CONCAT(x,y) x ## y 1037372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __STRING(x) #x 1047372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1057372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __const const /* define reserved names to standard */ 1067372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __signed signed 1077372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __volatile volatile 1087372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(__cplusplus) 1097372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __inline inline /* convert to C++ keyword */ 1107372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 1117372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if !defined(__GNUC__) && !defined(__lint__) 1127372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __inline /* delete GCC keyword */ 1137372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* !__GNUC__ && !__lint__ */ 1147372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* !__cplusplus */ 1157372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1167372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else /* !(__STDC__ || __cplusplus) */ 1177372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __P(protos) () /* traditional C preprocessor */ 1187372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __CONCAT(x,y) x/**/y 1197372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __STRING(x) "x" 1207372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1217372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifndef __GNUC__ 1227372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __const /* delete pseudo-ANSI C keywords */ 1237372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __inline 1247372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __signed 1257372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __volatile 1267372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* !__GNUC__ */ 1277372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1287372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 1297372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * In non-ANSI C environments, new programs will want ANSI-only C keywords 1307372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * deleted from the program and old programs will want them left alone. 1317372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Programs using the ANSI C keywords const, inline etc. as normal 1327372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * identifiers should define -DNO_ANSI_KEYWORDS. 1337372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 1347372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifndef NO_ANSI_KEYWORDS 1357372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define const __const /* convert ANSI C keywords */ 1367372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define inline __inline 1377372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define signed __signed 1387372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define volatile __volatile 1397372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* !NO_ANSI_KEYWORDS */ 1407372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* !(__STDC__ || __cplusplus) */ 1417372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1427372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 1437372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Used for internal auditing of the NetBSD source tree. 1447372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 1457372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifdef __AUDIT__ 1467372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __aconst __const 1477372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 1487372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __aconst 1497372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 1507372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1517372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 1527372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * The following macro is used to remove const cast-away warnings 1537372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * from gcc -Wcast-qual; it should be used with caution because it 1547372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * can hide valid errors; in particular most valid uses are in 1557372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * situations where the API requires it, not to cast away string 1567372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * constants. We don't use *intptr_t on purpose here and we are 1577372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * explicit about unsigned long so that we don't have additional 1587372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * dependencies. 1597372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 1607372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __UNCONST(a) ((void *)(unsigned long)(const void *)(a)) 1617372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1627372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 1637372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * GCC2 provides __extension__ to suppress warnings for various GNU C 1647372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * language extensions under "-ansi -pedantic". 1657372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 16670265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if !__GNUC_PREREQ(2, 0) 1677372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __extension__ /* delete __extension__ if non-gcc or gcc1 */ 1687372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 1697372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1707372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 1717372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * GCC1 and some versions of GCC2 declare dead (non-returning) and 1727372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * pure (no side effects) functions using "volatile" and "const"; 1737372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * unfortunately, these then cause warnings under "-ansi -pedantic". 1747372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * GCC2 uses a new, peculiar __attribute__((attrs)) style. All of 1757372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * these work for GNU C++ (modulo a slight glitch in the C++ grammar 1767372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * in the distribution version of 2.5.5). 1777372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 17870265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if !__GNUC_PREREQ(2, 5) 1797372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __attribute__(x) /* delete __attribute__ if non-gcc or gcc1 */ 1807372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(__GNUC__) && !defined(__STRICT_ANSI__) 1817372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __dead __volatile 1827372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __pure __const 1837372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 1847372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 1857372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1867372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* Delete pseudo-keywords wherever they are not available or needed. */ 1877372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifndef __dead 1887372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __dead 1897372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __pure 1907372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 1917372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 19270265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(2, 7) 1937372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __unused __attribute__((__unused__)) 1947372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 1957372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __unused /* delete */ 1967372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 1977372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 1987372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __pure2 __attribute__((__const__)) /* Android-added: used by FreeBSD libm */ 1997372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 20070265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(3, 1) 2017372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __used __attribute__((__used__)) 2027372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 2037372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __used /* delete */ 2047372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 2057372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 20670265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(2, 7) 2077372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __packed __attribute__((__packed__)) 2087372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __aligned(x) __attribute__((__aligned__(x))) 2097372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __section(x) __attribute__((__section__(x))) 2107372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#elif defined(__lint__) 2117372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __packed /* delete */ 2127372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __aligned(x) /* delete */ 2137372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __section(x) /* delete */ 2147372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 2157372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __packed error: no __packed for this compiler 2167372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __aligned(x) error: no __aligned for this compiler 2177372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __section(x) error: no __section for this compiler 2187372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 2197372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 22070265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if !__GNUC_PREREQ(2, 8) 2217372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __extension__ 2227372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 2237372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 22470265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(2, 8) 2257372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __statement(x) __extension__(x) 2267372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#elif defined(lint) 2277372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __statement(x) (0) 2287372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 2297372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __statement(x) (x) 2307372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 2317372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 2327372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __nonnull(args) __attribute__((__nonnull__ args)) 2337372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 2347372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __printflike(x, y) __attribute__((__format__(printf, x, y))) __nonnull((x)) 2357372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __scanflike(x, y) __attribute__((__format__(scanf, x, y))) __nonnull((x)) 2367372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 2377372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 2387372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * C99 defines the restrict type qualifier keyword, which was made available 2397372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * in GCC 2.92. 2407372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 2417372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(__STDC__VERSION__) && __STDC_VERSION__ >= 199901L 2427372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __restrict restrict 2437372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 24470265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if !__GNUC_PREREQ(2, 92) 2457372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __restrict /* delete __restrict when not supported */ 2467372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 2477372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 2487372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 2497372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 2507372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * C99 defines __func__ predefined identifier, which was made available 2517372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * in GCC 2.95. 2527372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 2537372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if !defined(__STDC_VERSION__) || !(__STDC_VERSION__ >= 199901L) 25470265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(2, 6) 2557372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __func__ __PRETTY_FUNCTION__ 25670265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#elif __GNUC_PREREQ(2, 4) 2577372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __func__ __FUNCTION__ 2587372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 2597372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __func__ "" 2607372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 2617372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* !(__STDC_VERSION__ >= 199901L) */ 2627372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 2637372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(_KERNEL) 2647372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(NO_KERNEL_RCSIDS) 2657372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#undef __KERNEL_RCSID 2667372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __KERNEL_RCSID(_n, _s) /* nothing */ 2677372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* NO_KERNEL_RCSIDS */ 2687372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* _KERNEL */ 2697372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 2707372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if !defined(_STANDALONE) && !defined(_KERNEL) 2717372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifdef __GNUC__ 2727372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __RENAME(x) ___RENAME(x) 2737372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 2747372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifdef __lint__ 2757372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __RENAME(x) __symbolrename(x) 2767372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 2777372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#error "No function renaming possible" 2787372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* __lint__ */ 2797372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* __GNUC__ */ 2807372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else /* _STANDALONE || _KERNEL */ 2817372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __RENAME(x) no renaming in kernel or standalone environment 2827372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 2837372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 2847372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 2857372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * A barrier to stop the optimizer from moving code or assume live 2867372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * register values. This is gcc specific, the version is more or less 2877372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * arbitrary, might work with older compilers. 2887372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 28970265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(2, 95) 2907372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __insn_barrier() __asm __volatile("":::"memory") 2917372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 2927372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __insn_barrier() /* */ 2937372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 2947372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 2957372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 2967372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * GNU C version 2.96 adds explicit branch prediction so that 2977372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * the CPU back-end can hint the processor and also so that 2987372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * code blocks can be reordered such that the predicted path 2997372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * sees a more linear flow, thus improving cache behavior, etc. 3007372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3017372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * The following two macros provide us with a way to use this 3027372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * compiler feature. Use __predict_true() if you expect the expression 3037372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * to evaluate to true, and __predict_false() if you expect the 3047372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * expression to evaluate to false. 3057372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3067372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * A few notes about usage: 3077372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3087372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * * Generally, __predict_false() error condition checks (unless 3097372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * you have some _strong_ reason to do otherwise, in which case 3107372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * document it), and/or __predict_true() `no-error' condition 3117372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * checks, assuming you want to optimize for the no-error case. 3127372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3137372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * * Other than that, if you don't know the likelihood of a test 3147372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * succeeding from empirical or other `hard' evidence, don't 3157372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * make predictions. 3167372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3177372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * * These are meant to be used in places that are run `a lot'. 3187372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * It is wasteful to make predictions in code that is run 3197372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * seldomly (e.g. at subsystem initialization time) as the 3207372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * basic block reordering that this affects can often generate 3217372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * larger code. 3227372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 32370265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(2, 96) 3247372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __predict_true(exp) __builtin_expect((exp) != 0, 1) 3257372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __predict_false(exp) __builtin_expect((exp) != 0, 0) 3267372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 3277372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __predict_true(exp) (exp) 3287372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __predict_false(exp) (exp) 3297372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 3307372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 33170265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(2, 96) 3327372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __noreturn __attribute__((__noreturn__)) 3337372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __mallocfunc __attribute__((malloc)) 3347372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __purefunc __attribute__((pure)) 3357372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 3367372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __noreturn 3377372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __mallocfunc 3387372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __purefunc 3397372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 3407372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 34170265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(3, 1) 3427372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __always_inline __attribute__((__always_inline__)) 3437372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 3447372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __always_inline 3457372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 3467372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 34770265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(3, 4) 3487372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __wur __attribute__((__warn_unused_result__)) 3497372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 3507372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __wur 3517372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 3527372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 35370265c95acca4be96f4c82ad80645e67fe718094Andrew Hsieh#if __GNUC_PREREQ(4, 3) 3547372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __errordecl(name, msg) extern void name(void) __attribute__((__error__(msg))) 3557372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __warnattr(msg) __attribute__((__warning__(msg))) 3567372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 3577372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __errordecl(name, msg) extern void name(void) 3587372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __warnattr(msg) 3597372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 3607372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 3617372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 3627372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Macros for manipulating "link sets". Link sets are arrays of pointers 3637372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * to objects, which are gathered up by the linker. 3647372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3657372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Object format-specific code has provided us with the following macros: 3667372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3677372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * __link_set_add_text(set, sym) 3687372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Add a reference to the .text symbol `sym' to `set'. 3697372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3707372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * __link_set_add_rodata(set, sym) 3717372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Add a reference to the .rodata symbol `sym' to `set'. 3727372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3737372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * __link_set_add_data(set, sym) 3747372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Add a reference to the .data symbol `sym' to `set'. 3757372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3767372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * __link_set_add_bss(set, sym) 3777372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Add a reference to the .bss symbol `sym' to `set'. 3787372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3797372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * __link_set_decl(set, ptype) 3807372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Provide an extern declaration of the set `set', which 3817372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * contains an array of the pointer type `ptype'. This 3827372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * macro must be used by any code which wishes to reference 3837372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * the elements of a link set. 3847372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3857372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * __link_set_start(set) 3867372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * This points to the first slot in the link set. 3877372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3887372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * __link_set_end(set) 3897372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * This points to the (non-existent) slot after the last 3907372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * entry in the link set. 3917372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3927372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * __link_set_count(set) 3937372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Count the number of entries in link set `set'. 3947372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3957372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * In addition, we provide the following macros for accessing link sets: 3967372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 3977372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * __link_set_foreach(pvar, set) 3987372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Iterate over the link set `set'. Because a link set is 3997372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * an array of pointers, pvar must be declared as "type **pvar", 4007372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * and the actual entry accessed as "*pvar". 4017372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 4027372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * __link_set_entry(set, idx) 4037372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Access the link set entry at index `idx' from set `set'. 4047372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 4057372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __link_set_foreach(pvar, set) \ 4067372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh for (pvar = __link_set_start(set); pvar < __link_set_end(set); pvar++) 4077372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 4087372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __link_set_entry(set, idx) (__link_set_begin(set)[idx]) 4097372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 4107372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 4117372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Some of the FreeBSD sources used in Bionic need this. 4127372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Originally, this is used to embed the rcs versions of each source file 4137372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * in the generated binary. We certainly don't want this in Bionic. 4147372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 4157372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __FBSDID(s) /* nothing */ 4167372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 4177372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/*- 4187372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * The following definitions are an extension of the behavior originally 4197372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * implemented in <sys/_posix.h>, but with a different level of granularity. 4207372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * POSIX.1 requires that the macros we test be defined before any standard 4217372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * header file is included. 4227372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 4237372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Here's a quick run-down of the versions: 4247372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * defined(_POSIX_SOURCE) 1003.1-1988 4257372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * _POSIX_C_SOURCE == 1 1003.1-1990 4267372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * _POSIX_C_SOURCE == 2 1003.2-1992 C Language Binding Option 4277372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * _POSIX_C_SOURCE == 199309 1003.1b-1993 4287372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * _POSIX_C_SOURCE == 199506 1003.1c-1995, 1003.1i-1995, 4297372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * and the omnibus ISO/IEC 9945-1: 1996 4307372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * _POSIX_C_SOURCE == 200112 1003.1-2001 4317372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * _POSIX_C_SOURCE == 200809 1003.1-2008 4327372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 4337372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * In addition, the X/Open Portability Guide, which is now the Single UNIX 4347372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Specification, defines a feature-test macro which indicates the version of 4357372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * that specification, and which subsumes _POSIX_C_SOURCE. 4367372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 4377372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Our macros begin with two underscores to avoid namespace screwage. 4387372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 4397372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 4407372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */ 4417372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1 4427372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#undef _POSIX_C_SOURCE /* Probably illegal, but beyond caring now. */ 4437372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define _POSIX_C_SOURCE 199009 4447372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 4457372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 4467372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */ 4477372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2 4487372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#undef _POSIX_C_SOURCE 4497372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define _POSIX_C_SOURCE 199209 4507372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 4517372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 4527372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* Deal with various X/Open Portability Guides and Single UNIX Spec. */ 4537372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifdef _XOPEN_SOURCE 4547372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if _XOPEN_SOURCE - 0 >= 700 4557372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __XSI_VISIBLE 700 4567372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#undef _POSIX_C_SOURCE 4577372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define _POSIX_C_SOURCE 200809 4587372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#elif _XOPEN_SOURCE - 0 >= 600 4597372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __XSI_VISIBLE 600 4607372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#undef _POSIX_C_SOURCE 4617372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define _POSIX_C_SOURCE 200112 4627372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#elif _XOPEN_SOURCE - 0 >= 500 4637372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __XSI_VISIBLE 500 4647372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#undef _POSIX_C_SOURCE 4657372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define _POSIX_C_SOURCE 199506 4667372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 4677372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 4687372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 4697372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 4707372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Deal with all versions of POSIX. The ordering relative to the tests above is 4717372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * important. 4727372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 4737372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) 4747372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define _POSIX_C_SOURCE 198808 4757372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 4767372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifdef _POSIX_C_SOURCE 4777372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if _POSIX_C_SOURCE >= 200809 4787372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __POSIX_VISIBLE 200809 4797372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __ISO_C_VISIBLE 1999 4807372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#elif _POSIX_C_SOURCE >= 200112 4817372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __POSIX_VISIBLE 200112 4827372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __ISO_C_VISIBLE 1999 4837372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#elif _POSIX_C_SOURCE >= 199506 4847372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __POSIX_VISIBLE 199506 4857372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __ISO_C_VISIBLE 1990 4867372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#elif _POSIX_C_SOURCE >= 199309 4877372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __POSIX_VISIBLE 199309 4887372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __ISO_C_VISIBLE 1990 4897372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#elif _POSIX_C_SOURCE >= 199209 4907372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __POSIX_VISIBLE 199209 4917372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __ISO_C_VISIBLE 1990 4927372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#elif _POSIX_C_SOURCE >= 199009 4937372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __POSIX_VISIBLE 199009 4947372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __ISO_C_VISIBLE 1990 4957372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 4967372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __POSIX_VISIBLE 198808 4977372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __ISO_C_VISIBLE 0 4987372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* _POSIX_C_SOURCE */ 4997372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 5007372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/*- 5017372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Deal with _ANSI_SOURCE: 5027372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * If it is defined, and no other compilation environment is explicitly 5037372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * requested, then define our internal feature-test macros to zero. This 5047372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * makes no difference to the preprocessor (undefined symbols in preprocessing 5057372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * expressions are defined to have value zero), but makes it more convenient for 5067372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * a test program to print out the values. 5077372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 5087372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * If a program mistakenly defines _ANSI_SOURCE and some other macro such as 5097372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * _POSIX_C_SOURCE, we will assume that it wants the broader compilation 5107372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * environment (and in fact we will never get here). 5117372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 5127372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(_ANSI_SOURCE) /* Hide almost everything. */ 5137372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __POSIX_VISIBLE 0 5147372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __XSI_VISIBLE 0 5157372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __BSD_VISIBLE 0 5167372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __ISO_C_VISIBLE 1990 5177372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#elif defined(_C99_SOURCE) /* Localism to specify strict C99 env. */ 5187372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __POSIX_VISIBLE 0 5197372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __XSI_VISIBLE 0 5207372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __BSD_VISIBLE 0 5217372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __ISO_C_VISIBLE 1999 5227372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else /* Default environment: show everything. */ 5237372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __POSIX_VISIBLE 200809 5247372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __XSI_VISIBLE 700 5257372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __BSD_VISIBLE 1 5267372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __ISO_C_VISIBLE 1999 5277372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 5287372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 5297372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 5307372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 5317372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * Default values. 5327372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 5337372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifndef __XPG_VISIBLE 5347372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh# define __XPG_VISIBLE 700 5357372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 5367372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifndef __POSIX_VISIBLE 5377372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh# define __POSIX_VISIBLE 200809 5387372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 5397372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifndef __ISO_C_VISIBLE 5407372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh# define __ISO_C_VISIBLE 1999 5417372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 5427372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#ifndef __BSD_VISIBLE 5437372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh# define __BSD_VISIBLE 1 5447372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 5457372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 5467372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __BIONIC__ 1 5477372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#include <android/api-level.h> 5487372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 549e003ef06f962ca294f8dc9e66ad607d15c2d7b9eAndrew Hsieh/* glibc compatibility. */ 550e003ef06f962ca294f8dc9e66ad607d15c2d7b9eAndrew Hsieh#if __LP64__ 551e003ef06f962ca294f8dc9e66ad607d15c2d7b9eAndrew Hsieh#define __WORDSIZE 64 552e003ef06f962ca294f8dc9e66ad607d15c2d7b9eAndrew Hsieh#else 553e003ef06f962ca294f8dc9e66ad607d15c2d7b9eAndrew Hsieh#define __WORDSIZE 32 554e003ef06f962ca294f8dc9e66ad607d15c2d7b9eAndrew Hsieh#endif 555e003ef06f962ca294f8dc9e66ad607d15c2d7b9eAndrew Hsieh 5567372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh/* 5577372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * When _FORTIFY_SOURCE is defined, automatic bounds checking is 5587372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * added to commonly used libc functions. If a buffer overrun is 5597372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * detected, the program is safely aborted. 5607372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * 5617372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * See 5627372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh * http://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html for details. 5637372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh */ 5647372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 && defined(__OPTIMIZE__) && __OPTIMIZE__ > 0 5657372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __BIONIC_FORTIFY 1 5667372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if _FORTIFY_SOURCE == 2 5677372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __bos(s) __builtin_object_size((s), 1) 5687372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 5697372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __bos(s) __builtin_object_size((s), 0) 5707372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 5717372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __bos0(s) __builtin_object_size((s), 0) 5727372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 5737372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __BIONIC_FORTIFY_INLINE \ 5747372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh extern __inline__ \ 5757372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh __attribute__ ((always_inline)) \ 5767372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh __attribute__ ((gnu_inline)) 5777372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 5787372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __BIONIC_FORTIFY_UNKNOWN_SIZE ((size_t) -1) 5797372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 5807372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 5811b55d7b281f282232ee58da5d09d3da5969ff11dAndrew Hsieh#if defined(__ANDROID__) && !defined(__LP64__) && defined( __arm__) 5827372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __NDK_FPABI__ __attribute__((pcs("aapcs"))) 5837372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 5847372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __NDK_FPABI__ 5857372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 5867372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 5877372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#if (!defined(_NDK_MATH_NO_SOFTFP) || _NDK_MATH_NO_SOFTFP != 1) && !defined(__clang__) 5887372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __NDK_FPABI_MATH__ __NDK_FPABI__ 5897372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#else 5907372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#define __NDK_FPABI_MATH__ /* nothing */ 5917372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif 5927372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh 5937372bd5a6d7d0cb636bdfdd27ca99b2d6abc0f2cAndrew Hsieh#endif /* !_SYS_CDEFS_H_ */ 594