compiler.h 13.6 KB
Newer Older
L
Linus Torvalds 已提交
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)))
R
Rusty Russell 已提交
8
# define __kernel	__attribute__((address_space(0)))
L
Linus Torvalds 已提交
9 10 11 12
# define __safe		__attribute__((safe))
# define __force	__attribute__((force))
# define __nocast	__attribute__((nocast))
# define __iomem	__attribute__((noderef, address_space(2)))
13
# define __must_hold(x)	__attribute__((context(x,1,1)))
14 15 16 17
# 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)
18
# define __cond_lock(x,c)	((c) ? ({ __acquire(x); 1; }) : 0)
R
Rusty Russell 已提交
19
# define __percpu	__attribute__((noderef, address_space(3)))
20 21 22
#ifdef CONFIG_SPARSE_RCU_POINTER
# define __rcu		__attribute__((noderef, address_space(4)))
#else
23
# define __rcu
24
#endif
25 26
extern void __chk_user_ptr(const volatile void __user *);
extern void __chk_io_ptr(const volatile void __iomem *);
L
Linus Torvalds 已提交
27 28 29 30 31 32 33 34 35 36
#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)
37
# define __must_hold(x)
L
Linus Torvalds 已提交
38 39 40 41
# define __acquires(x)
# define __releases(x)
# define __acquire(x) (void)0
# define __release(x) (void)0
42
# define __cond_lock(x,c) (c)
R
Rusty Russell 已提交
43
# define __percpu
44
# define __rcu
L
Linus Torvalds 已提交
45 46
#endif

R
Rusty Russell 已提交
47 48 49 50
/* Indirect macros required for expanded argument pasting, eg. __LINE__. */
#define ___PASTE(a,b) a##b
#define __PASTE(a,b) ___PASTE(a,b)

L
Linus Torvalds 已提交
51 52
#ifdef __KERNEL__

53 54
#ifdef __GNUC__
#include <linux/compiler-gcc.h>
L
Linus Torvalds 已提交
55 56
#endif

57 58
#define notrace __attribute__((no_instrument_function))

L
Linus Torvalds 已提交
59 60 61 62 63 64 65
/* Intel compiler defines __GNUC__. So we will overwrite implementations
 * coming from above header files here
 */
#ifdef __INTEL_COMPILER
# include <linux/compiler-intel.h>
#endif

66 67 68 69 70 71 72
/* Clang compiler defines __GNUC__. So we will overwrite implementations
 * coming from above header files here
 */
#ifdef __clang__
#include <linux/compiler-clang.h>
#endif

L
Linus Torvalds 已提交
73 74 75 76 77 78
/*
 * Generic compiler-dependent macros required for kernel
 * build go below this comment. Actual compiler/compiler version
 * specific implementations come from the above header files
 */

79
struct ftrace_branch_data {
80 81 82
	const char *func;
	const char *file;
	unsigned line;
83 84 85 86 87 88 89 90 91
	union {
		struct {
			unsigned long correct;
			unsigned long incorrect;
		};
		struct {
			unsigned long miss;
			unsigned long hit;
		};
92
		unsigned long miss_hit[2];
93
	};
94
};
95 96 97 98 99

/*
 * Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code
 * to disable branch tracing on a per file basis.
 */
100 101
#if defined(CONFIG_TRACE_BRANCH_PROFILING) \
    && !defined(DISABLE_BRANCH_PROFILING) && !defined(__CHECKER__)
102
void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
103 104 105 106

#define likely_notrace(x)	__builtin_expect(!!(x), 1)
#define unlikely_notrace(x)	__builtin_expect(!!(x), 0)

107
#define __branch_check__(x, expect) ({					\
108
			int ______r;					\
109
			static struct ftrace_branch_data		\
110
				__attribute__((__aligned__(4)))		\
111
				__attribute__((section("_ftrace_annotated_branch"))) \
112 113 114 115 116 117
				______f = {				\
				.func = __func__,			\
				.file = __FILE__,			\
				.line = __LINE__,			\
			};						\
			______r = likely_notrace(x);			\
118
			ftrace_likely_update(&______f, ______r, expect); \
119 120 121 122 123 124 125 126 127
			______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
128
#  define likely(x)	(__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1))
129 130
# endif
# ifndef unlikely
131
#  define unlikely(x)	(__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 0))
132
# endif
133 134 135 136 137 138

#ifdef CONFIG_PROFILE_ALL_BRANCHES
/*
 * "Define 'is'", Bill Clinton
 * "Define 'if'", Steven Rostedt
 */
139 140 141
#define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
#define __trace_if(cond) \
	if (__builtin_constant_p((cond)) ? !!(cond) :			\
142 143 144 145 146 147 148 149 150 151 152
	({								\
		int ______r;						\
		static struct ftrace_branch_data			\
			__attribute__((__aligned__(4)))			\
			__attribute__((section("_ftrace_branch")))	\
			______f = {					\
				.func = __func__,			\
				.file = __FILE__,			\
				.line = __LINE__,			\
			};						\
		______r = !!(cond);					\
153
		______f.miss_hit[______r]++;					\
154 155 156 157
		______r;						\
	}))
#endif /* CONFIG_PROFILE_ALL_BRANCHES */

158 159 160 161
#else
# define likely(x)	__builtin_expect(!!(x), 1)
# define unlikely(x)	__builtin_expect(!!(x), 0)
#endif
L
Linus Torvalds 已提交
162 163 164 165 166 167

/* Optimization barrier */
#ifndef barrier
# define barrier() __memory_barrier()
#endif

168 169 170 171 172
/* Unreachable code */
#ifndef unreachable
# define unreachable() do { } while (1)
#endif

L
Linus Torvalds 已提交
173 174 175 176 177 178 179
#ifndef RELOC_HIDE
# define RELOC_HIDE(ptr, off)					\
  ({ unsigned long __ptr;					\
     __ptr = (unsigned long) (ptr);				\
    (typeof(ptr)) (__ptr + (off)); })
#endif

180 181 182 183
#ifndef OPTIMIZER_HIDE_VAR
#define OPTIMIZER_HIDE_VAR(var) barrier()
#endif

R
Rusty Russell 已提交
184 185 186 187 188
/* Not-quite-unique ID. */
#ifndef __UNIQUE_ID
# define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __LINE__)
#endif

189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262
#include <uapi/linux/types.h>

static __always_inline void data_access_exceeds_word_size(void)
#ifdef __compiletime_warning
__compiletime_warning("data access exceeds word size and won't be atomic")
#endif
;

static __always_inline void data_access_exceeds_word_size(void)
{
}

static __always_inline void __read_once_size(volatile void *p, void *res, int size)
{
	switch (size) {
	case 1: *(__u8 *)res = *(volatile __u8 *)p; break;
	case 2: *(__u16 *)res = *(volatile __u16 *)p; break;
	case 4: *(__u32 *)res = *(volatile __u32 *)p; break;
#ifdef CONFIG_64BIT
	case 8: *(__u64 *)res = *(volatile __u64 *)p; break;
#endif
	default:
		barrier();
		__builtin_memcpy((void *)res, (const void *)p, size);
		data_access_exceeds_word_size();
		barrier();
	}
}

static __always_inline void __assign_once_size(volatile void *p, void *res, int size)
{
	switch (size) {
	case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
	case 2: *(volatile __u16 *)p = *(__u16 *)res; break;
	case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
#ifdef CONFIG_64BIT
	case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
#endif
	default:
		barrier();
		__builtin_memcpy((void *)p, (const void *)res, size);
		data_access_exceeds_word_size();
		barrier();
	}
}

/*
 * Prevent the compiler from merging or refetching reads or writes. The
 * compiler is also forbidden from reordering successive instances of
 * READ_ONCE, ASSIGN_ONCE and ACCESS_ONCE (see below), 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 READ_ONCE,
 * ASSIGN_ONCE or ACCESS_ONCE() in different C statements.
 *
 * In contrast to ACCESS_ONCE these two macros will also work on aggregate
 * data types like structs or unions. If the size of the accessed data
 * type exceeds the word size of the machine (e.g., 32 bits or 64 bits)
 * READ_ONCE() and ASSIGN_ONCE()  will fall back to memcpy and print a
 * compile-time warning.
 *
 * Their two major use cases are: (1) Mediating communication between
 * process-level code and irq/NMI handlers, all running on the same CPU,
 * and (2) Ensuring that the compiler does not  fold, spindle, or otherwise
 * mutilate accesses that either do not require ordering or that interact
 * with an explicit memory barrier or atomic instruction that provides the
 * required ordering.
 */

#define READ_ONCE(x) \
	({ typeof(x) __val; __read_once_size(&x, &__val, sizeof(__val)); __val; })

#define ASSIGN_ONCE(val, x) \
	({ typeof(x) __val; __val = val; __assign_once_size(&x, &__val, sizeof(__val)); __val; })

L
Linus Torvalds 已提交
263 264 265 266
#endif /* __KERNEL__ */

#endif /* __ASSEMBLY__ */

267
#ifdef __KERNEL__
L
Linus Torvalds 已提交
268 269 270 271 272 273 274 275 276 277
/*
 * 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

278 279 280 281 282 283
#ifdef MODULE
#define __deprecated_for_modules __deprecated
#else
#define __deprecated_for_modules
#endif

L
Linus Torvalds 已提交
284 285 286 287
#ifndef __must_check
#define __must_check
#endif

A
Andrew Morton 已提交
288 289 290 291
#ifndef CONFIG_ENABLE_MUST_CHECK
#undef __must_check
#define __must_check
#endif
292 293 294 295 296 297
#ifndef CONFIG_ENABLE_WARN_DEPRECATED
#undef __deprecated
#undef __deprecated_for_modules
#define __deprecated
#define __deprecated_for_modules
#endif
A
Andrew Morton 已提交
298

L
Linus Torvalds 已提交
299 300 301 302
/*
 * 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.
 *
303 304
 * 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
L
Linus Torvalds 已提交
305 306
 * marked will not be elided, but this may change in a future gcc version.
 *
307 308 309 310
 * 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.
 *
L
Linus Torvalds 已提交
311 312
 * In prior versions of gcc, such functions and data would be emitted, but
 * would be warned about except with attribute((unused)).
313 314 315
 *
 * Mark functions that are referenced only in inline assembly as __used so
 * the code is emitted even though it appears to be unreferenced.
L
Linus Torvalds 已提交
316
 */
317 318 319 320 321 322
#ifndef __used
# define __used			/* unimplemented */
#endif

#ifndef __maybe_unused
# define __maybe_unused		/* unimplemented */
L
Linus Torvalds 已提交
323 324
#endif

L
Li Zefan 已提交
325 326 327 328
#ifndef __always_unused
# define __always_unused	/* unimplemented */
#endif

329 330 331 332
#ifndef noinline
#define noinline
#endif

A
Andrew Morton 已提交
333 334
/*
 * Rather then using noinline to prevent stack consumption, use
A
Alexander Stein 已提交
335
 * noinline_for_stack instead.  For documentation reasons.
A
Andrew Morton 已提交
336 337 338
 */
#define noinline_for_stack noinline

339 340 341 342 343 344
#ifndef __always_inline
#define __always_inline inline
#endif

#endif /* __KERNEL__ */

L
Linus Torvalds 已提交
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
/*
 * 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

363 364 365 366 367 368 369 370 371
/*
 * 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

S
Sam Ravnborg 已提交
372 373 374 375 376
/* Simple shorthand for a section definition */
#ifndef __section
# define __section(S) __attribute__ ((__section__(#S)))
#endif

A
Andi Kleen 已提交
377 378 379 380
#ifndef __visible
#define __visible
#endif

381 382 383 384 385
/* 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

386 387 388 389 390
/* Is this type a native word size -- useful for atomic operations */
#ifndef __native_word
# define __native_word(t) (sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
#endif

391 392 393 394
/* Compile time object size, -1 for unknown */
#ifndef __compiletime_object_size
# define __compiletime_object_size(obj) -1
#endif
395 396 397
#ifndef __compiletime_warning
# define __compiletime_warning(message)
#endif
398 399
#ifndef __compiletime_error
# define __compiletime_error(message)
400 401 402 403 404 405 406 407
/*
 * Sparse complains of variable sized arrays due to the temporary variable in
 * __compiletime_assert. Unfortunately we can't just expand it out to make
 * sparse see a constant array size without breaking compiletime_assert on old
 * versions of GCC (e.g. 4.2.4), so hide the array from sparse altogether.
 */
# ifndef __CHECKER__
#  define __compiletime_error_fallback(condition) \
408
	do { ((void)sizeof(char[1 - 2 * condition])); } while (0)
409 410 411
# endif
#endif
#ifndef __compiletime_error_fallback
412
# define __compiletime_error_fallback(condition) do { } while (0)
413
#endif
414

415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438
#define __compiletime_assert(condition, msg, prefix, suffix)		\
	do {								\
		bool __cond = !(condition);				\
		extern void prefix ## suffix(void) __compiletime_error(msg); \
		if (__cond)						\
			prefix ## suffix();				\
		__compiletime_error_fallback(__cond);			\
	} while (0)

#define _compiletime_assert(condition, msg, prefix, suffix) \
	__compiletime_assert(condition, msg, prefix, suffix)

/**
 * compiletime_assert - break build and emit msg if condition is false
 * @condition: a compile-time constant condition to check
 * @msg:       a message to emit if condition is false
 *
 * In tradition of POSIX assert, this macro will break the build if the
 * supplied condition is *false*, emitting the supplied error message if the
 * compiler has support to do so.
 */
#define compiletime_assert(condition, msg) \
	_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)

439 440 441 442
#define compiletime_assert_atomic_type(t)				\
	compiletime_assert(__native_word(t),				\
		"Need native word sized stores/loads for atomicity.")

443 444 445 446 447 448 449 450
/*
 * 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,
451 452 453
 * 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.
454 455 456
 */
#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))

457 458 459
/* Ignore/forbid kprobes attach on very low level functions marked by this attribute: */
#ifdef CONFIG_KPROBES
# define __kprobes	__attribute__((__section__(".kprobes.text")))
460
# define nokprobe_inline	__always_inline
461 462
#else
# define __kprobes
463
# define nokprobe_inline	inline
464
#endif
L
Linus Torvalds 已提交
465
#endif /* __LINUX_COMPILER_H */