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(0,1)))
  14# define __releases(x)  __attribute__((context(1,0)))
  15# define __acquire(x)   __context__(1)
  16# define __release(x)   __context__(-1)
  17# define __cond_lock(x) ((x) ? ({ __context__(1); 1; }) : 0)
  18extern void __chk_user_ptr(void __user *);
  19extern void __chk_io_ptr(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) (x)
  35#endif
  36
  37#ifdef __KERNEL__
  38
  39#if __GNUC__ > 4
  40#error no compiler-gcc.h file for this gcc version
  41#elif __GNUC__ == 4
  42# include <linux/compiler-gcc4.h>
  43#elif __GNUC__ == 3
  44# include <linux/compiler-gcc3.h>
  45#else
  46# error Sorry, your compiler is too old/not recognized.
  47#endif
  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/*
 103 * Allow us to avoid 'defined but not used' warnings on functions and data,
 104 * as well as force them to be emitted to the assembly file.
 105 *
 106 * As of gcc 3.3, static functions that are not marked with attribute((used))
 107 * may be elided from the assembly file.  As of gcc 3.3, static data not so
 108 * marked will not be elided, but this may change in a future gcc version.
 109 *
 110 * In prior versions of gcc, such functions and data would be emitted, but
 111 * would be warned about except with attribute((unused)).
 112 */
 113#ifndef __attribute_used__
 114# define __attribute_used__     /* unimplemented */
 115#endif
 116
 117/*
 118 * From the GCC manual:
 119 *
 120 * Many functions have no effects except the return value and their
 121 * return value depends only on the parameters and/or global
 122 * variables.  Such a function can be subject to common subexpression
 123 * elimination and loop optimization just as an arithmetic operator
 124 * would be.
 125 * [...]
 126 */
 127#ifndef __attribute_pure__
 128# define __attribute_pure__     /* unimplemented */
 129#endif
 130
 131#ifndef noinline
 132#define noinline
 133#endif
 134
 135#ifndef __always_inline
 136#define __always_inline inline
 137#endif
 138
 139#endif /* __KERNEL__ */
 140
 141/*
 142 * From the GCC manual:
 143 *
 144 * Many functions do not examine any values except their arguments,
 145 * and have no effects except the return value.  Basically this is
 146 * just slightly more strict class than the `pure' attribute above,
 147 * since function is not allowed to read global memory.
 148 *
 149 * Note that a function that has pointer arguments and examines the
 150 * data pointed to must _not_ be declared `const'.  Likewise, a
 151 * function that calls a non-`const' function usually must not be
 152 * `const'.  It does not make sense for a `const' function to return
 153 * `void'.
 154 */
 155#ifndef __attribute_const__
 156# define __attribute_const__    /* unimplemented */
 157#endif
 158
 159#endif /* __LINUX_COMPILER_H */
 160
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.