source: rtems/cpukit/libcsupport/include/rtems/cdefs.h @ bcb9ab43

4.104.114.84.95
Last change on this file since bcb9ab43 was bcb9ab43, checked in by Ralf Corsepius <ralf.corsepius@…>, on 11/22/03 at 11:32:46

2003-11-22 Ralf Corsepius <corsepiu@…>

  • include/rtems/cdefs.h: Use _RTEMS_CDEFS_H guards.
  • Property mode set to 100644
File size: 6.1 KB
Line 
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$
38 */
39
40#ifndef _RTEMS_CDEFS_H_
41#define _RTEMS_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.
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)
65#define __STRING(x)     #x              /* stringify without expanding x */
66#define __XSTRING(x)    __STRING(x)     /* expand x, then stringify */
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#define __IDSTRING(name,string) \
163        static const char name[] __attribute__((__unused__)) = string
164
165#ifndef __RCSID
166#define __RCSID(s)      __IDSTRING(rcsid,s)
167#endif
168
169#ifndef __RCSID_SOURCE
170#define __RCSID_SOURCE(s) __IDSTRING(rcsid_source,s)
171#endif
172
173#ifndef __COPYRIGHT
174#define __COPYRIGHT(s)  __IDSTRING(copyright,s)
175#endif
176
177#endif /* !_RTEMS_CDEFS_H_ */
Note: See TracBrowser for help on using the repository browser.