Blame view
include/linux/compiler.h
8.49 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 |
#ifndef __LINUX_COMPILER_H #define __LINUX_COMPILER_H #ifndef __ASSEMBLY__ #ifdef __CHECKER__ # define __user __attribute__((noderef, address_space(1))) |
e0fdb0e05 percpu: add __per... |
8 |
# define __kernel __attribute__((address_space(0))) |
1da177e4c Linux-2.6.12-rc2 |
9 10 11 12 |
# define __safe __attribute__((safe)) # define __force __attribute__((force)) # define __nocast __attribute__((nocast)) # define __iomem __attribute__((noderef, address_space(2))) |
c902e0a01 [PATCH] Pass spar... |
13 14 15 16 |
# define __acquires(x) __attribute__((context(x,0,1))) # define __releases(x) __attribute__((context(x,1,0))) # define __acquire(x) __context__(x,1) # define __release(x) __context__(x,-1) |
dcc8e559e [PATCH] Pass a lo... |
17 |
# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) |
e0fdb0e05 percpu: add __per... |
18 |
# define __percpu __attribute__((noderef, address_space(3))) |
ca5ecddfa rcu: define __rcu... |
19 20 21 |
#ifdef CONFIG_SPARSE_RCU_POINTER # define __rcu __attribute__((noderef, address_space(4))) #else |
71d1d5c72 rcu: add __rcu AP... |
22 |
# define __rcu |
ca5ecddfa rcu: define __rcu... |
23 |
#endif |
c47ffe3d3 make __chk_{user,... |
24 25 |
extern void __chk_user_ptr(const volatile void __user *); extern void __chk_io_ptr(const volatile void __iomem *); |
1da177e4c Linux-2.6.12-rc2 |
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#else # define __user # define __kernel # define __safe # define __force # define __nocast # define __iomem # define __chk_user_ptr(x) (void)0 # define __chk_io_ptr(x) (void)0 # define __builtin_warning(x, y...) (1) # define __acquires(x) # define __releases(x) # define __acquire(x) (void)0 # define __release(x) (void)0 |
dcc8e559e [PATCH] Pass a lo... |
40 |
# define __cond_lock(x,c) (c) |
e0fdb0e05 percpu: add __per... |
41 |
# define __percpu |
71d1d5c72 rcu: add __rcu AP... |
42 |
# define __rcu |
1da177e4c Linux-2.6.12-rc2 |
43 44 45 |
#endif #ifdef __KERNEL__ |
f153b8212 Sanitize gcc vers... |
46 47 |
#ifdef __GNUC__ #include <linux/compiler-gcc.h> |
1da177e4c Linux-2.6.12-rc2 |
48 |
#endif |
28614889b ftrace: move notr... |
49 |
#define notrace __attribute__((no_instrument_function)) |
1da177e4c Linux-2.6.12-rc2 |
50 51 52 53 54 55 56 57 58 59 60 61 |
/* Intel compiler defines __GNUC__. So we will overwrite implementations * coming from above header files here */ #ifdef __INTEL_COMPILER # include <linux/compiler-intel.h> #endif /* * Generic compiler-dependent macros required for kernel * build go below this comment. Actual compiler/compiler version * specific implementations come from the above header files */ |
2ed84eeb8 trace: rename unl... |
62 |
struct ftrace_branch_data { |
1f0d69a9f tracing: profile ... |
63 64 65 |
const char *func; const char *file; unsigned line; |
2bcd521a6 trace: profile al... |
66 67 68 69 70 71 72 73 74 |
union { struct { unsigned long correct; unsigned long incorrect; }; struct { unsigned long miss; unsigned long hit; }; |
97e7e4f39 tracing: optimiza... |
75 |
unsigned long miss_hit[2]; |
2bcd521a6 trace: profile al... |
76 |
}; |
1f0d69a9f tracing: profile ... |
77 |
}; |
2ed84eeb8 trace: rename unl... |
78 79 80 81 82 |
/* * Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code * to disable branch tracing on a per file basis. */ |
d9ad8bc0c branch tracer: Fi... |
83 84 |
#if defined(CONFIG_TRACE_BRANCH_PROFILING) \ && !defined(DISABLE_BRANCH_PROFILING) && !defined(__CHECKER__) |
2ed84eeb8 trace: rename unl... |
85 |
void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); |
1f0d69a9f tracing: profile ... |
86 87 88 |
#define likely_notrace(x) __builtin_expect(!!(x), 1) #define unlikely_notrace(x) __builtin_expect(!!(x), 0) |
45b797492 trace: consolidat... |
89 |
#define __branch_check__(x, expect) ({ \ |
1f0d69a9f tracing: profile ... |
90 |
int ______r; \ |
2ed84eeb8 trace: rename unl... |
91 |
static struct ftrace_branch_data \ |
1f0d69a9f tracing: profile ... |
92 |
__attribute__((__aligned__(4))) \ |
45b797492 trace: consolidat... |
93 |
__attribute__((section("_ftrace_annotated_branch"))) \ |
1f0d69a9f tracing: profile ... |
94 95 96 97 98 |
______f = { \ .func = __func__, \ .file = __FILE__, \ .line = __LINE__, \ }; \ |
1f0d69a9f tracing: profile ... |
99 |
______r = likely_notrace(x); \ |
45b797492 trace: consolidat... |
100 |
ftrace_likely_update(&______f, ______r, expect); \ |
1f0d69a9f tracing: profile ... |
101 102 103 104 105 106 107 108 109 |
______r; \ }) /* * Using __builtin_constant_p(x) to ignore cases where the return * value is always the same. This idea is taken from a similar patch * written by Daniel Walker. */ # ifndef likely |
45b797492 trace: consolidat... |
110 |
# define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1)) |
1f0d69a9f tracing: profile ... |
111 112 |
# endif # ifndef unlikely |
45b797492 trace: consolidat... |
113 |
# define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 0)) |
1f0d69a9f tracing: profile ... |
114 |
# endif |
2bcd521a6 trace: profile al... |
115 116 117 118 119 120 |
#ifdef CONFIG_PROFILE_ALL_BRANCHES /* * "Define 'is'", Bill Clinton * "Define 'if'", Steven Rostedt */ |
ab3c9c686 branch tracer, in... |
121 122 123 |
#define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) #define __trace_if(cond) \ if (__builtin_constant_p((cond)) ? !!(cond) : \ |
2bcd521a6 trace: profile al... |
124 125 126 127 128 129 130 131 132 133 134 |
({ \ int ______r; \ static struct ftrace_branch_data \ __attribute__((__aligned__(4))) \ __attribute__((section("_ftrace_branch"))) \ ______f = { \ .func = __func__, \ .file = __FILE__, \ .line = __LINE__, \ }; \ ______r = !!(cond); \ |
97e7e4f39 tracing: optimiza... |
135 |
______f.miss_hit[______r]++; \ |
2bcd521a6 trace: profile al... |
136 137 138 |
______r; \ })) #endif /* CONFIG_PROFILE_ALL_BRANCHES */ |
1f0d69a9f tracing: profile ... |
139 140 141 142 |
#else # define likely(x) __builtin_expect(!!(x), 1) # define unlikely(x) __builtin_expect(!!(x), 0) #endif |
1da177e4c Linux-2.6.12-rc2 |
143 144 145 146 147 |
/* Optimization barrier */ #ifndef barrier # define barrier() __memory_barrier() #endif |
38938c879 Add support for G... |
148 149 150 151 |
/* Unreachable code */ #ifndef unreachable # define unreachable() do { } while (1) #endif |
1da177e4c Linux-2.6.12-rc2 |
152 153 154 155 156 157 158 159 160 161 |
#ifndef RELOC_HIDE # define RELOC_HIDE(ptr, off) \ ({ unsigned long __ptr; \ __ptr = (unsigned long) (ptr); \ (typeof(ptr)) (__ptr + (off)); }) #endif #endif /* __KERNEL__ */ #endif /* __ASSEMBLY__ */ |
4f79c3ffc Guard some of lin... |
162 |
#ifdef __KERNEL__ |
1da177e4c Linux-2.6.12-rc2 |
163 164 165 166 167 168 169 170 171 |
/* * Allow us to mark functions as 'deprecated' and have gcc emit a nice * warning for each use, in hopes of speeding the functions removal. * Usage is: * int __deprecated foo(void) */ #ifndef __deprecated # define __deprecated /* unimplemented */ #endif |
512345be2 [PATCH] Add depre... |
172 173 174 175 176 |
#ifdef MODULE #define __deprecated_for_modules __deprecated #else #define __deprecated_for_modules #endif |
1da177e4c Linux-2.6.12-rc2 |
177 178 179 |
#ifndef __must_check #define __must_check #endif |
cebc04ba9 add CONFIG_ENABLE... |
180 181 182 183 |
#ifndef CONFIG_ENABLE_MUST_CHECK #undef __must_check #define __must_check #endif |
de4884439 Permit silencing ... |
184 185 186 187 188 189 |
#ifndef CONFIG_ENABLE_WARN_DEPRECATED #undef __deprecated #undef __deprecated_for_modules #define __deprecated #define __deprecated_for_modules #endif |
cebc04ba9 add CONFIG_ENABLE... |
190 |
|
1da177e4c Linux-2.6.12-rc2 |
191 192 193 194 |
/* * Allow us to avoid 'defined but not used' warnings on functions and data, * as well as force them to be emitted to the assembly file. * |
0d7ebbbc6 compiler: introdu... |
195 196 |
* As of gcc 3.4, static functions that are not marked with attribute((used)) * may be elided from the assembly file. As of gcc 3.4, static data not so |
1da177e4c Linux-2.6.12-rc2 |
197 198 |
* marked will not be elided, but this may change in a future gcc version. * |
0d7ebbbc6 compiler: introdu... |
199 200 201 202 |
* NOTE: Because distributions shipped with a backported unit-at-a-time * compiler in gcc 3.3, we must define __used to be __attribute__((used)) * for gcc >=3.3 instead of 3.4. * |
1da177e4c Linux-2.6.12-rc2 |
203 204 |
* In prior versions of gcc, such functions and data would be emitted, but * would be warned about except with attribute((unused)). |
0d7ebbbc6 compiler: introdu... |
205 206 207 |
* * Mark functions that are referenced only in inline assembly as __used so * the code is emitted even though it appears to be unreferenced. |
1da177e4c Linux-2.6.12-rc2 |
208 |
*/ |
0d7ebbbc6 compiler: introdu... |
209 210 211 212 213 214 |
#ifndef __used # define __used /* unimplemented */ #endif #ifndef __maybe_unused # define __maybe_unused /* unimplemented */ |
1da177e4c Linux-2.6.12-rc2 |
215 |
#endif |
7b2a35132 compiler: Introdu... |
216 217 218 |
#ifndef __always_unused # define __always_unused /* unimplemented */ #endif |
423bc7b22 Restore __attribu... |
219 220 221 |
#ifndef noinline #define noinline #endif |
735c4fb91 add noinline_for_... |
222 223 224 225 226 |
/* * Rather then using noinline to prevent stack consumption, use * noinline_for_stack instead. For documentaiton reasons. */ #define noinline_for_stack noinline |
423bc7b22 Restore __attribu... |
227 228 229 230 231 |
#ifndef __always_inline #define __always_inline inline #endif #endif /* __KERNEL__ */ |
1da177e4c Linux-2.6.12-rc2 |
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
/* * From the GCC manual: * * Many functions do not examine any values except their arguments, * and have no effects except the return value. Basically this is * just slightly more strict class than the `pure' attribute above, * since function is not allowed to read global memory. * * Note that a function that has pointer arguments and examines the * data pointed to must _not_ be declared `const'. Likewise, a * function that calls a non-`const' function usually must not be * `const'. It does not make sense for a `const' function to return * `void'. */ #ifndef __attribute_const__ # define __attribute_const__ /* unimplemented */ #endif |
a586df067 x86: Support __at... |
249 250 251 252 253 254 255 256 |
/* * Tell gcc if a function is cold. The compiler will assume any path * directly leading to the call is unlikely. */ #ifndef __cold #define __cold #endif |
f3fe866d5 compiler.h: intro... |
257 258 259 260 |
/* Simple shorthand for a section definition */ #ifndef __section # define __section(S) __attribute__ ((__section__(#S))) #endif |
d2c123c27 module_param: add... |
261 262 263 264 |
/* Are two types/vars the same type (ignoring qualifiers)? */ #ifndef __same_type # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) #endif |
9f0cf4adb x86: Use __builti... |
265 266 267 268 |
/* Compile time object size, -1 for unknown */ #ifndef __compiletime_object_size # define __compiletime_object_size(obj) -1 #endif |
4a3127693 x86: Turn the cop... |
269 270 271 |
#ifndef __compiletime_warning # define __compiletime_warning(message) #endif |
63312b6a6 x86: Add a Kconfi... |
272 273 274 |
#ifndef __compiletime_error # define __compiletime_error(message) #endif |
1399ff86f kernel.h: add BUI... |
275 276 277 |
#ifndef __linktime_error # define __linktime_error(message) #endif |
9c3cdc1f8 Move ACCESS_ONCE(... |
278 279 280 281 282 283 284 285 |
/* * Prevent the compiler from merging or refetching accesses. The compiler * is also forbidden from reordering successive instances of ACCESS_ONCE(), * but only when the compiler is aware of some particular ordering. One way * to make the compiler aware of ordering is to put the two invocations of * ACCESS_ONCE() in different C statements. * * This macro does absolutely -nothing- to prevent the CPU from reordering, |
ded00a56e rcu: remove redun... |
286 287 288 |
* merging, or refetching absolutely anything at any time. Its main intended * use is to mediate communication between process-level code and irq/NMI * handlers, all running on the same CPU. |
9c3cdc1f8 Move ACCESS_ONCE(... |
289 290 |
*/ #define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) |
1da177e4c Linux-2.6.12-rc2 |
291 |
#endif /* __LINUX_COMPILER_H */ |