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