|
@@ -1,111 +1,12 @@
|
|
|
#ifndef __LINUX_COMPILER_H
|
|
|
#define __LINUX_COMPILER_H
|
|
|
|
|
|
-#ifndef __ASSEMBLY__
|
|
|
+#include <linux/compiler_types.h>
|
|
|
|
|
|
-#ifdef __CHECKER__
|
|
|
-# define __user __attribute__((noderef, address_space(1)))
|
|
|
-# define __kernel __attribute__((address_space(0)))
|
|
|
-# define __safe __attribute__((safe))
|
|
|
-# define __force __attribute__((force))
|
|
|
-# define __nocast __attribute__((nocast))
|
|
|
-# define __iomem __attribute__((noderef, address_space(2)))
|
|
|
-# define __must_hold(x) __attribute__((context(x,1,1)))
|
|
|
-# 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)
|
|
|
-# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0)
|
|
|
-# define __percpu __attribute__((noderef, address_space(3)))
|
|
|
-# define __rcu __attribute__((noderef, address_space(4)))
|
|
|
-# define __private __attribute__((noderef))
|
|
|
-extern void __chk_user_ptr(const volatile void __user *);
|
|
|
-extern void __chk_io_ptr(const volatile void __iomem *);
|
|
|
-# define ACCESS_PRIVATE(p, member) (*((typeof((p)->member) __force *) &(p)->member))
|
|
|
-#else /* __CHECKER__ */
|
|
|
-# ifdef STRUCTLEAK_PLUGIN
|
|
|
-# define __user __attribute__((user))
|
|
|
-# else
|
|
|
-# define __user
|
|
|
-# endif
|
|
|
-# 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)
|
|
|
-# define __must_hold(x)
|
|
|
-# define __acquires(x)
|
|
|
-# define __releases(x)
|
|
|
-# define __acquire(x) (void)0
|
|
|
-# define __release(x) (void)0
|
|
|
-# define __cond_lock(x,c) (c)
|
|
|
-# define __percpu
|
|
|
-# define __rcu
|
|
|
-# define __private
|
|
|
-# define ACCESS_PRIVATE(p, member) ((p)->member)
|
|
|
-#endif /* __CHECKER__ */
|
|
|
-
|
|
|
-/* Indirect macros required for expanded argument pasting, eg. __LINE__. */
|
|
|
-#define ___PASTE(a,b) a##b
|
|
|
-#define __PASTE(a,b) ___PASTE(a,b)
|
|
|
+#ifndef __ASSEMBLY__
|
|
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
|
|
-#ifdef __GNUC__
|
|
|
-#include <linux/compiler-gcc.h>
|
|
|
-#endif
|
|
|
-
|
|
|
-#if defined(CC_USING_HOTPATCH) && !defined(__CHECKER__)
|
|
|
-#define notrace __attribute__((hotpatch(0,0)))
|
|
|
-#else
|
|
|
-#define notrace __attribute__((no_instrument_function))
|
|
|
-#endif
|
|
|
-
|
|
|
-/* Intel compiler defines __GNUC__. So we will overwrite implementations
|
|
|
- * coming from above header files here
|
|
|
- */
|
|
|
-#ifdef __INTEL_COMPILER
|
|
|
-# include <linux/compiler-intel.h>
|
|
|
-#endif
|
|
|
-
|
|
|
-/* Clang compiler defines __GNUC__. So we will overwrite implementations
|
|
|
- * coming from above header files here
|
|
|
- */
|
|
|
-#ifdef __clang__
|
|
|
-#include <linux/compiler-clang.h>
|
|
|
-#endif
|
|
|
-
|
|
|
-/*
|
|
|
- * Generic compiler-dependent macros required for kernel
|
|
|
- * build go below this comment. Actual compiler/compiler version
|
|
|
- * specific implementations come from the above header files
|
|
|
- */
|
|
|
-
|
|
|
-struct ftrace_branch_data {
|
|
|
- const char *func;
|
|
|
- const char *file;
|
|
|
- unsigned line;
|
|
|
- union {
|
|
|
- struct {
|
|
|
- unsigned long correct;
|
|
|
- unsigned long incorrect;
|
|
|
- };
|
|
|
- struct {
|
|
|
- unsigned long miss;
|
|
|
- unsigned long hit;
|
|
|
- };
|
|
|
- unsigned long miss_hit[2];
|
|
|
- };
|
|
|
-};
|
|
|
-
|
|
|
-struct ftrace_likely_data {
|
|
|
- struct ftrace_branch_data data;
|
|
|
- unsigned long constant;
|
|
|
-};
|
|
|
-
|
|
|
/*
|
|
|
* Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code
|
|
|
* 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
|
|
|
* with an explicit memory barrier or atomic instruction that provides the
|
|
|
* required ordering.
|
|
|
*/
|
|
|
+#include <asm/barrier.h>
|
|
|
|
|
|
#define __READ_ONCE(x, check) \
|
|
|
({ \
|
|
@@ -362,167 +264,6 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
|
|
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
|
|
-#ifdef __KERNEL__
|
|
|
-/*
|
|
|
- * 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
|
|
|
-
|
|
|
-#ifdef MODULE
|
|
|
-#define __deprecated_for_modules __deprecated
|
|
|
-#else
|
|
|
-#define __deprecated_for_modules
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef __must_check
|
|
|
-#define __must_check
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef CONFIG_ENABLE_MUST_CHECK
|
|
|
-#undef __must_check
|
|
|
-#define __must_check
|
|
|
-#endif
|
|
|
-#ifndef CONFIG_ENABLE_WARN_DEPRECATED
|
|
|
-#undef __deprecated
|
|
|
-#undef __deprecated_for_modules
|
|
|
-#define __deprecated
|
|
|
-#define __deprecated_for_modules
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef __malloc
|
|
|
-#define __malloc
|
|
|
-#endif
|
|
|
-
|
|
|
-/*
|
|
|
- * 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.
|
|
|
- *
|
|
|
- * 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
|
|
|
- * marked will not be elided, but this may change in a future gcc version.
|
|
|
- *
|
|
|
- * 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.
|
|
|
- *
|
|
|
- * In prior versions of gcc, such functions and data would be emitted, but
|
|
|
- * would be warned about except with attribute((unused)).
|
|
|
- *
|
|
|
- * Mark functions that are referenced only in inline assembly as __used so
|
|
|
- * the code is emitted even though it appears to be unreferenced.
|
|
|
- */
|
|
|
-#ifndef __used
|
|
|
-# define __used /* unimplemented */
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef __maybe_unused
|
|
|
-# define __maybe_unused /* unimplemented */
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef __always_unused
|
|
|
-# define __always_unused /* unimplemented */
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef noinline
|
|
|
-#define noinline
|
|
|
-#endif
|
|
|
-
|
|
|
-/*
|
|
|
- * Rather then using noinline to prevent stack consumption, use
|
|
|
- * noinline_for_stack instead. For documentation reasons.
|
|
|
- */
|
|
|
-#define noinline_for_stack noinline
|
|
|
-
|
|
|
-#ifndef __always_inline
|
|
|
-#define __always_inline inline
|
|
|
-#endif
|
|
|
-
|
|
|
-#endif /* __KERNEL__ */
|
|
|
-
|
|
|
-/*
|
|
|
- * 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
|
|
|
-
|
|
|
-#ifndef __designated_init
|
|
|
-# define __designated_init
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef __latent_entropy
|
|
|
-# define __latent_entropy
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef __randomize_layout
|
|
|
-# define __randomize_layout __designated_init
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef __no_randomize_layout
|
|
|
-# define __no_randomize_layout
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef randomized_struct_fields_start
|
|
|
-# define randomized_struct_fields_start
|
|
|
-# define randomized_struct_fields_end
|
|
|
-#endif
|
|
|
-
|
|
|
-/*
|
|
|
- * 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
|
|
|
-
|
|
|
-/* Simple shorthand for a section definition */
|
|
|
-#ifndef __section
|
|
|
-# define __section(S) __attribute__ ((__section__(#S)))
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef __visible
|
|
|
-#define __visible
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef __nostackprotector
|
|
|
-# define __nostackprotector
|
|
|
-#endif
|
|
|
-
|
|
|
-/*
|
|
|
- * Assume alignment of return value.
|
|
|
- */
|
|
|
-#ifndef __assume_aligned
|
|
|
-#define __assume_aligned(a, ...)
|
|
|
-#endif
|
|
|
-
|
|
|
-
|
|
|
-/* 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
|
|
|
-
|
|
|
-/* Is this type a native word size -- useful for atomic operations */
|
|
|
-#ifndef __native_word
|
|
|
-# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
|
|
|
-#endif
|
|
|
-
|
|
|
/* Compile time object size, -1 for unknown */
|
|
|
#ifndef __compiletime_object_size
|
|
|
# define __compiletime_object_size(obj) -1
|