1 
   2 #ifndef __LINUX_COMPILER_TYPES_H
   3 #define __LINUX_COMPILER_TYPES_H
   4 
   5 #ifndef __ASSEMBLY__
   6 
   7 #ifdef __CHECKER__
   8 # define __user         __attribute__((noderef, address_space(1)))
   9 # define __kernel       __attribute__((address_space(0)))
  10 # define __safe         __attribute__((safe))
  11 # define __force        __attribute__((force))
  12 # define __nocast       __attribute__((nocast))
  13 # define __iomem        __attribute__((noderef, address_space(2)))
  14 # define __must_hold(x) __attribute__((context(x,1,1)))
  15 # define __acquires(x)  __attribute__((context(x,0,1)))
  16 # define __releases(x)  __attribute__((context(x,1,0)))
  17 # define __acquire(x)   __context__(x,1)
  18 # define __release(x)   __context__(x,-1)
  19 # define __cond_lock(x,c)       ((c) ? ({ __acquire(x); 1; }) : 0)
  20 # define __percpu       __attribute__((noderef, address_space(3)))
  21 # define __rcu          __attribute__((noderef, address_space(4)))
  22 # define __private      __attribute__((noderef))
  23 extern void __chk_user_ptr(const volatile void __user *);
  24 extern void __chk_io_ptr(const volatile void __iomem *);
  25 # define ACCESS_PRIVATE(p, member) (*((typeof((p)->member) __force *) &(p)->member))
  26 #else 
  27 # ifdef STRUCTLEAK_PLUGIN
  28 #  define __user __attribute__((user))
  29 # else
  30 #  define __user
  31 # endif
  32 # define __kernel
  33 # define __safe
  34 # define __force
  35 # define __nocast
  36 # define __iomem
  37 # define __chk_user_ptr(x) (void)0
  38 # define __chk_io_ptr(x) (void)0
  39 # define __builtin_warning(x, y...) (1)
  40 # define __must_hold(x)
  41 # define __acquires(x)
  42 # define __releases(x)
  43 # define __acquire(x) (void)0
  44 # define __release(x) (void)0
  45 # define __cond_lock(x,c) (c)
  46 # define __percpu
  47 # define __rcu
  48 # define __private
  49 # define ACCESS_PRIVATE(p, member) ((p)->member)
  50 #endif 
  51 
  52 
  53 #define ___PASTE(a,b) a##b
  54 #define __PASTE(a,b) ___PASTE(a,b)
  55 
  56 #ifdef __KERNEL__
  57 
  58 
  59 #include <linux/compiler_attributes.h>
  60 
  61 
  62 #ifdef __clang__
  63 #include <linux/compiler-clang.h>
  64 #elif defined(__INTEL_COMPILER)
  65 #include <linux/compiler-intel.h>
  66 #elif defined(__GNUC__)
  67 
  68 #include <linux/compiler-gcc.h>
  69 #else
  70 #error "Unknown compiler"
  71 #endif
  72 
  73 
  74 
  75 
  76 
  77 
  78 
  79 
  80 
  81 #ifdef CONFIG_HAVE_ARCH_COMPILER_H
  82 #include <asm/compiler.h>
  83 #endif
  84 
  85 struct ftrace_branch_data {
  86         const char *func;
  87         const char *file;
  88         unsigned line;
  89         union {
  90                 struct {
  91                         unsigned long correct;
  92                         unsigned long incorrect;
  93                 };
  94                 struct {
  95                         unsigned long miss;
  96                         unsigned long hit;
  97                 };
  98                 unsigned long miss_hit[2];
  99         };
 100 };
 101 
 102 struct ftrace_likely_data {
 103         struct ftrace_branch_data       data;
 104         unsigned long                   constant;
 105 };
 106 
 107 #ifdef CONFIG_ENABLE_MUST_CHECK
 108 #define __must_check            __attribute__((__warn_unused_result__))
 109 #else
 110 #define __must_check
 111 #endif
 112 
 113 #if defined(CC_USING_HOTPATCH)
 114 #define notrace                 __attribute__((hotpatch(0, 0)))
 115 #elif defined(CC_USING_PATCHABLE_FUNCTION_ENTRY)
 116 #define notrace                 __attribute__((patchable_function_entry(0, 0)))
 117 #else
 118 #define notrace                 __attribute__((__no_instrument_function__))
 119 #endif
 120 
 121 
 122 
 123 
 124 
 125 
 126 
 127 #define __naked                 __attribute__((__naked__)) notrace
 128 
 129 #define __compiler_offsetof(a, b)       __builtin_offsetof(a, b)
 130 
 131 
 132 
 133 
 134 
 135 
 136 
 137 
 138 
 139 
 140 
 141 #if !defined(CONFIG_OPTIMIZE_INLINING)
 142 #define inline inline __attribute__((__always_inline__)) __gnu_inline \
 143         __inline_maybe_unused notrace
 144 #else
 145 #define inline inline                                    __gnu_inline \
 146         __inline_maybe_unused notrace
 147 #endif
 148 
 149 
 150 
 151 
 152 
 153 
 154 
 155 
 156 
 157 
 158 
 159 #define __inline__ inline
 160 
 161 
 162 
 163 
 164 
 165 
 166 
 167 #ifdef KBUILD_EXTRA_WARN1
 168 #define __inline_maybe_unused
 169 #else
 170 #define __inline_maybe_unused __maybe_unused
 171 #endif
 172 
 173 
 174 
 175 
 176 
 177 #define noinline_for_stack noinline
 178 
 179 #endif 
 180 
 181 #endif 
 182 
 183 
 184 
 185 
 186 
 187 
 188 #ifndef __latent_entropy
 189 # define __latent_entropy
 190 #endif
 191 
 192 #ifndef __randomize_layout
 193 # define __randomize_layout __designated_init
 194 #endif
 195 
 196 #ifndef __no_randomize_layout
 197 # define __no_randomize_layout
 198 #endif
 199 
 200 #ifndef randomized_struct_fields_start
 201 # define randomized_struct_fields_start
 202 # define randomized_struct_fields_end
 203 #endif
 204 
 205 #ifndef asm_volatile_goto
 206 #define asm_volatile_goto(x...) asm goto(x)
 207 #endif
 208 
 209 #ifdef CONFIG_CC_HAS_ASM_INLINE
 210 #define asm_inline asm __inline
 211 #else
 212 #define asm_inline asm
 213 #endif
 214 
 215 #ifndef __no_fgcse
 216 # define __no_fgcse
 217 #endif
 218 
 219 
 220 #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
 221 
 222 
 223 #define __native_word(t) \
 224         (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
 225          sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
 226 
 227 
 228 #ifndef __diag
 229 #define __diag(string)
 230 #endif
 231 
 232 #ifndef __diag_GCC
 233 #define __diag_GCC(version, severity, string)
 234 #endif
 235 
 236 #define __diag_push()   __diag(push)
 237 #define __diag_pop()    __diag(pop)
 238 
 239 #define __diag_ignore(compiler, version, option, comment) \
 240         __diag_ ## compiler(version, ignore, option)
 241 #define __diag_warn(compiler, version, option, comment) \
 242         __diag_ ## compiler(version, warn, option)
 243 #define __diag_error(compiler, version, option, comment) \
 244         __diag_ ## compiler(version, error, option)
 245 
 246 #endif