diff options
Diffstat (limited to 'include/linux/compiler.h')
-rw-r--r-- | include/linux/compiler.h | 286 |
1 files changed, 4 insertions, 282 deletions
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 4fac29cdffd1..188ed9f65517 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
@@ -2,111 +2,12 @@ | |||
2 | #ifndef __LINUX_COMPILER_H | 2 | #ifndef __LINUX_COMPILER_H |
3 | #define __LINUX_COMPILER_H | 3 | #define __LINUX_COMPILER_H |
4 | 4 | ||
5 | #ifndef __ASSEMBLY__ | 5 | #include <linux/compiler_types.h> |
6 | 6 | ||
7 | #ifdef __CHECKER__ | 7 | #ifndef __ASSEMBLY__ |
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 /* __CHECKER__ */ | ||
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 /* __CHECKER__ */ | ||
51 | |||
52 | /* Indirect macros required for expanded argument pasting, eg. __LINE__. */ | ||
53 | #define ___PASTE(a,b) a##b | ||
54 | #define __PASTE(a,b) ___PASTE(a,b) | ||
55 | 8 | ||
56 | #ifdef __KERNEL__ | 9 | #ifdef __KERNEL__ |
57 | 10 | ||
58 | #ifdef __GNUC__ | ||
59 | #include <linux/compiler-gcc.h> | ||
60 | #endif | ||
61 | |||
62 | #if defined(CC_USING_HOTPATCH) && !defined(__CHECKER__) | ||
63 | #define notrace __attribute__((hotpatch(0,0))) | ||
64 | #else | ||
65 | #define notrace __attribute__((no_instrument_function)) | ||
66 | #endif | ||
67 | |||
68 | /* Intel compiler defines __GNUC__. So we will overwrite implementations | ||
69 | * coming from above header files here | ||
70 | */ | ||
71 | #ifdef __INTEL_COMPILER | ||
72 | # include <linux/compiler-intel.h> | ||
73 | #endif | ||
74 | |||
75 | /* Clang compiler defines __GNUC__. So we will overwrite implementations | ||
76 | * coming from above header files here | ||
77 | */ | ||
78 | #ifdef __clang__ | ||
79 | #include <linux/compiler-clang.h> | ||
80 | #endif | ||
81 | |||
82 | /* | ||
83 | * Generic compiler-dependent macros required for kernel | ||
84 | * build go below this comment. Actual compiler/compiler version | ||
85 | * specific implementations come from the above header files | ||
86 | */ | ||
87 | |||
88 | struct ftrace_branch_data { | ||
89 | const char *func; | ||
90 | const char *file; | ||
91 | unsigned line; | ||
92 | union { | ||
93 | struct { | ||
94 | unsigned long correct; | ||
95 | unsigned long incorrect; | ||
96 | }; | ||
97 | struct { | ||
98 | unsigned long miss; | ||
99 | unsigned long hit; | ||
100 | }; | ||
101 | unsigned long miss_hit[2]; | ||
102 | }; | ||
103 | }; | ||
104 | |||
105 | struct ftrace_likely_data { | ||
106 | struct ftrace_branch_data data; | ||
107 | unsigned long constant; | ||
108 | }; | ||
109 | |||
110 | /* | 11 | /* |
111 | * Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code | 12 | * Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code |
112 | * to disable branch tracing on a per file basis. | 13 | * to disable branch tracing on a per file basis. |
@@ -338,6 +239,7 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s | |||
338 | * with an explicit memory barrier or atomic instruction that provides the | 239 | * with an explicit memory barrier or atomic instruction that provides the |
339 | * required ordering. | 240 | * required ordering. |
340 | */ | 241 | */ |
242 | #include <asm/barrier.h> | ||
341 | 243 | ||
342 | #define __READ_ONCE(x, check) \ | 244 | #define __READ_ONCE(x, check) \ |
343 | ({ \ | 245 | ({ \ |
@@ -346,6 +248,7 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s | |||
346 | __read_once_size(&(x), __u.__c, sizeof(x)); \ | 248 | __read_once_size(&(x), __u.__c, sizeof(x)); \ |
347 | else \ | 249 | else \ |
348 | __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \ | 250 | __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \ |
251 | smp_read_barrier_depends(); /* Enforce dependency ordering from x */ \ | ||
349 | __u.__val; \ | 252 | __u.__val; \ |
350 | }) | 253 | }) |
351 | #define READ_ONCE(x) __READ_ONCE(x, 1) | 254 | #define READ_ONCE(x) __READ_ONCE(x, 1) |
@@ -368,167 +271,6 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s | |||
368 | 271 | ||
369 | #endif /* __ASSEMBLY__ */ | 272 | #endif /* __ASSEMBLY__ */ |
370 | 273 | ||
371 | #ifdef __KERNEL__ | ||
372 | /* | ||
373 | * Allow us to mark functions as 'deprecated' and have gcc emit a nice | ||
374 | * warning for each use, in hopes of speeding the functions removal. | ||
375 | * Usage is: | ||
376 | * int __deprecated foo(void) | ||
377 | */ | ||
378 | #ifndef __deprecated | ||
379 | # define __deprecated /* unimplemented */ | ||
380 | #endif | ||
381 | |||
382 | #ifdef MODULE | ||
383 | #define __deprecated_for_modules __deprecated | ||
384 | #else | ||
385 | #define __deprecated_for_modules | ||
386 | #endif | ||
387 | |||
388 | #ifndef __must_check | ||
389 | #define __must_check | ||
390 | #endif | ||
391 | |||
392 | #ifndef CONFIG_ENABLE_MUST_CHECK | ||
393 | #undef __must_check | ||
394 | #define __must_check | ||
395 | #endif | ||
396 | #ifndef CONFIG_ENABLE_WARN_DEPRECATED | ||
397 | #undef __deprecated | ||
398 | #undef __deprecated_for_modules | ||
399 | #define __deprecated | ||
400 | #define __deprecated_for_modules | ||
401 | #endif | ||
402 | |||
403 | #ifndef __malloc | ||
404 | #define __malloc | ||
405 | #endif | ||
406 | |||
407 | /* | ||
408 | * Allow us to avoid 'defined but not used' warnings on functions and data, | ||
409 | * as well as force them to be emitted to the assembly file. | ||
410 | * | ||
411 | * As of gcc 3.4, static functions that are not marked with attribute((used)) | ||
412 | * may be elided from the assembly file. As of gcc 3.4, static data not so | ||
413 | * marked will not be elided, but this may change in a future gcc version. | ||
414 | * | ||
415 | * NOTE: Because distributions shipped with a backported unit-at-a-time | ||
416 | * compiler in gcc 3.3, we must define __used to be __attribute__((used)) | ||
417 | * for gcc >=3.3 instead of 3.4. | ||
418 | * | ||
419 | * In prior versions of gcc, such functions and data would be emitted, but | ||
420 | * would be warned about except with attribute((unused)). | ||
421 | * | ||
422 | * Mark functions that are referenced only in inline assembly as __used so | ||
423 | * the code is emitted even though it appears to be unreferenced. | ||
424 | */ | ||
425 | #ifndef __used | ||
426 | # define __used /* unimplemented */ | ||
427 | #endif | ||
428 | |||
429 | #ifndef __maybe_unused | ||
430 | # define __maybe_unused /* unimplemented */ | ||
431 | #endif | ||
432 | |||
433 | #ifndef __always_unused | ||
434 | # define __always_unused /* unimplemented */ | ||
435 | #endif | ||
436 | |||
437 | #ifndef noinline | ||
438 | #define noinline | ||
439 | #endif | ||
440 | |||
441 | /* | ||
442 | * Rather then using noinline to prevent stack consumption, use | ||
443 | * noinline_for_stack instead. For documentation reasons. | ||
444 | */ | ||
445 | #define noinline_for_stack noinline | ||
446 | |||
447 | #ifndef __always_inline | ||
448 | #define __always_inline inline | ||
449 | #endif | ||
450 | |||
451 | #endif /* __KERNEL__ */ | ||
452 | |||
453 | /* | ||
454 | * From the GCC manual: | ||
455 | * | ||
456 | * Many functions do not examine any values except their arguments, | ||
457 | * and have no effects except the return value. Basically this is | ||
458 | * just slightly more strict class than the `pure' attribute above, | ||
459 | * since function is not allowed to read global memory. | ||
460 | * | ||
461 | * Note that a function that has pointer arguments and examines the | ||
462 | * data pointed to must _not_ be declared `const'. Likewise, a | ||
463 | * function that calls a non-`const' function usually must not be | ||
464 | * `const'. It does not make sense for a `const' function to return | ||
465 | * `void'. | ||
466 | */ | ||
467 | #ifndef __attribute_const__ | ||
468 | # define __attribute_const__ /* unimplemented */ | ||
469 | #endif | ||
470 | |||
471 | #ifndef __designated_init | ||
472 | # define __designated_init | ||
473 | #endif | ||
474 | |||
475 | #ifndef __latent_entropy | ||
476 | # define __latent_entropy | ||
477 | #endif | ||
478 | |||
479 | #ifndef __randomize_layout | ||
480 | # define __randomize_layout __designated_init | ||
481 | #endif | ||
482 | |||
483 | #ifndef __no_randomize_layout | ||
484 | # define __no_randomize_layout | ||
485 | #endif | ||
486 | |||
487 | #ifndef randomized_struct_fields_start | ||
488 | # define randomized_struct_fields_start | ||
489 | # define randomized_struct_fields_end | ||
490 | #endif | ||
491 | |||
492 | /* | ||
493 | * Tell gcc if a function is cold. The compiler will assume any path | ||
494 | * directly leading to the call is unlikely. | ||
495 | */ | ||
496 | |||
497 | #ifndef __cold | ||
498 | #define __cold | ||
499 | #endif | ||
500 | |||
501 | /* Simple shorthand for a section definition */ | ||
502 | #ifndef __section | ||
503 | # define __section(S) __attribute__ ((__section__(#S))) | ||
504 | #endif | ||
505 | |||
506 | #ifndef __visible | ||
507 | #define __visible | ||
508 | #endif | ||
509 | |||
510 | #ifndef __nostackprotector | ||
511 | # define __nostackprotector | ||
512 | #endif | ||
513 | |||
514 | /* | ||
515 | * Assume alignment of return value. | ||
516 | */ | ||
517 | #ifndef __assume_aligned | ||
518 | #define __assume_aligned(a, ...) | ||
519 | #endif | ||
520 | |||
521 | |||
522 | /* Are two types/vars the same type (ignoring qualifiers)? */ | ||
523 | #ifndef __same_type | ||
524 | # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) | ||
525 | #endif | ||
526 | |||
527 | /* Is this type a native word size -- useful for atomic operations */ | ||
528 | #ifndef __native_word | ||
529 | # define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long)) | ||
530 | #endif | ||
531 | |||
532 | /* Compile time object size, -1 for unknown */ | 274 | /* Compile time object size, -1 for unknown */ |
533 | #ifndef __compiletime_object_size | 275 | #ifndef __compiletime_object_size |
534 | # define __compiletime_object_size(obj) -1 | 276 | # define __compiletime_object_size(obj) -1 |
@@ -610,24 +352,4 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s | |||
610 | (volatile typeof(x) *)&(x); }) | 352 | (volatile typeof(x) *)&(x); }) |
611 | #define ACCESS_ONCE(x) (*__ACCESS_ONCE(x)) | 353 | #define ACCESS_ONCE(x) (*__ACCESS_ONCE(x)) |
612 | 354 | ||
613 | /** | ||
614 | * lockless_dereference() - safely load a pointer for later dereference | ||
615 | * @p: The pointer to load | ||
616 | * | ||
617 | * Similar to rcu_dereference(), but for situations where the pointed-to | ||
618 | * object's lifetime is managed by something other than RCU. That | ||
619 | * "something other" might be reference counting or simple immortality. | ||
620 | * | ||
621 | * The seemingly unused variable ___typecheck_p validates that @p is | ||
622 | * indeed a pointer type by using a pointer to typeof(*p) as the type. | ||
623 | * Taking a pointer to typeof(*p) again is needed in case p is void *. | ||
624 | */ | ||
625 | #define lockless_dereference(p) \ | ||
626 | ({ \ | ||
627 | typeof(p) _________p1 = READ_ONCE(p); \ | ||
628 | typeof(*(p)) *___typecheck_p __maybe_unused; \ | ||
629 | smp_read_barrier_depends(); /* Dependency order vs. p above. */ \ | ||
630 | (_________p1); \ | ||
631 | }) | ||
632 | |||
633 | #endif /* __LINUX_COMPILER_H */ | 355 | #endif /* __LINUX_COMPILER_H */ |