~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/compiler-gcc.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /include/linux/compiler-gcc.h (Version linux-6.12-rc7) and /include/linux/compiler-gcc.h (Version linux-4.9.337)


  1 /* SPDX-License-Identifier: GPL-2.0 */         !!   1 #ifndef __LINUX_COMPILER_H
  2 #ifndef __LINUX_COMPILER_TYPES_H               << 
  3 #error "Please don't include <linux/compiler-g      2 #error "Please don't include <linux/compiler-gcc.h> directly, include <linux/compiler.h> instead."
  4 #endif                                              3 #endif
  5                                                     4 
  6 /*                                                  5 /*
  7  * Common definitions for all gcc versions go       6  * Common definitions for all gcc versions go here.
  8  */                                                 7  */
  9 #define GCC_VERSION (__GNUC__ * 10000               8 #define GCC_VERSION (__GNUC__ * 10000           \
 10                      + __GNUC_MINOR__ * 100         9                      + __GNUC_MINOR__ * 100     \
 11                      + __GNUC_PATCHLEVEL__)        10                      + __GNUC_PATCHLEVEL__)
 12                                                    11 
                                                   >>  12 /* Optimization barrier */
                                                   >>  13 
                                                   >>  14 /* The "volatile" is due to gcc bugs */
                                                   >>  15 #define barrier() __asm__ __volatile__("": : :"memory")
                                                   >>  16 /*
                                                   >>  17  * This version is i.e. to prevent dead stores elimination on @ptr
                                                   >>  18  * where gcc and llvm may behave differently when otherwise using
                                                   >>  19  * normal barrier(): while gcc behavior gets along with a normal
                                                   >>  20  * barrier(), llvm needs an explicit input variable to be assumed
                                                   >>  21  * clobbered. The issue is as follows: while the inline asm might
                                                   >>  22  * access any memory it wants, the compiler could have fit all of
                                                   >>  23  * @ptr into memory registers instead, and since @ptr never escaped
                                                   >>  24  * from that, it proofed that the inline asm wasn't touching any of
                                                   >>  25  * it. This version works well with both compilers, i.e. we're telling
                                                   >>  26  * the compiler that the inline asm absolutely may see the contents
                                                   >>  27  * of @ptr. See also: https://llvm.org/bugs/show_bug.cgi?id=15495
                                                   >>  28  */
                                                   >>  29 #define barrier_data(ptr) __asm__ __volatile__("": :"r"(ptr) :"memory")
                                                   >>  30 
 13 /*                                                 31 /*
 14  * This macro obfuscates arithmetic on a varia     32  * This macro obfuscates arithmetic on a variable address so that gcc
 15  * shouldn't recognize the original var, and m     33  * shouldn't recognize the original var, and make assumptions about it.
 16  *                                                 34  *
 17  * This is needed because the C standard makes     35  * This is needed because the C standard makes it undefined to do
 18  * pointer arithmetic on "objects" outside the     36  * pointer arithmetic on "objects" outside their boundaries and the
 19  * gcc optimizers assume this is the case. In      37  * gcc optimizers assume this is the case. In particular they
 20  * assume such arithmetic does not wrap.           38  * assume such arithmetic does not wrap.
 21  *                                                 39  *
 22  * A miscompilation has been observed because      40  * A miscompilation has been observed because of this on PPC.
 23  * To work around it we hide the relationship      41  * To work around it we hide the relationship of the pointer and the object
 24  * using this macro.                               42  * using this macro.
 25  *                                                 43  *
 26  * Versions of the ppc64 compiler before 4.1 h     44  * Versions of the ppc64 compiler before 4.1 had a bug where use of
 27  * RELOC_HIDE could trash r30. The bug can be      45  * RELOC_HIDE could trash r30. The bug can be worked around by changing
 28  * the inline assembly constraint from =g to =     46  * the inline assembly constraint from =g to =r, in this particular
 29  * case either is valid.                           47  * case either is valid.
 30  */                                                48  */
 31 #define RELOC_HIDE(ptr, off)                       49 #define RELOC_HIDE(ptr, off)                                            \
 32 ({                                                 50 ({                                                                      \
 33         unsigned long __ptr;                       51         unsigned long __ptr;                                            \
 34         __asm__ ("" : "=r"(__ptr) : ""(ptr));      52         __asm__ ("" : "=r"(__ptr) : ""(ptr));                          \
 35         (typeof(ptr)) (__ptr + (off));             53         (typeof(ptr)) (__ptr + (off));                                  \
 36 })                                                 54 })
 37                                                    55 
 38 #ifdef CONFIG_MITIGATION_RETPOLINE             !!  56 /* Make the optimizer believe the variable can be manipulated arbitrarily. */
 39 #define __noretpoline __attribute__((__indirec !!  57 #define OPTIMIZER_HIDE_VAR(var)                                         \
                                                   >>  58         __asm__ ("" : "=r" (var) : "" (var))
                                                   >>  59 
                                                   >>  60 #ifdef __CHECKER__
                                                   >>  61 #define __must_be_array(a)      0
                                                   >>  62 #else
                                                   >>  63 /* &a[0] degrades to a pointer: a different type from an array */
                                                   >>  64 #define __must_be_array(a)      BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
                                                   >>  65 #endif
                                                   >>  66 
                                                   >>  67 /*
                                                   >>  68  * Feature detection for gnu_inline (gnu89 extern inline semantics). Either
                                                   >>  69  * __GNUC_STDC_INLINE__ is defined (not using gnu89 extern inline semantics,
                                                   >>  70  * and we opt in to the gnu89 semantics), or __GNUC_STDC_INLINE__ is not
                                                   >>  71  * defined so the gnu89 semantics are the default.
                                                   >>  72  */
                                                   >>  73 #ifdef __GNUC_STDC_INLINE__
                                                   >>  74 # define __gnu_inline   __attribute__((gnu_inline))
                                                   >>  75 #else
                                                   >>  76 # define __gnu_inline
                                                   >>  77 #endif
                                                   >>  78 
                                                   >>  79 /*
                                                   >>  80  * Force always-inline if the user requests it so via the .config,
                                                   >>  81  * or if gcc is too old.
                                                   >>  82  * GCC does not warn about unused static inline functions for
                                                   >>  83  * -Wunused-function.  This turns out to avoid the need for complex #ifdef
                                                   >>  84  * directives.  Suppress the warning in clang as well by using "unused"
                                                   >>  85  * function attribute, which is redundant but not harmful for gcc.
                                                   >>  86  * Prefer gnu_inline, so that extern inline functions do not emit an
                                                   >>  87  * externally visible function. This makes extern inline behave as per gnu89
                                                   >>  88  * semantics rather than c99. This prevents multiple symbol definition errors
                                                   >>  89  * of extern inline functions at link time.
                                                   >>  90  * A lot of inline functions can cause havoc with function tracing.
                                                   >>  91  */
                                                   >>  92 #if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) ||                \
                                                   >>  93     !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
                                                   >>  94 #define inline \
                                                   >>  95         inline __attribute__((always_inline, unused)) notrace __gnu_inline
                                                   >>  96 #else
                                                   >>  97 #define inline inline           __attribute__((unused)) notrace __gnu_inline
                                                   >>  98 #endif
                                                   >>  99 
                                                   >> 100 #define __inline__ inline
                                                   >> 101 #define __inline inline
                                                   >> 102 #define __always_inline inline __attribute__((always_inline))
                                                   >> 103 #define  noinline       __attribute__((noinline))
                                                   >> 104 
                                                   >> 105 #define __deprecated    __attribute__((deprecated))
                                                   >> 106 #define __packed        __attribute__((packed))
                                                   >> 107 #define __weak          __attribute__((weak))
                                                   >> 108 #define __alias(symbol) __attribute__((alias(#symbol)))
                                                   >> 109 
                                                   >> 110 #ifdef CONFIG_RETPOLINE
                                                   >> 111 #define __noretpoline __attribute__((indirect_branch("keep")))
 40 #endif                                            112 #endif
 41                                                   113 
 42 #if defined(LATENT_ENTROPY_PLUGIN) && !defined !! 114 /*
                                                   >> 115  * it doesn't make sense on ARM (currently the only user of __naked)
                                                   >> 116  * to trace naked functions because then mcount is called without
                                                   >> 117  * stack and frame pointer being set up and there is no chance to
                                                   >> 118  * restore the lr register to the value before mcount was called.
                                                   >> 119  *
                                                   >> 120  * The asm() bodies of naked functions often depend on standard calling
                                                   >> 121  * conventions, therefore they must be noinline and noclone.
                                                   >> 122  *
                                                   >> 123  * GCC 4.[56] currently fail to enforce this, so we must do so ourselves.
                                                   >> 124  * See GCC PR44290.
                                                   >> 125  */
                                                   >> 126 #define __naked         __attribute__((naked)) noinline __noclone notrace
                                                   >> 127 
                                                   >> 128 #define __noreturn      __attribute__((noreturn))
                                                   >> 129 
                                                   >> 130 /*
                                                   >> 131  * From the GCC manual:
                                                   >> 132  *
                                                   >> 133  * Many functions have no effects except the return value and their
                                                   >> 134  * return value depends only on the parameters and/or global
                                                   >> 135  * variables.  Such a function can be subject to common subexpression
                                                   >> 136  * elimination and loop optimization just as an arithmetic operator
                                                   >> 137  * would be.
                                                   >> 138  * [...]
                                                   >> 139  */
                                                   >> 140 #define __pure                  __attribute__((pure))
                                                   >> 141 #define __aligned(x)            __attribute__((aligned(x)))
                                                   >> 142 #define __printf(a, b)          __attribute__((format(printf, a, b)))
                                                   >> 143 #define __scanf(a, b)           __attribute__((format(scanf, a, b)))
                                                   >> 144 #define __attribute_const__     __attribute__((__const__))
                                                   >> 145 #define __maybe_unused          __attribute__((unused))
                                                   >> 146 #define __always_unused         __attribute__((unused))
                                                   >> 147 
                                                   >> 148 /* gcc version specific checks */
                                                   >> 149 
                                                   >> 150 #if GCC_VERSION < 30200
                                                   >> 151 # error Sorry, your compiler is too old - please upgrade it.
                                                   >> 152 #elif defined(CONFIG_ARM64) && GCC_VERSION < 50100 && !defined(__clang__)
                                                   >> 153 /*
                                                   >> 154  * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293
                                                   >> 155  * https://lore.kernel.org/r/20210107111841.GN1551@shell.armlinux.org.uk
                                                   >> 156  */
                                                   >> 157 # error Sorry, your version of GCC is too old - please use 5.1 or newer.
                                                   >> 158 #endif
                                                   >> 159 
                                                   >> 160 #if GCC_VERSION < 30300
                                                   >> 161 # define __used                 __attribute__((__unused__))
                                                   >> 162 #else
                                                   >> 163 # define __used                 __attribute__((__used__))
                                                   >> 164 #endif
                                                   >> 165 
                                                   >> 166 #ifdef CONFIG_GCOV_KERNEL
                                                   >> 167 # if GCC_VERSION < 30400
                                                   >> 168 #   error "GCOV profiling support for gcc versions below 3.4 not included"
                                                   >> 169 # endif /* __GNUC_MINOR__ */
                                                   >> 170 #endif /* CONFIG_GCOV_KERNEL */
                                                   >> 171 
                                                   >> 172 #if GCC_VERSION >= 30400
                                                   >> 173 #define __must_check            __attribute__((warn_unused_result))
                                                   >> 174 #define __malloc                __attribute__((__malloc__))
                                                   >> 175 #endif
                                                   >> 176 
                                                   >> 177 #if GCC_VERSION >= 40000
                                                   >> 178 
                                                   >> 179 /* GCC 4.1.[01] miscompiles __weak */
                                                   >> 180 #ifdef __KERNEL__
                                                   >> 181 # if GCC_VERSION >= 40100 &&  GCC_VERSION <= 40101
                                                   >> 182 #  error Your version of gcc miscompiles the __weak directive
                                                   >> 183 # endif
                                                   >> 184 #endif
                                                   >> 185 
                                                   >> 186 #define __used                  __attribute__((__used__))
                                                   >> 187 #define __compiler_offsetof(a, b)                                       \
                                                   >> 188         __builtin_offsetof(a, b)
                                                   >> 189 
                                                   >> 190 #if GCC_VERSION >= 40100
                                                   >> 191 # define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
                                                   >> 192 #endif
                                                   >> 193 
                                                   >> 194 #if GCC_VERSION >= 40300
                                                   >> 195 /* Mark functions as cold. gcc will assume any path leading to a call
                                                   >> 196  * to them will be unlikely.  This means a lot of manual unlikely()s
                                                   >> 197  * are unnecessary now for any paths leading to the usual suspects
                                                   >> 198  * like BUG(), printk(), panic() etc. [but let's keep them for now for
                                                   >> 199  * older compilers]
                                                   >> 200  *
                                                   >> 201  * Early snapshots of gcc 4.3 don't support this and we can't detect this
                                                   >> 202  * in the preprocessor, but we can live with this because they're unreleased.
                                                   >> 203  * Maketime probing would be overkill here.
                                                   >> 204  *
                                                   >> 205  * gcc also has a __attribute__((__hot__)) to move hot functions into
                                                   >> 206  * a special section, but I don't see any sense in this right now in
                                                   >> 207  * the kernel context
                                                   >> 208  */
                                                   >> 209 #define __cold                  __attribute__((__cold__))
                                                   >> 210 
                                                   >> 211 #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
                                                   >> 212 
                                                   >> 213 #ifndef __CHECKER__
                                                   >> 214 # define __compiletime_warning(message) __attribute__((warning(message)))
                                                   >> 215 # define __compiletime_error(message) __attribute__((error(message)))
                                                   >> 216 #endif /* __CHECKER__ */
                                                   >> 217 #endif /* GCC_VERSION >= 40300 */
                                                   >> 218 
                                                   >> 219 #if GCC_VERSION >= 40400
                                                   >> 220 #define __optimize(level)       __attribute__((__optimize__(level)))
                                                   >> 221 #endif /* GCC_VERSION >= 40400 */
                                                   >> 222 
                                                   >> 223 #if GCC_VERSION >= 40500
                                                   >> 224 
                                                   >> 225 #ifndef __CHECKER__
                                                   >> 226 #ifdef LATENT_ENTROPY_PLUGIN
 43 #define __latent_entropy __attribute__((latent    227 #define __latent_entropy __attribute__((latent_entropy))
 44 #endif                                            228 #endif
                                                   >> 229 #endif
                                                   >> 230 
                                                   >> 231 #ifdef CONFIG_STACK_VALIDATION
                                                   >> 232 #define annotate_unreachable() ({                                       \
                                                   >> 233         asm("1:\t\n"                                                    \
                                                   >> 234             ".pushsection .discard.unreachable\t\n"                     \
                                                   >> 235             ".long 1b\t\n"                                              \
                                                   >> 236             ".popsection\t\n");                                         \
                                                   >> 237 })
                                                   >> 238 #else
                                                   >> 239 #define annotate_unreachable()
                                                   >> 240 #endif
 45                                                   241 
 46 /*                                                242 /*
 47  * calling noreturn functions, __builtin_unrea    243  * calling noreturn functions, __builtin_unreachable() and __builtin_trap()
 48  * confuse the stack allocation in gcc, leadin    244  * confuse the stack allocation in gcc, leading to overly large stack
 49  * frames, see https://gcc.gnu.org/bugzilla/sh    245  * frames, see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82365
 50  *                                                246  *
 51  * Adding an empty inline assembly before it w    247  * Adding an empty inline assembly before it works around the problem
 52  */                                               248  */
 53 #define barrier_before_unreachable() asm volat    249 #define barrier_before_unreachable() asm volatile("")
 54                                                   250 
 55 /*                                                251 /*
 56  * Mark a position in code as unreachable.  Th    252  * Mark a position in code as unreachable.  This can be used to
 57  * suppress control flow warnings after asm bl    253  * suppress control flow warnings after asm blocks that transfer
 58  * control elsewhere.                             254  * control elsewhere.
                                                   >> 255  *
                                                   >> 256  * Early snapshots of gcc 4.5 don't support this and we can't detect
                                                   >> 257  * this in the preprocessor, but we can live with this because they're
                                                   >> 258  * unreleased.  Really, we need to have autoconf for the kernel.
 59  */                                               259  */
 60 #define unreachable() \                           260 #define unreachable() \
 61         do {                                      261         do {                                    \
 62                 annotate_unreachable();           262                 annotate_unreachable();         \
 63                 barrier_before_unreachable();     263                 barrier_before_unreachable();   \
 64                 __builtin_unreachable();          264                 __builtin_unreachable();        \
 65         } while (0)                               265         } while (0)
 66                                                   266 
 67 #if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP)     !! 267 /* Mark a function definition as prohibited from being cloned. */
 68 #define __HAVE_BUILTIN_BSWAP32__               !! 268 #define __noclone       __attribute__((__noclone__, __optimize__("no-tracer")))
 69 #define __HAVE_BUILTIN_BSWAP64__               << 
 70 #define __HAVE_BUILTIN_BSWAP16__               << 
 71 #endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */     << 
 72                                                << 
 73 #if GCC_VERSION >= 70000                       << 
 74 #define KASAN_ABI_VERSION 5                    << 
 75 #else                                          << 
 76 #define KASAN_ABI_VERSION 4                    << 
 77 #endif                                         << 
 78                                                << 
 79 #ifdef CONFIG_SHADOW_CALL_STACK                << 
 80 #define __noscs __attribute__((__no_sanitize__ << 
 81 #endif                                         << 
 82                                                   269 
 83 #ifdef __SANITIZE_HWADDRESS__                  !! 270 #endif /* GCC_VERSION >= 40500 */
 84 #define __no_sanitize_address __attribute__((_ << 
 85 #else                                          << 
 86 #define __no_sanitize_address __attribute__((_ << 
 87 #endif                                         << 
 88                                                   271 
 89 #if defined(__SANITIZE_THREAD__)               !! 272 #if GCC_VERSION >= 40600
 90 #define __no_sanitize_thread __attribute__((__ !! 273 /*
 91 #else                                          !! 274  * When used with Link Time Optimization, gcc can optimize away C functions or
 92 #define __no_sanitize_thread                   !! 275  * variables which are referenced only from assembly code.  __visible tells the
                                                   >> 276  * optimizer that something else uses this function or variable, thus preventing
                                                   >> 277  * this.
                                                   >> 278  */
                                                   >> 279 #define __visible       __attribute__((externally_visible))
 93 #endif                                            280 #endif
 94                                                   281 
 95 #define __no_sanitize_undefined __attribute__( << 
 96                                                   282 
                                                   >> 283 #if GCC_VERSION >= 40900 && !defined(__CHECKER__)
 97 /*                                                284 /*
 98  * Only supported since gcc >= 12              !! 285  * __assume_aligned(n, k): Tell the optimizer that the returned
                                                   >> 286  * pointer can be assumed to be k modulo n. The second argument is
                                                   >> 287  * optional (default 0), so we use a variadic macro to make the
                                                   >> 288  * shorthand.
                                                   >> 289  *
                                                   >> 290  * Beware: Do not apply this to functions which may return
                                                   >> 291  * ERR_PTRs. Also, it is probably unwise to apply it to functions
                                                   >> 292  * returning extra information in the low bits (but in that case the
                                                   >> 293  * compiler should see some alignment anyway, when the return value is
                                                   >> 294  * massaged by 'flags = ptr & 3; ptr &= ~3;').
 99  */                                               295  */
100 #if defined(CONFIG_KCOV) && __has_attribute(__ !! 296 #define __assume_aligned(a, ...) __attribute__((__assume_aligned__(a, ## __VA_ARGS__)))
101 #define __no_sanitize_coverage __attribute__(( << 
102 #else                                          << 
103 #define __no_sanitize_coverage                 << 
104 #endif                                            297 #endif
105                                                   298 
106 /*                                                299 /*
107  * Treat __SANITIZE_HWADDRESS__ the same as __ !! 300  * GCC 'asm goto' miscompiles certain code sequences:
108  * matching the defines used by Clang.         !! 301  *
                                                   >> 302  *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
                                                   >> 303  *
                                                   >> 304  * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
                                                   >> 305  *
                                                   >> 306  * (asm goto is automatically volatile - the naming reflects this.)
109  */                                               307  */
110 #ifdef __SANITIZE_HWADDRESS__                  !! 308 #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
111 #define __SANITIZE_ADDRESS__                   << 
112 #endif                                         << 
113                                                   309 
114 /*                                                310 /*
115  * GCC does not support KMSAN.                 !! 311  * sparse (__CHECKER__) pretends to be gcc, but can't do constant
                                                   >> 312  * folding in __builtin_bswap*() (yet), so don't set these for it.
116  */                                               313  */
117 #define __no_sanitize_memory                   !! 314 #if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP) && !defined(__CHECKER__)
118 #define __no_kmsan_checks                      !! 315 #if GCC_VERSION >= 40400
                                                   >> 316 #define __HAVE_BUILTIN_BSWAP32__
                                                   >> 317 #define __HAVE_BUILTIN_BSWAP64__
                                                   >> 318 #endif
                                                   >> 319 #if GCC_VERSION >= 40800
                                                   >> 320 #define __HAVE_BUILTIN_BSWAP16__
                                                   >> 321 #endif
                                                   >> 322 #endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP && !__CHECKER__ */
                                                   >> 323 
                                                   >> 324 #if GCC_VERSION >= 70000
                                                   >> 325 #define KASAN_ABI_VERSION 5
                                                   >> 326 #elif GCC_VERSION >= 50000
                                                   >> 327 #define KASAN_ABI_VERSION 4
                                                   >> 328 #elif GCC_VERSION >= 40902
                                                   >> 329 #define KASAN_ABI_VERSION 3
                                                   >> 330 #endif
119                                                   331 
                                                   >> 332 #if GCC_VERSION >= 40902
120 /*                                                333 /*
121  * Turn individual warnings and errors on and  !! 334  * Tell the compiler that address safety instrumentation (KASAN)
122  * on version.                                 !! 335  * should not be applied to that function.
                                                   >> 336  * Conflicts with inlining: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
123  */                                               337  */
124 #define __diag_GCC(version, severity, s) \     !! 338 #define __no_sanitize_address __attribute__((no_sanitize_address))
125         __diag_GCC_ ## version(__diag_GCC_ ##  !! 339 #endif
126                                                << 
127 /* Severity used in pragma directives */       << 
128 #define __diag_GCC_ignore       ignored        << 
129 #define __diag_GCC_warn         warning        << 
130 #define __diag_GCC_error        error          << 
131                                                   340 
132 #define __diag_str1(s)          #s             !! 341 #endif  /* gcc version >= 40000 specific checks */
133 #define __diag_str(s)           __diag_str1(s) << 
134 #define __diag(s)               _Pragma(__diag << 
135                                                   342 
136 #if GCC_VERSION >= 80000                       !! 343 #if !defined(__noclone)
137 #define __diag_GCC_8(s)         __diag(s)      !! 344 #define __noclone       /* not needed */
138 #else                                          << 
139 #define __diag_GCC_8(s)                        << 
140 #endif                                            345 #endif
141                                                   346 
142 #define __diag_ignore_all(option, comment) \   !! 347 #if !defined(__no_sanitize_address)
143         __diag(__diag_GCC_ignore option)       !! 348 #define __no_sanitize_address
                                                   >> 349 #endif
144                                                   350 
145 /*                                                351 /*
146  * Prior to 9.1, -Wno-alloc-size-larger-than ( !! 352  * A trick to suppress uninitialized variable warning without generating any
147  * attribute) do not work, and must be disable !! 353  * code
148  */                                               354  */
149 #if GCC_VERSION < 90100                        !! 355 #define uninitialized_var(x) x = x
150 #undef __alloc_size__                          !! 356 
                                                   >> 357 #if GCC_VERSION >= 50100
                                                   >> 358 #define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
151 #endif                                            359 #endif
152                                                   360 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php