• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef __LINUX_COMPILER_H
2 #error "Please don't include <linux/compiler-clang.h> directly, include <linux/compiler.h> instead."
3 #endif
4 
5 /* Some compiler specific definitions are overwritten here
6  * for Clang compiler
7  */
8 
9 #ifdef uninitialized_var
10 #undef uninitialized_var
11 #define uninitialized_var(x) x = *(&(x))
12 #endif
13 
14 /* same as gcc, this was present in clang-2.6 so we can assume it works
15  * with any version that can compile the kernel
16  */
17 #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
18 
19 #ifdef CONFIG_LTO_CLANG
20 #ifdef CONFIG_FTRACE_MCOUNT_RECORD
21 #define __norecordmcount \
22 	__attribute__((__section__(".text..ftrace")))
23 #endif
24 
25 #define __nocfi		__attribute__((no_sanitize("cfi")))
26 #endif
27 
28 /* all clang versions usable with the kernel support KASAN ABI version 5 */
29 #define KASAN_ABI_VERSION 5
30 
31 /* emulate gcc's __SANITIZE_ADDRESS__ flag */
32 #if __has_feature(address_sanitizer)
33 #define __SANITIZE_ADDRESS__
34 #endif
35 
36 /* Clang doesn't have a way to turn it off per-function, yet. */
37 #ifdef __noretpoline
38 #undef __noretpoline
39 #endif
40