at v4.1 67 lines 2.5 kB view raw
1#ifndef __LINUX_COMPILER_H 2#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead." 3#endif 4 5#define __used __attribute__((__used__)) 6#define __must_check __attribute__((warn_unused_result)) 7#define __compiler_offsetof(a, b) __builtin_offsetof(a, b) 8 9/* Mark functions as cold. gcc will assume any path leading to a call 10 to them will be unlikely. This means a lot of manual unlikely()s 11 are unnecessary now for any paths leading to the usual suspects 12 like BUG(), printk(), panic() etc. [but let's keep them for now for 13 older compilers] 14 15 Early snapshots of gcc 4.3 don't support this and we can't detect this 16 in the preprocessor, but we can live with this because they're unreleased. 17 Maketime probing would be overkill here. 18 19 gcc also has a __attribute__((__hot__)) to move hot functions into 20 a special section, but I don't see any sense in this right now in 21 the kernel context */ 22#define __cold __attribute__((__cold__)) 23 24#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) 25 26#ifndef __CHECKER__ 27# define __compiletime_warning(message) __attribute__((warning(message))) 28# define __compiletime_error(message) __attribute__((error(message))) 29#endif /* __CHECKER__ */ 30 31/* 32 * Mark a position in code as unreachable. This can be used to 33 * suppress control flow warnings after asm blocks that transfer 34 * control elsewhere. 35 * 36 * Early snapshots of gcc 4.5 don't support this and we can't detect 37 * this in the preprocessor, but we can live with this because they're 38 * unreleased. Really, we need to have autoconf for the kernel. 39 */ 40#define unreachable() __builtin_unreachable() 41 42/* Mark a function definition as prohibited from being cloned. */ 43#define __noclone __attribute__((__noclone__)) 44 45/* 46 * Tell the optimizer that something else uses this function or variable. 47 */ 48#define __visible __attribute__((externally_visible)) 49 50/* 51 * GCC 'asm goto' miscompiles certain code sequences: 52 * 53 * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 54 * 55 * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. 56 * 57 * (asm goto is automatically volatile - the naming reflects this.) 58 */ 59#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) 60 61#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP 62#define __HAVE_BUILTIN_BSWAP32__ 63#define __HAVE_BUILTIN_BSWAP64__ 64#define __HAVE_BUILTIN_BSWAP16__ 65#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ 66 67#define KASAN_ABI_VERSION 4