Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.
1: #ifndef __LINUX_COMPILER_H 2: #error "Please don't include <linux/compiler-gcc4.h> directly, include <linux/compiler.h> instead." 3: #endif 4: 5: /* GCC 4.1.[01] miscompiles __weak */ 6: #ifdef __KERNEL__ 7: # if GCC_VERSION >= 40100 && GCC_VERSION <= 40101 8: # error Your version of gcc miscompiles the __weak directive 9: # endif 10: #endif 11: 12: #define __used __attribute__((__used__)) 13: #define __must_check __attribute__((warn_unused_result)) 14: #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) 15: 16: #if GCC_VERSION >= 40100 && GCC_VERSION < 40600 17: # define __compiletime_object_size(obj) __builtin_object_size(obj, 0) 18: #endif 19: 20: #if GCC_VERSION >= 40300 21: /* Mark functions as cold. gcc will assume any path leading to a call 22: to them will be unlikely. This means a lot of manual unlikely()s 23: are unnecessary now for any paths leading to the usual suspects 24: like BUG(), printk(), panic() etc. [but let's keep them for now for 25: older compilers] 26: 27: Early snapshots of gcc 4.3 don't support this and we can't detect this 28: in the preprocessor, but we can live with this because they're unreleased. 29: Maketime probing would be overkill here. 30: 31: gcc also has a __attribute__((__hot__)) to move hot functions into 32: a special section, but I don't see any sense in this right now in 33: the kernel context */ 34: #define __cold __attribute__((__cold__)) 35: 36: #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) 37: 38: #ifndef __CHECKER__ 39: # define __compiletime_warning(message) __attribute__((warning(message))) 40: # define __compiletime_error(message) __attribute__((error(message))) 41: #endif /* __CHECKER__ */ 42: #endif /* GCC_VERSION >= 40300 */ 43: 44: #if GCC_VERSION >= 40500 45: /* 46: * Mark a position in code as unreachable. This can be used to 47: * suppress control flow warnings after asm blocks that transfer 48: * control elsewhere. 49: * 50: * Early snapshots of gcc 4.5 don't support this and we can't detect 51: * this in the preprocessor, but we can live with this because they're 52: * unreleased. Really, we need to have autoconf for the kernel. 53: */ 54: #define unreachable() __builtin_unreachable() 55: 56: /* Mark a function definition as prohibited from being cloned. */ 57: #define __noclone __attribute__((__noclone__)) 58: 59: #endif /* GCC_VERSION >= 40500 */ 60: 61: #if GCC_VERSION >= 40600 62: /* 63: * Tell the optimizer that something else uses this function or variable. 64: */ 65: #define __visible __attribute__((externally_visible)) 66: #endif 67: 68: /* 69: * GCC 'asm goto' miscompiles certain code sequences: 70: * 71: * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 72: * 73: * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. 74: * Fixed in GCC 4.8.2 and later versions. 75: * 76: * (asm goto is automatically volatile - the naming reflects this.) 77: */ 78: #if GCC_VERSION <= 40801 79: # define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) 80: #else 81: # define asm_volatile_goto(x...) do { asm goto(x); } while (0) 82: #endif 83: 84: #ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP 85: #if GCC_VERSION >= 40400 86: #define __HAVE_BUILTIN_BSWAP32__ 87: #define __HAVE_BUILTIN_BSWAP64__ 88: #endif 89: #if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600) 90: #define __HAVE_BUILTIN_BSWAP16__ 91: #endif 92: #endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ 93: