|
2 | 2 | #ifndef __LINUX_COMPILER_H
|
3 | 3 | #define __LINUX_COMPILER_H
|
4 | 4 |
|
5 |
| -#ifndef __ASSEMBLY__ |
| 5 | +#include <linux/compiler_types.h> |
6 | 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 /* __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) |
| 7 | +#ifndef __ASSEMBLY__ |
55 | 8 |
|
56 | 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 | 12 | * Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code
|
112 | 13 | * to disable branch tracing on a per file basis.
|
@@ -333,6 +234,7 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
|
333 | 234 | * with an explicit memory barrier or atomic instruction that provides the
|
334 | 235 | * required ordering.
|
335 | 236 | */
|
| 237 | +#include <asm/barrier.h> |
336 | 238 |
|
337 | 239 | #define __READ_ONCE(x, check) \
|
338 | 240 | ({ \
|
@@ -364,167 +266,6 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
|
364 | 266 |
|
365 | 267 | #endif /* __ASSEMBLY__ */
|
366 | 268 |
|
367 |
| -#ifdef __KERNEL__ |
368 |
| -/* |
369 |
| - * Allow us to mark functions as 'deprecated' and have gcc emit a nice |
370 |
| - * warning for each use, in hopes of speeding the functions removal. |
371 |
| - * Usage is: |
372 |
| - * int __deprecated foo(void) |
373 |
| - */ |
374 |
| -#ifndef __deprecated |
375 |
| -# define __deprecated /* unimplemented */ |
376 |
| -#endif |
377 |
| - |
378 |
| -#ifdef MODULE |
379 |
| -#define __deprecated_for_modules __deprecated |
380 |
| -#else |
381 |
| -#define __deprecated_for_modules |
382 |
| -#endif |
383 |
| - |
384 |
| -#ifndef __must_check |
385 |
| -#define __must_check |
386 |
| -#endif |
387 |
| - |
388 |
| -#ifndef CONFIG_ENABLE_MUST_CHECK |
389 |
| -#undef __must_check |
390 |
| -#define __must_check |
391 |
| -#endif |
392 |
| -#ifndef CONFIG_ENABLE_WARN_DEPRECATED |
393 |
| -#undef __deprecated |
394 |
| -#undef __deprecated_for_modules |
395 |
| -#define __deprecated |
396 |
| -#define __deprecated_for_modules |
397 |
| -#endif |
398 |
| - |
399 |
| -#ifndef __malloc |
400 |
| -#define __malloc |
401 |
| -#endif |
402 |
| - |
403 |
| -/* |
404 |
| - * Allow us to avoid 'defined but not used' warnings on functions and data, |
405 |
| - * as well as force them to be emitted to the assembly file. |
406 |
| - * |
407 |
| - * As of gcc 3.4, static functions that are not marked with attribute((used)) |
408 |
| - * may be elided from the assembly file. As of gcc 3.4, static data not so |
409 |
| - * marked will not be elided, but this may change in a future gcc version. |
410 |
| - * |
411 |
| - * NOTE: Because distributions shipped with a backported unit-at-a-time |
412 |
| - * compiler in gcc 3.3, we must define __used to be __attribute__((used)) |
413 |
| - * for gcc >=3.3 instead of 3.4. |
414 |
| - * |
415 |
| - * In prior versions of gcc, such functions and data would be emitted, but |
416 |
| - * would be warned about except with attribute((unused)). |
417 |
| - * |
418 |
| - * Mark functions that are referenced only in inline assembly as __used so |
419 |
| - * the code is emitted even though it appears to be unreferenced. |
420 |
| - */ |
421 |
| -#ifndef __used |
422 |
| -# define __used /* unimplemented */ |
423 |
| -#endif |
424 |
| - |
425 |
| -#ifndef __maybe_unused |
426 |
| -# define __maybe_unused /* unimplemented */ |
427 |
| -#endif |
428 |
| - |
429 |
| -#ifndef __always_unused |
430 |
| -# define __always_unused /* unimplemented */ |
431 |
| -#endif |
432 |
| - |
433 |
| -#ifndef noinline |
434 |
| -#define noinline |
435 |
| -#endif |
436 |
| - |
437 |
| -/* |
438 |
| - * Rather then using noinline to prevent stack consumption, use |
439 |
| - * noinline_for_stack instead. For documentation reasons. |
440 |
| - */ |
441 |
| -#define noinline_for_stack noinline |
442 |
| - |
443 |
| -#ifndef __always_inline |
444 |
| -#define __always_inline inline |
445 |
| -#endif |
446 |
| - |
447 |
| -#endif /* __KERNEL__ */ |
448 |
| - |
449 |
| -/* |
450 |
| - * From the GCC manual: |
451 |
| - * |
452 |
| - * Many functions do not examine any values except their arguments, |
453 |
| - * and have no effects except the return value. Basically this is |
454 |
| - * just slightly more strict class than the `pure' attribute above, |
455 |
| - * since function is not allowed to read global memory. |
456 |
| - * |
457 |
| - * Note that a function that has pointer arguments and examines the |
458 |
| - * data pointed to must _not_ be declared `const'. Likewise, a |
459 |
| - * function that calls a non-`const' function usually must not be |
460 |
| - * `const'. It does not make sense for a `const' function to return |
461 |
| - * `void'. |
462 |
| - */ |
463 |
| -#ifndef __attribute_const__ |
464 |
| -# define __attribute_const__ /* unimplemented */ |
465 |
| -#endif |
466 |
| - |
467 |
| -#ifndef __designated_init |
468 |
| -# define __designated_init |
469 |
| -#endif |
470 |
| - |
471 |
| -#ifndef __latent_entropy |
472 |
| -# define __latent_entropy |
473 |
| -#endif |
474 |
| - |
475 |
| -#ifndef __randomize_layout |
476 |
| -# define __randomize_layout __designated_init |
477 |
| -#endif |
478 |
| - |
479 |
| -#ifndef __no_randomize_layout |
480 |
| -# define __no_randomize_layout |
481 |
| -#endif |
482 |
| - |
483 |
| -#ifndef randomized_struct_fields_start |
484 |
| -# define randomized_struct_fields_start |
485 |
| -# define randomized_struct_fields_end |
486 |
| -#endif |
487 |
| - |
488 |
| -/* |
489 |
| - * Tell gcc if a function is cold. The compiler will assume any path |
490 |
| - * directly leading to the call is unlikely. |
491 |
| - */ |
492 |
| - |
493 |
| -#ifndef __cold |
494 |
| -#define __cold |
495 |
| -#endif |
496 |
| - |
497 |
| -/* Simple shorthand for a section definition */ |
498 |
| -#ifndef __section |
499 |
| -# define __section(S) __attribute__ ((__section__(#S))) |
500 |
| -#endif |
501 |
| - |
502 |
| -#ifndef __visible |
503 |
| -#define __visible |
504 |
| -#endif |
505 |
| - |
506 |
| -#ifndef __nostackprotector |
507 |
| -# define __nostackprotector |
508 |
| -#endif |
509 |
| - |
510 |
| -/* |
511 |
| - * Assume alignment of return value. |
512 |
| - */ |
513 |
| -#ifndef __assume_aligned |
514 |
| -#define __assume_aligned(a, ...) |
515 |
| -#endif |
516 |
| - |
517 |
| - |
518 |
| -/* Are two types/vars the same type (ignoring qualifiers)? */ |
519 |
| -#ifndef __same_type |
520 |
| -# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) |
521 |
| -#endif |
522 |
| - |
523 |
| -/* Is this type a native word size -- useful for atomic operations */ |
524 |
| -#ifndef __native_word |
525 |
| -# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long)) |
526 |
| -#endif |
527 |
| - |
528 | 269 | /* Compile time object size, -1 for unknown */
|
529 | 270 | #ifndef __compiletime_object_size
|
530 | 271 | # define __compiletime_object_size(obj) -1
|
|
0 commit comments