Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[sfrench/cifs-2.6.git] / scripts / Makefile.kasan
1 # SPDX-License-Identifier: GPL-2.0
2 ifdef CONFIG_KASAN_GENERIC
3
4 ifdef CONFIG_KASAN_INLINE
5         call_threshold := 10000
6 else
7         call_threshold := 0
8 endif
9
10 KASAN_SHADOW_OFFSET ?= $(CONFIG_KASAN_SHADOW_OFFSET)
11
12 CFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address
13
14 cc-param = $(call cc-option, -mllvm -$(1), $(call cc-option, --param $(1)))
15
16 # -fasan-shadow-offset fails without -fsanitize
17 CFLAGS_KASAN_SHADOW := $(call cc-option, -fsanitize=kernel-address \
18                         -fasan-shadow-offset=$(KASAN_SHADOW_OFFSET), \
19                         $(call cc-option, -fsanitize=kernel-address \
20                         -mllvm -asan-mapping-offset=$(KASAN_SHADOW_OFFSET)))
21
22 ifeq ($(strip $(CFLAGS_KASAN_SHADOW)),)
23         CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL)
24 else
25         # Now add all the compiler specific options that are valid standalone
26         CFLAGS_KASAN := $(CFLAGS_KASAN_SHADOW) \
27          $(call cc-param,asan-globals=1) \
28          $(call cc-param,asan-instrumentation-with-call-threshold=$(call_threshold)) \
29          $(call cc-param,asan-stack=1) \
30          $(call cc-param,asan-use-after-scope=1) \
31          $(call cc-param,asan-instrument-allocas=1)
32 endif
33
34 ifdef CONFIG_KASAN_EXTRA
35 CFLAGS_KASAN += $(call cc-option, -fsanitize-address-use-after-scope)
36 endif
37
38 endif # CONFIG_KASAN_GENERIC
39
40 ifdef CONFIG_KASAN_SW_TAGS
41
42 ifdef CONFIG_KASAN_INLINE
43     instrumentation_flags := -mllvm -hwasan-mapping-offset=$(KASAN_SHADOW_OFFSET)
44 else
45     instrumentation_flags := -mllvm -hwasan-instrument-with-calls=1
46 endif
47
48 CFLAGS_KASAN := -fsanitize=kernel-hwaddress \
49                 -mllvm -hwasan-instrument-stack=0 \
50                 $(instrumentation_flags)
51
52 endif # CONFIG_KASAN_SW_TAGS
53
54 ifdef CONFIG_KASAN
55 CFLAGS_KASAN_NOSANITIZE := -fno-builtin
56 endif