|
1 | 1 | #ifndef __LINUX_COMPILER_H
|
2 | 2 | #define __LINUX_COMPILER_H
|
3 | 3 |
|
4 |
| -#ifndef __ASSEMBLY__ |
| 4 | +#include <linux/compiler_types.h> |
5 | 5 |
|
6 |
| -#ifdef __CHECKER__ |
7 |
| -# define __user __attribute__((noderef, address_space(1))) |
8 |
| -# define __kernel __attribute__((address_space(0))) |
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 __must_hold(x) __attribute__((context(x,1,1))) |
14 |
| -# define __acquires(x) __attribute__((context(x,0,1))) |
15 |
| -# define __releases(x) __attribute__((context(x,1,0))) |
16 |
| -# define __acquire(x) __context__(x,1) |
17 |
| -# define __release(x) __context__(x,-1) |
18 |
| -# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) |
19 |
| -# define __percpu __attribute__((noderef, address_space(3))) |
20 |
| -# define __rcu __attribute__((noderef, address_space(4))) |
21 |
| -# define __private __attribute__((noderef)) |
22 |
| -extern void __chk_user_ptr(const volatile void __user *); |
23 |
| -extern void __chk_io_ptr(const volatile void __iomem *); |
24 |
| -# define ACCESS_PRIVATE(p, member) (*((typeof((p)->member) __force *) &(p)->member)) |
25 |
| -#else /* __CHECKER__ */ |
26 |
| -# ifdef STRUCTLEAK_PLUGIN |
27 |
| -# define __user __attribute__((user)) |
28 |
| -# else |
29 |
| -# define __user |
30 |
| -# endif |
31 |
| -# define __kernel |
32 |
| -# define __safe |
33 |
| -# define __force |
34 |
| -# define __nocast |
35 |
| -# define __iomem |
36 |
| -# define __chk_user_ptr(x) (void)0 |
37 |
| -# define __chk_io_ptr(x) (void)0 |
38 |
| -# define __builtin_warning(x, y...) (1) |
39 |
| -# define __must_hold(x) |
40 |
| -# define __acquires(x) |
41 |
| -# define __releases(x) |
42 |
| -# define __acquire(x) (void)0 |
43 |
| -# define __release(x) (void)0 |
44 |
| -# define __cond_lock(x,c) (c) |
45 |
| -# define __percpu |
46 |
| -# define __rcu |
47 |
| -# define __private |
48 |
| -# define ACCESS_PRIVATE(p, member) ((p)->member) |
49 |
| -#endif /* __CHECKER__ */ |
50 |
| - |
51 |
| -/* Indirect macros required for expanded argument pasting, eg. __LINE__. */ |
52 |
| -#define ___PASTE(a,b) a##b |
53 |
| -#define __PASTE(a,b) ___PASTE(a,b) |
| 6 | +#ifndef __ASSEMBLY__ |
54 | 7 |
|
55 | 8 | #ifdef __KERNEL__
|
56 | 9 |
|
57 |
| -#ifdef __GNUC__ |
58 |
| -#include <linux/compiler-gcc.h> |
59 |
| -#endif |
60 |
| - |
61 |
| -#if defined(CC_USING_HOTPATCH) && !defined(__CHECKER__) |
62 |
| -#define notrace __attribute__((hotpatch(0,0))) |
63 |
| -#else |
64 |
| -#define notrace __attribute__((no_instrument_function)) |
65 |
| -#endif |
66 |
| - |
67 |
| -/* Intel compiler defines __GNUC__. So we will overwrite implementations |
68 |
| - * coming from above header files here |
69 |
| - */ |
70 |
| -#ifdef __INTEL_COMPILER |
71 |
| -# include <linux/compiler-intel.h> |
72 |
| -#endif |
73 |
| - |
74 |
| -/* Clang compiler defines __GNUC__. So we will overwrite implementations |
75 |
| - * coming from above header files here |
76 |
| - */ |
77 |
| -#ifdef __clang__ |
78 |
| -#include <linux/compiler-clang.h> |
79 |
| -#endif |
80 |
| - |
81 |
| -/* |
82 |
| - * Generic compiler-dependent macros required for kernel |
83 |
| - * build go below this comment. Actual compiler/compiler version |
84 |
| - * specific implementations come from the above header files |
85 |
| - */ |
86 |
| - |
87 |
| -struct ftrace_branch_data { |
88 |
| - const char *func; |
89 |
| - const char *file; |
90 |
| - unsigned line; |
91 |
| - union { |
92 |
| - struct { |
93 |
| - unsigned long correct; |
94 |
| - unsigned long incorrect; |
95 |
| - }; |
96 |
| - struct { |
97 |
| - unsigned long miss; |
98 |
| - unsigned long hit; |
99 |
| - }; |
100 |
| - unsigned long miss_hit[2]; |
101 |
| - }; |
102 |
| -}; |
103 |
| - |
104 |
| -struct ftrace_likely_data { |
105 |
| - struct ftrace_branch_data data; |
106 |
| - unsigned long constant; |
107 |
| -}; |
108 |
| - |
109 | 10 | /*
|
110 | 11 | * Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code
|
111 | 12 | * to disable branch tracing on a per file basis.
|
@@ -332,6 +233,7 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
|
332 | 233 | * with an explicit memory barrier or atomic instruction that provides the
|
333 | 234 | * required ordering.
|
334 | 235 | */
|
| 236 | +#include <asm/barrier.h> |
335 | 237 |
|
336 | 238 | #define __READ_ONCE(x, check) \
|
337 | 239 | ({ \
|
@@ -362,167 +264,6 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
|
362 | 264 |
|
363 | 265 | #endif /* __ASSEMBLY__ */
|
364 | 266 |
|
365 |
| -#ifdef __KERNEL__ |
366 |
| -/* |
367 |
| - * Allow us to mark functions as 'deprecated' and have gcc emit a nice |
368 |
| - * warning for each use, in hopes of speeding the functions removal. |
369 |
| - * Usage is: |
370 |
| - * int __deprecated foo(void) |
371 |
| - */ |
372 |
| -#ifndef __deprecated |
373 |
| -# define __deprecated /* unimplemented */ |
374 |
| -#endif |
375 |
| - |
376 |
| -#ifdef MODULE |
377 |
| -#define __deprecated_for_modules __deprecated |
378 |
| -#else |
379 |
| -#define __deprecated_for_modules |
380 |
| -#endif |
381 |
| - |
382 |
| -#ifndef __must_check |
383 |
| -#define __must_check |
384 |
| -#endif |
385 |
| - |
386 |
| -#ifndef CONFIG_ENABLE_MUST_CHECK |
387 |
| -#undef __must_check |
388 |
| -#define __must_check |
389 |
| -#endif |
390 |
| -#ifndef CONFIG_ENABLE_WARN_DEPRECATED |
391 |
| -#undef __deprecated |
392 |
| -#undef __deprecated_for_modules |
393 |
| -#define __deprecated |
394 |
| -#define __deprecated_for_modules |
395 |
| -#endif |
396 |
| - |
397 |
| -#ifndef __malloc |
398 |
| -#define __malloc |
399 |
| -#endif |
400 |
| - |
401 |
| -/* |
402 |
| - * Allow us to avoid 'defined but not used' warnings on functions and data, |
403 |
| - * as well as force them to be emitted to the assembly file. |
404 |
| - * |
405 |
| - * As of gcc 3.4, static functions that are not marked with attribute((used)) |
406 |
| - * may be elided from the assembly file. As of gcc 3.4, static data not so |
407 |
| - * marked will not be elided, but this may change in a future gcc version. |
408 |
| - * |
409 |
| - * NOTE: Because distributions shipped with a backported unit-at-a-time |
410 |
| - * compiler in gcc 3.3, we must define __used to be __attribute__((used)) |
411 |
| - * for gcc >=3.3 instead of 3.4. |
412 |
| - * |
413 |
| - * In prior versions of gcc, such functions and data would be emitted, but |
414 |
| - * would be warned about except with attribute((unused)). |
415 |
| - * |
416 |
| - * Mark functions that are referenced only in inline assembly as __used so |
417 |
| - * the code is emitted even though it appears to be unreferenced. |
418 |
| - */ |
419 |
| -#ifndef __used |
420 |
| -# define __used /* unimplemented */ |
421 |
| -#endif |
422 |
| - |
423 |
| -#ifndef __maybe_unused |
424 |
| -# define __maybe_unused /* unimplemented */ |
425 |
| -#endif |
426 |
| - |
427 |
| -#ifndef __always_unused |
428 |
| -# define __always_unused /* unimplemented */ |
429 |
| -#endif |
430 |
| - |
431 |
| -#ifndef noinline |
432 |
| -#define noinline |
433 |
| -#endif |
434 |
| - |
435 |
| -/* |
436 |
| - * Rather then using noinline to prevent stack consumption, use |
437 |
| - * noinline_for_stack instead. For documentation reasons. |
438 |
| - */ |
439 |
| -#define noinline_for_stack noinline |
440 |
| - |
441 |
| -#ifndef __always_inline |
442 |
| -#define __always_inline inline |
443 |
| -#endif |
444 |
| - |
445 |
| -#endif /* __KERNEL__ */ |
446 |
| - |
447 |
| -/* |
448 |
| - * From the GCC manual: |
449 |
| - * |
450 |
| - * Many functions do not examine any values except their arguments, |
451 |
| - * and have no effects except the return value. Basically this is |
452 |
| - * just slightly more strict class than the `pure' attribute above, |
453 |
| - * since function is not allowed to read global memory. |
454 |
| - * |
455 |
| - * Note that a function that has pointer arguments and examines the |
456 |
| - * data pointed to must _not_ be declared `const'. Likewise, a |
457 |
| - * function that calls a non-`const' function usually must not be |
458 |
| - * `const'. It does not make sense for a `const' function to return |
459 |
| - * `void'. |
460 |
| - */ |
461 |
| -#ifndef __attribute_const__ |
462 |
| -# define __attribute_const__ /* unimplemented */ |
463 |
| -#endif |
464 |
| - |
465 |
| -#ifndef __designated_init |
466 |
| -# define __designated_init |
467 |
| -#endif |
468 |
| - |
469 |
| -#ifndef __latent_entropy |
470 |
| -# define __latent_entropy |
471 |
| -#endif |
472 |
| - |
473 |
| -#ifndef __randomize_layout |
474 |
| -# define __randomize_layout __designated_init |
475 |
| -#endif |
476 |
| - |
477 |
| -#ifndef __no_randomize_layout |
478 |
| -# define __no_randomize_layout |
479 |
| -#endif |
480 |
| - |
481 |
| -#ifndef randomized_struct_fields_start |
482 |
| -# define randomized_struct_fields_start |
483 |
| -# define randomized_struct_fields_end |
484 |
| -#endif |
485 |
| - |
486 |
| -/* |
487 |
| - * Tell gcc if a function is cold. The compiler will assume any path |
488 |
| - * directly leading to the call is unlikely. |
489 |
| - */ |
490 |
| - |
491 |
| -#ifndef __cold |
492 |
| -#define __cold |
493 |
| -#endif |
494 |
| - |
495 |
| -/* Simple shorthand for a section definition */ |
496 |
| -#ifndef __section |
497 |
| -# define __section(S) __attribute__ ((__section__(#S))) |
498 |
| -#endif |
499 |
| - |
500 |
| -#ifndef __visible |
501 |
| -#define __visible |
502 |
| -#endif |
503 |
| - |
504 |
| -#ifndef __nostackprotector |
505 |
| -# define __nostackprotector |
506 |
| -#endif |
507 |
| - |
508 |
| -/* |
509 |
| - * Assume alignment of return value. |
510 |
| - */ |
511 |
| -#ifndef __assume_aligned |
512 |
| -#define __assume_aligned(a, ...) |
513 |
| -#endif |
514 |
| - |
515 |
| - |
516 |
| -/* Are two types/vars the same type (ignoring qualifiers)? */ |
517 |
| -#ifndef __same_type |
518 |
| -# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) |
519 |
| -#endif |
520 |
| - |
521 |
| -/* Is this type a native word size -- useful for atomic operations */ |
522 |
| -#ifndef __native_word |
523 |
| -# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long)) |
524 |
| -#endif |
525 |
| - |
526 | 267 | /* Compile time object size, -1 for unknown */
|
527 | 268 | #ifndef __compiletime_object_size
|
528 | 269 | # define __compiletime_object_size(obj) -1
|
|
0 commit comments