1/* 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Berkeley Software Design, Inc. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by the University of 19 * California, Berkeley and its contributors. 20 * 4. Neither the name of the University nor the names of its contributors 21 * may be used to endorse or promote products derived from this software 22 * without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 * @(#)cdefs.h 8.8 (Berkeley) 1/9/95
| 1/* 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Berkeley Software Design, Inc. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by the University of 19 * California, Berkeley and its contributors. 20 * 4. Neither the name of the University nor the names of its contributors 21 * may be used to endorse or promote products derived from this software 22 * without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 * @(#)cdefs.h 8.8 (Berkeley) 1/9/95
|
37 * $Id$
| 37 * $Id: cdefs.h,v 1.13 1997/02/22 09:44:52 peter 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 -- make sure you don't put spaces 55 * in between its arguments. __CONCAT can also concatenate double-quoted 56 * strings produced by the __STRING macro, but this only works with ANSI C.
| 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 -- make sure you don't put spaces 55 * in between its arguments. __CONCAT can also concatenate double-quoted 56 * strings produced by the __STRING macro, but this only works with ANSI C.
|
| 57 * 58 * __XSTRING is like __STRING, but it expands any macros in its argument 59 * first. It is only available with ANSI C.
|
57 */ 58#if defined(__STDC__) || defined(__cplusplus) 59#define __P(protos) protos /* full-blown ANSI C */ 60#define __CONCAT1(x,y) x ## y 61#define __CONCAT(x,y) __CONCAT1(x,y)
| 60 */ 61#if defined(__STDC__) || defined(__cplusplus) 62#define __P(protos) protos /* full-blown ANSI C */ 63#define __CONCAT1(x,y) x ## y 64#define __CONCAT(x,y) __CONCAT1(x,y)
|
62#define __STRING(x) #x
| 65#define __STRING(x) #x /* stringify without expanding x */ 66#define __XSTRING(x) __STRING(x) /* expand x, then stringify */
|
63 64#define __const const /* define reserved names to standard */ 65#define __signed signed 66#define __volatile volatile 67#if defined(__cplusplus) 68#define __inline inline /* convert to C++ keyword */ 69#else 70#ifndef __GNUC__ 71#define __inline /* delete GCC keyword */ 72#endif /* !__GNUC__ */ 73#endif /* !__cplusplus */ 74 75#else /* !(__STDC__ || __cplusplus) */ 76#define __P(protos) () /* traditional C preprocessor */ 77#define __CONCAT(x,y) x/**/y 78#define __STRING(x) "x" 79 80#ifndef __GNUC__ 81#define __const /* delete pseudo-ANSI C keywords */ 82#define __inline 83#define __signed 84#define __volatile 85/* 86 * In non-ANSI C environments, new programs will want ANSI-only C keywords 87 * deleted from the program and old programs will want them left alone. 88 * When using a compiler other than gcc, programs using the ANSI C keywords 89 * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS. 90 * When using "gcc -traditional", we assume that this is the intent; if 91 * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone. 92 */ 93#ifndef NO_ANSI_KEYWORDS 94#define const /* delete ANSI C keywords */ 95#define inline 96#define signed 97#define volatile 98#endif /* !NO_ANSI_KEYWORDS */ 99#endif /* !__GNUC__ */ 100#endif /* !(__STDC__ || __cplusplus) */ 101 102/* 103 * GCC1 and some versions of GCC2 declare dead (non-returning) and 104 * pure (no side effects) functions using "volatile" and "const"; 105 * unfortunately, these then cause warnings under "-ansi -pedantic". 106 * GCC2.5 uses a new, peculiar __attribute__((attrs)) style. All of 107 * these work for GNU C++ (modulo a slight glitch in the C++ grammar 108 * in the distribution version of 2.5.5). 109 */ 110#if __GNUC__ < 2 111#define __dead 112#define __dead2 113#define __pure 114#define __pure2 115#define __unused 116#define __attribute__(x) 117#endif 118#if __GNUC__ == 2 && __GNUC_MINOR__ < 5 119#define __dead __volatile 120#define __dead2 121#define __pure __const 122#define __pure2 123#define __unused 124#endif 125#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7 126#define __dead 127#define __dead2 __attribute__((__noreturn__)) 128#define __pure 129#define __pure2 __attribute__((__const__)) 130#define __unused 131#endif 132#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3 133#define __dead 134#define __dead2 __attribute__((__noreturn__)) 135#define __pure 136#define __pure2 __attribute__((__const__)) 137#define __unused __attribute__((__unused__)) 138#endif 139 140#ifdef __GNUC__ 141#ifdef __STDC__ 142#define __weak_reference(sym,alias) \ 143 __asm__(".stabs \"_" #alias "\",11,0,0,0"); \ 144 __asm__(".stabs \"_" #sym "\",1,0,0,0") 145#define __warn_references(sym,msg) \ 146 __asm__(".stabs \"" msg "\",30,0,0,0"); \ 147 __asm__(".stabs \"_" #sym "\",1,0,0,0") 148#else 149#define __weak_reference(sym,alias) \ 150 __asm__(".stabs \"_/**/alias\",11,0,0,0"); \ 151 __asm__(".stabs \"_/**/sym\",1,0,0,0") 152#define __warn_references(sym,msg) \ 153 __asm__(".stabs msg,30,0,0,0"); \ 154 __asm__(".stabs \"_/**/sym\",1,0,0,0") 155#endif 156#endif 157 158#endif /* !_SYS_CDEFS_H_ */
| 67 68#define __const const /* define reserved names to standard */ 69#define __signed signed 70#define __volatile volatile 71#if defined(__cplusplus) 72#define __inline inline /* convert to C++ keyword */ 73#else 74#ifndef __GNUC__ 75#define __inline /* delete GCC keyword */ 76#endif /* !__GNUC__ */ 77#endif /* !__cplusplus */ 78 79#else /* !(__STDC__ || __cplusplus) */ 80#define __P(protos) () /* traditional C preprocessor */ 81#define __CONCAT(x,y) x/**/y 82#define __STRING(x) "x" 83 84#ifndef __GNUC__ 85#define __const /* delete pseudo-ANSI C keywords */ 86#define __inline 87#define __signed 88#define __volatile 89/* 90 * In non-ANSI C environments, new programs will want ANSI-only C keywords 91 * deleted from the program and old programs will want them left alone. 92 * When using a compiler other than gcc, programs using the ANSI C keywords 93 * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS. 94 * When using "gcc -traditional", we assume that this is the intent; if 95 * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone. 96 */ 97#ifndef NO_ANSI_KEYWORDS 98#define const /* delete ANSI C keywords */ 99#define inline 100#define signed 101#define volatile 102#endif /* !NO_ANSI_KEYWORDS */ 103#endif /* !__GNUC__ */ 104#endif /* !(__STDC__ || __cplusplus) */ 105 106/* 107 * GCC1 and some versions of GCC2 declare dead (non-returning) and 108 * pure (no side effects) functions using "volatile" and "const"; 109 * unfortunately, these then cause warnings under "-ansi -pedantic". 110 * GCC2.5 uses a new, peculiar __attribute__((attrs)) style. All of 111 * these work for GNU C++ (modulo a slight glitch in the C++ grammar 112 * in the distribution version of 2.5.5). 113 */ 114#if __GNUC__ < 2 115#define __dead 116#define __dead2 117#define __pure 118#define __pure2 119#define __unused 120#define __attribute__(x) 121#endif 122#if __GNUC__ == 2 && __GNUC_MINOR__ < 5 123#define __dead __volatile 124#define __dead2 125#define __pure __const 126#define __pure2 127#define __unused 128#endif 129#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7 130#define __dead 131#define __dead2 __attribute__((__noreturn__)) 132#define __pure 133#define __pure2 __attribute__((__const__)) 134#define __unused 135#endif 136#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3 137#define __dead 138#define __dead2 __attribute__((__noreturn__)) 139#define __pure 140#define __pure2 __attribute__((__const__)) 141#define __unused __attribute__((__unused__)) 142#endif 143 144#ifdef __GNUC__ 145#ifdef __STDC__ 146#define __weak_reference(sym,alias) \ 147 __asm__(".stabs \"_" #alias "\",11,0,0,0"); \ 148 __asm__(".stabs \"_" #sym "\",1,0,0,0") 149#define __warn_references(sym,msg) \ 150 __asm__(".stabs \"" msg "\",30,0,0,0"); \ 151 __asm__(".stabs \"_" #sym "\",1,0,0,0") 152#else 153#define __weak_reference(sym,alias) \ 154 __asm__(".stabs \"_/**/alias\",11,0,0,0"); \ 155 __asm__(".stabs \"_/**/sym\",1,0,0,0") 156#define __warn_references(sym,msg) \ 157 __asm__(".stabs msg,30,0,0,0"); \ 158 __asm__(".stabs \"_/**/sym\",1,0,0,0") 159#endif 160#endif 161 162#endif /* !_SYS_CDEFS_H_ */
|