Magellan Linux

Contents of /trunk/mkinitrd-magellan/klibc/usr/include/klibc/compiler.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (show annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 3433 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 /*
2 * klibc/compiler.h
3 *
4 * Various compiler features
5 */
6
7 #ifndef _KLIBC_COMPILER_H
8 #define _KLIBC_COMPILER_H
9
10 /* Specific calling conventions */
11 /* __cdecl is used when we want varadic and non-varadic functions to have
12 the same binary calling convention. */
13 #ifdef __i386__
14 # ifdef __GNUC__
15 # define __cdecl __attribute__((cdecl,regparm(0)))
16 # else
17 /* Most other C compilers have __cdecl as a keyword */
18 # endif
19 #else
20 # define __cdecl /* Meaningless on non-i386 */
21 #endif
22
23 /* How to declare a function that *must* be inlined */
24 #ifdef __GNUC__
25 # if __GNUC__ >= 3
26 # define __must_inline static __inline__ __attribute__((always_inline))
27 # else
28 # define __must_inline extern __inline__
29 # endif
30 #else
31 # define __must_inline inline /* Just hope this works... */
32 #endif
33
34 /* How to declare a function that does not return */
35 #ifdef __GNUC__
36 # define __noreturn void __attribute__((noreturn))
37 #else
38 # define __noreturn void
39 #endif
40
41 /* "const" function:
42
43 Many functions do not examine any values except their arguments,
44 and have no effects except the return value. Basically this is
45 just slightly more strict class than the `pure' attribute above,
46 since function is not allowed to read global memory.
47
48 Note that a function that has pointer arguments and examines the
49 data pointed to must _not_ be declared `const'. Likewise, a
50 function that calls a non-`const' function usually must not be
51 `const'. It does not make sense for a `const' function to return
52 `void'.
53 */
54 #ifdef __GNUC__
55 # define __constfunc __attribute__((const))
56 #else
57 # define __constfunc
58 #endif
59 #undef __attribute_const__
60 #define __attribute_const__ __constfunc
61
62 /* "pure" function:
63
64 Many functions have no effects except the return value and their
65 return value depends only on the parameters and/or global
66 variables. Such a function can be subject to common subexpression
67 elimination and loop optimization just as an arithmetic operator
68 would be. These functions should be declared with the attribute
69 `pure'.
70 */
71 #ifdef __GNUC__
72 # define __purefunc __attribute__((pure))
73 #else
74 # define __purefunc
75 #endif
76 #undef __attribute_pure__
77 #define __attribute_pure__ __purefunc
78
79 /* Format attribute */
80 #ifdef __GNUC__
81 # define __formatfunc(t,f,a) __attribute__((format(t,f,a)))
82 #else
83 # define __formatfunc(t,f,a)
84 #endif
85
86 /* malloc() function (returns unaliased pointer) */
87 #if defined(__GNUC__) && (__GNUC__ >= 3)
88 # define __mallocfunc __attribute__((malloc))
89 #else
90 # define __mallocfunc
91 #endif
92
93 /* likely/unlikely */
94 #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
95 # define __likely(x) __builtin_expect((x), 1)
96 # define __unlikely(x) __builtin_expect((x), 0)
97 #else
98 # define __likely(x) (x)
99 # define __unlikely(x) (x)
100 #endif
101
102 /* Possibly unused function */
103 #ifdef __GNUC__
104 # define __unusedfunc __attribute__((unused))
105 #else
106 # define __unusedfunc
107 #endif
108
109 /* It's all user space... */
110 #define __user
111
112 /* The bitwise attribute: disallow arithmetric operations */
113 #ifdef __CHECKER__ /* sparse only */
114 # define __bitwise __attribute__((bitwise))
115 #else
116 # define __bitwise
117 #endif
118
119 /* Shut up unused warnings */
120 #ifdef __GNUC__
121 # define __attribute_used__ __attribute__((used))
122 #else
123 # define __attribute_used__
124 #endif
125
126 /* Compiler pragma to make an alias symbol */
127 #define __ALIAS(__t, __f, __p, __a) \
128 __t __f __p __attribute__((weak, alias(#__a)));
129
130 #endif