linux/include/linux/compiler.h
<<
>>
Prefs
   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       /* default address space */
   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)
  18extern void __chk_user_ptr(const volatile void __user *);
  19extern void __chk_io_ptr(const volatile void __iomem *);
  20#else
  21# define __user
  22# define __kernel
  23# define __safe
  24# define __force
  25# define __nocast
  26# define __iomem
  27# define __chk_user_ptr(x) (void)0
  28# define __chk_io_ptr(x) (void)0
  29# define __builtin_warning(x, y...) (1)
  30# define __acquires(x)
  31# define __releases(x)
  32# define __acquire(x) (void)0
  33# define __release(x) (void)0
  34# define __cond_lock(x,c) (c)
  35#endif
  36
  37#ifdef __KERNEL__
  38
  39#if __GNUC__ >= 4
  40# include <linux/compiler-gcc4.h>
  41#elif __GNUC__ == 3 && __GNUC_MINOR__ >= 2
  42# include <linux/compiler-gcc3.h>
  43#else
  44# error Sorry, your compiler is too old/not recognized.
  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
  62#define likely(x)       __builtin_expect(!!(x), 1)
  63#define unlikely(x)     __builtin_expect(!!(x), 0)
  64
  65/* Optimization barrier */
  66#ifndef barrier
  67# define barrier() __memory_barrier()
  68#endif
  69
  70#ifndef RELOC_HIDE
  71# define RELOC_HIDE(ptr, off)                                   \
  72  ({ unsigned long __ptr;                                       \
  73     __ptr = (unsigned long) (ptr);                             \
  74    (typeof(ptr)) (__ptr + (off)); })
  75#endif
  76
  77#endif /* __KERNEL__ */
  78
  79#endif /* __ASSEMBLY__ */
  80
  81#ifdef __KERNEL__
  82/*
  83 * Allow us to mark functions as 'deprecated' and have gcc emit a nice
  84 * warning for each use, in hopes of speeding the functions removal.
  85 * Usage is:
  86 *              int __deprecated foo(void)
  87 */
  88#ifndef __deprecated
  89# define __deprecated           /* unimplemented */
  90#endif
  91
  92#ifdef MODULE
  93#define __deprecated_for_modules __deprecated
  94#else
  95#define __deprecated_for_modules
  96#endif
  97
  98#ifndef __must_check
  99#define __must_check
 100#endif
 101
 102#ifndef CONFIG_ENABLE_MUST_CHECK
 103#undef __must_check
 104#define __must_check
 105#endif
 106#ifndef CONFIG_ENABLE_WARN_DEPRECATED
 107#undef __deprecated
 108#undef __deprecated_for_modules
 109#define __deprecated
 110#define __deprecated_for_modules
 111#endif
 112
 113/*
 114 * Allow us to avoid 'defined but not used' warnings on functions and data,
 115 * as well as force them to be emitted to the assembly file.
 116 *
 117 * As of gcc 3.4, static functions that are not marked with attribute((used))
 118 * may be elided from the assembly file.  As of gcc 3.4, static data not so
 119 * marked will not be elided, but this may change in a future gcc version.
 120 *
 121 * NOTE: Because distributions shipped with a backported unit-at-a-time
 122 * compiler in gcc 3.3, we must define __used to be __attribute__((used))
 123 * for gcc >=3.3 instead of 3.4.
 124 *
 125 * In prior versions of gcc, such functions and data would be emitted, but
 126 * would be warned about except with attribute((unused)).
 127 *
 128 * Mark functions that are referenced only in inline assembly as __used so
 129 * the code is emitted even though it appears to be unreferenced.
 130 */
 131#ifndef __used
 132# define __used                 /* unimplemented */
 133#endif
 134
 135#ifndef __maybe_unused
 136# define __maybe_unused         /* unimplemented */
 137#endif
 138
 139#ifndef noinline
 140#define noinline
 141#endif
 142
 143/*
 144 * Rather then using noinline to prevent stack consumption, use
 145 * noinline_for_stack instead.  For documentaiton reasons.
 146 */
 147#define noinline_for_stack noinline
 148
 149#ifndef __always_inline
 150#define __always_inline inline
 151#endif
 152
 153#endif /* __KERNEL__ */
 154
 155/*
 156 * From the GCC manual:
 157 *
 158 * Many functions do not examine any values except their arguments,
 159 * and have no effects except the return value.  Basically this is
 160 * just slightly more strict class than the `pure' attribute above,
 161 * since function is not allowed to read global memory.
 162 *
 163 * Note that a function that has pointer arguments and examines the
 164 * data pointed to must _not_ be declared `const'.  Likewise, a
 165 * function that calls a non-`const' function usually must not be
 166 * `const'.  It does not make sense for a `const' function to return
 167 * `void'.
 168 */
 169#ifndef __attribute_const__
 170# define __attribute_const__    /* unimplemented */
 171#endif
 172
 173/*
 174 * Tell gcc if a function is cold. The compiler will assume any path
 175 * directly leading to the call is unlikely.
 176 */
 177
 178#ifndef __cold
 179#define __cold
 180#endif
 181
 182/* Simple shorthand for a section definition */
 183#ifndef __section
 184# define __section(S) __attribute__ ((__section__(#S)))
 185#endif
 186
 187/*
 188 * Prevent the compiler from merging or refetching accesses.  The compiler
 189 * is also forbidden from reordering successive instances of ACCESS_ONCE(),
 190 * but only when the compiler is aware of some particular ordering.  One way
 191 * to make the compiler aware of ordering is to put the two invocations of
 192 * ACCESS_ONCE() in different C statements.
 193 *
 194 * This macro does absolutely -nothing- to prevent the CPU from reordering,
 195 * merging, or refetching absolutely anything at any time.  Its main intended
 196 * use is to mediate communication between process-level code and irq/NMI
 197 * handlers, all running on the same CPU.
 198 */
 199#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
 200
 201#endif /* __LINUX_COMPILER_H */
 202
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.