cdefs.h revision 37052
190926Snectar/* 2178825Sdfr * Copyright (c) 1991, 1993 390926Snectar * The Regents of the University of California. All rights reserved. 490926Snectar * 590926Snectar * This code is derived from software contributed to Berkeley by 690926Snectar * Berkeley Software Design, Inc. 790926Snectar * 890926Snectar * Redistribution and use in source and binary forms, with or without 990926Snectar * modification, are permitted provided that the following conditions 1090926Snectar * are met: 1190926Snectar * 1. Redistributions of source code must retain the above copyright 1290926Snectar * notice, this list of conditions and the following disclaimer. 1390926Snectar * 2. Redistributions in binary form must reproduce the above copyright 1490926Snectar * notice, this list of conditions and the following disclaimer in the 1590926Snectar * documentation and/or other materials provided with the distribution. 1690926Snectar * 3. All advertising materials mentioning features or use of this software 1790926Snectar * must display the following acknowledgement: 1890926Snectar * This product includes software developed by the University of 1990926Snectar * California, Berkeley and its contributors. 2090926Snectar * 4. Neither the name of the University nor the names of its contributors 2190926Snectar * may be used to endorse or promote products derived from this software 2290926Snectar * without specific prior written permission. 2390926Snectar * 2490926Snectar * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2590926Snectar * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2690926Snectar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2790926Snectar * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2890926Snectar * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2990926Snectar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3090926Snectar * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3190926Snectar * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3290926Snectar * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3390926Snectar * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3490926Snectar * SUCH DAMAGE. 35 * 36 * @(#)cdefs.h 8.8 (Berkeley) 1/9/95 37 * $Id: cdefs.h,v 1.17 1998/06/14 13:40:01 bde Exp $ 38 */ 39 40#ifndef _SYS_CDEFS_H_ 41#define _SYS_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 * The __CONCAT macro is used to concatenate parts of symbol names, e.g. 53 * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo. 54 * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI 55 * mode -- there must be no spaces between its arguments, and for nested 56 * __CONCAT's, all the __CONCAT's must be at the left. __CONCAT can also 57 * concatenate double-quoted strings produced by the __STRING macro, but 58 * this only works with ANSI C. 59 * 60 * __XSTRING is like __STRING, but it expands any macros in its argument 61 * first. It is only available with ANSI C. 62 */ 63#if defined(__STDC__) || defined(__cplusplus) 64#define __P(protos) protos /* full-blown ANSI C */ 65#define __CONCAT1(x,y) x ## y 66#define __CONCAT(x,y) __CONCAT1(x,y) 67#define __STRING(x) #x /* stringify without expanding x */ 68#define __XSTRING(x) __STRING(x) /* expand x, then stringify */ 69 70#define __const const /* define reserved names to standard */ 71#define __signed signed 72#define __volatile volatile 73#if defined(__cplusplus) 74#define __inline inline /* convert to C++ keyword */ 75#else 76#ifndef __GNUC__ 77#define __inline /* delete GCC keyword */ 78#endif /* !__GNUC__ */ 79#endif /* !__cplusplus */ 80 81#else /* !(__STDC__ || __cplusplus) */ 82#define __P(protos) () /* traditional C preprocessor */ 83#define __CONCAT(x,y) x/**/y 84#define __STRING(x) "x" 85 86#ifndef __GNUC__ 87#define __const /* delete pseudo-ANSI C keywords */ 88#define __inline 89#define __signed 90#define __volatile 91/* 92 * In non-ANSI C environments, new programs will want ANSI-only C keywords 93 * deleted from the program and old programs will want them left alone. 94 * When using a compiler other than gcc, programs using the ANSI C keywords 95 * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS. 96 * When using "gcc -traditional", we assume that this is the intent; if 97 * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone. 98 */ 99#ifndef NO_ANSI_KEYWORDS 100#define const /* delete ANSI C keywords */ 101#define inline 102#define signed 103#define volatile 104#endif /* !NO_ANSI_KEYWORDS */ 105#endif /* !__GNUC__ */ 106#endif /* !(__STDC__ || __cplusplus) */ 107 108/* 109 * GCC1 and some versions of GCC2 declare dead (non-returning) and 110 * pure (no side effects) functions using "volatile" and "const"; 111 * unfortunately, these then cause warnings under "-ansi -pedantic". 112 * GCC2.5 uses a new, peculiar __attribute__((attrs)) style. All of 113 * these work for GNU C++ (modulo a slight glitch in the C++ grammar 114 * in the distribution version of 2.5.5). 115 */ 116#if __GNUC__ < 2 117#define __dead 118#define __dead2 119#define __pure 120#define __pure2 121#define __unused 122#endif 123#if __GNUC__ == 2 && __GNUC_MINOR__ < 5 124#define __dead __volatile 125#define __dead2 126#define __pure __const 127#define __pure2 128#define __unused 129#endif 130#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7 131#define __dead 132#define __dead2 __attribute__((__noreturn__)) 133#define __pure 134#define __pure2 __attribute__((__const__)) 135#define __unused 136#endif 137#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3 138#define __dead 139#define __dead2 __attribute__((__noreturn__)) 140#define __pure 141#define __pure2 __attribute__((__const__)) 142#define __unused __attribute__((__unused__)) 143#endif 144 145#ifdef __GNUC__ 146#ifdef __ELF__ 147#ifdef __STDC__ 148#define __weak_reference(sym,alias) \ 149 __asm__(".weak " #alias); \ 150 __asm__(".set " #alias ", " #sym) 151#define __warn_references(sym,msg) \ 152 __asm__(".section .gnu.warning." #sym); \ 153 __asm__(".ascii \"" msg "\""); \ 154 __asm__(".previous") 155#else 156#define __weak_reference(sym,alias) \ 157 __asm__(".weak alias"); \ 158 __asm__(".set alias, sym") 159#define __warn_references(sym,msg) \ 160 __asm__(".section .gnu.warning.sym"); \ 161 __asm__(".ascii \"msg\""); \ 162 __asm__(".previous") 163#endif /* __STDC__ */ 164#else /* !__ELF__ */ 165#ifdef __STDC__ 166#define __weak_reference(sym,alias) \ 167 __asm__(".stabs \"_" #alias "\",11,0,0,0"); \ 168 __asm__(".stabs \"_" #sym "\",1,0,0,0") 169#define __warn_references(sym,msg) \ 170 __asm__(".stabs \"" msg "\",30,0,0,0"); \ 171 __asm__(".stabs \"_" #sym "\",1,0,0,0") 172#else 173#define __weak_reference(sym,alias) \ 174 __asm__(".stabs \"_/**/alias\",11,0,0,0"); \ 175 __asm__(".stabs \"_/**/sym\",1,0,0,0") 176#define __warn_references(sym,msg) \ 177 __asm__(".stabs msg,30,0,0,0"); \ 178 __asm__(".stabs \"_/**/sym\",1,0,0,0") 179#endif /* __STDC__ */ 180#endif /* __ELF__ */ 181#endif /* __GNUC__ */ 182 183#define __IDSTRING(name,string) static const char name[] __unused = string 184 185#ifndef __RCSID 186#define __RCSID(s) __IDSTRING(rcsid,s) 187#endif 188 189#ifndef __RCSID_SOURCE 190#define __RCSID_SOURCE(s) __IDSTRING(rcsid_source,s) 191#endif 192 193#ifndef __COPYRIGHT 194#define __COPYRIGHT(s) __IDSTRING(copyright,s) 195#endif 196 197#endif /* !_SYS_CDEFS_H_ */ 198