diff --git a/arch/arm/src/cmake/clang.cmake b/arch/arm/src/cmake/clang.cmake index f1c58c3e6a1..f8d00aabf1c 100644 --- a/arch/arm/src/cmake/clang.cmake +++ b/arch/arm/src/cmake/clang.cmake @@ -137,18 +137,22 @@ endif() if(CONFIG_MM_KASAN_INSTRUMENT_ALL) add_compile_options(-fsanitize=kernel-address) -endif() + add_compile_options(-mllvm=asan-stack=0) + add_compile_options(-mllvm=-asan-instrumentation-with-call-threshold=0) -if(CONFIG_MM_KASAN_GLOBAL) - add_compile_options(--param=asan-globals=1) -endif() + if(CONFIG_MM_KASAN_GLOBAL) + add_compile_options(-mllvm=asan-globals=1) + else() + add_compile_options(-mllvm=asan-globals=0) + endif() -if(CONFIG_MM_KASAN_DISABLE_READS_CHECK) - add_compile_options(--param=asan-instrument-reads=0) -endif() + if(CONFIG_MM_KASAN_DISABLE_READS_CHECK) + add_compile_options(-mllvm=asan-instrument-reads=0) + endif() -if(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK) - add_compile_options(--param=asan-instrument-writes=0) + if(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK) + add_compile_options(-mllvm=asan-instrument-writes=0) + endif() endif() # Instrumentation options diff --git a/arch/arm/src/common/Toolchain.defs b/arch/arm/src/common/Toolchain.defs index 0e57c8c6138..2d6fba161a9 100644 --- a/arch/arm/src/common/Toolchain.defs +++ b/arch/arm/src/common/Toolchain.defs @@ -96,18 +96,28 @@ endif ifeq ($(CONFIG_MM_KASAN_INSTRUMENT_ALL),y) ARCHOPTIMIZATION += -fsanitize=kernel-address -endif + KASAN_PARAM += asan-stack=0 + KASAN_PARAM += asan-instrumentation-with-call-threshold=0 -ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) - ARCHOPTIMIZATION += --param asan-globals=1 -endif + ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) + KASAN_PARAM += asan-globals=1 + else + KASAN_PARAM += asan-globals=0 + endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-reads=0 -endif + ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) + KASAN_PARAM += asan-instrument-reads=0 + endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-writes=0 + ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) + KASAN_PARAM += asan-instrument-writes=0 + endif + + ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) + ARCHOPTIMIZATION += $(addprefix -mllvm ,$(KASAN_PARAM)) + else + ARCHOPTIMIZATION += $(addprefix --param ,$(KASAN_PARAM)) + endif endif # Instrumentation options diff --git a/arch/arm64/src/Toolchain.defs b/arch/arm64/src/Toolchain.defs index 1fac867ba77..31da2af8e70 100644 --- a/arch/arm64/src/Toolchain.defs +++ b/arch/arm64/src/Toolchain.defs @@ -98,18 +98,28 @@ endif ifeq ($(CONFIG_MM_KASAN_INSTRUMENT_ALL),y) ARCHOPTIMIZATION += -fsanitize=kernel-address -endif + KASAN_PARAM += asan-stack=0 + KASAN_PARAM += asan-instrumentation-with-call-threshold=0 -ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) - ARCHOPTIMIZATION += --param asan-globals=1 -endif + ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) + KASAN_PARAM += asan-globals=1 + else + KASAN_PARAM += asan-globals=0 + endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-reads=0 -endif + ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) + KASAN_PARAM += asan-instrument-reads=0 + endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-writes=0 + ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) + KASAN_PARAM += asan-instrument-writes=0 + endif + + ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) + ARCHOPTIMIZATION += $(addprefix -mllvm ,$(KASAN_PARAM)) + else + ARCHOPTIMIZATION += $(addprefix --param ,$(KASAN_PARAM)) + endif endif # If we don't use MMU, all memory is treated as device memory and can't handle diff --git a/arch/arm64/src/cmake/Toolchain.cmake b/arch/arm64/src/cmake/Toolchain.cmake index 2c95142b0ba..a1c5fba8a59 100644 --- a/arch/arm64/src/cmake/Toolchain.cmake +++ b/arch/arm64/src/cmake/Toolchain.cmake @@ -127,18 +127,34 @@ endif() if(CONFIG_MM_KASAN_INSTRUMENT_ALL) add_compile_options(-fsanitize=kernel-address) -endif() + set(KASAN_PARAM "") + list(APPEND KASAN_PARAM "asan-stack=0") + list(APPEND KASAN_PARAM "asan-instrumentation-with-call-threshold=0") -if(CONFIG_MM_KASAN_GLOBAL) - add_compile_options(--param=asan-globals=1) -endif() + if(CONFIG_MM_KASAN_GLOBAL) + list(APPEND KASAN_PARAM "asan-globals=1") + else() + list(APPEND KASAN_PARAM "asan-globals=0") + endif() -if(CONFIG_MM_KASAN_DISABLE_READS_CHECK) - add_compile_options(--param=asan-instrument-reads=0) -endif() + if(CONFIG_MM_KASAN_DISABLE_READS_CHECK) + list(APPEND KASAN_PARAM "asan-instrument-reads=0") + endif() + + if(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK) + list(APPEND KASAN_PARAM "asan-instrument-writes=0") + endif() + + if(CONFIG_ARM_TOOLCHAIN_CLANG) + foreach(param IN LISTS KASAN_PARAM) + add_compile_options("-mllvm=${param}") + endforeach() + else() + foreach(param IN LISTS KASAN_PARAM) + add_compile_options("--param=${param}") + endforeach() + endif() -if(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK) - add_compile_options(--param=asan-instrument-writes=0) endif() if(CONFIG_ARCH_INSTRUMENT_ALL) diff --git a/arch/risc-v/src/cmake/Toolchain.cmake b/arch/risc-v/src/cmake/Toolchain.cmake index a710288bb97..bfec4261aab 100644 --- a/arch/risc-v/src/cmake/Toolchain.cmake +++ b/arch/risc-v/src/cmake/Toolchain.cmake @@ -367,14 +367,34 @@ endif() if(CONFIG_MM_KASAN_INSTRUMENT_ALL) add_compile_options(-fsanitize=kernel-address) -endif() + set(KASAN_PARAM "") + list(APPEND KASAN_PARAM "asan-stack=0") + list(APPEND KASAN_PARAM "asan-instrumentation-with-call-threshold=0") -if(CONFIG_MM_KASAN_DISABLE_READS_CHECK) - add_compile_options(--param=asan-instrument-reads=0) -endif() + if(CONFIG_MM_KASAN_GLOBAL) + list(APPEND KASAN_PARAM "asan-globals=1") + else() + list(APPEND KASAN_PARAM "asan-globals=0") + endif() + + if(CONFIG_MM_KASAN_DISABLE_READS_CHECK) + list(APPEND KASAN_PARAM "asan-instrument-reads=0") + endif() + + if(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK) + list(APPEND KASAN_PARAM "asan-instrument-writes=0") + endif() + + if(CONFIG_ARM_TOOLCHAIN_CLANG) + foreach(param IN LISTS KASAN_PARAM) + add_compile_options("-mllvm=${param}") + endforeach() + else() + foreach(param IN LISTS KASAN_PARAM) + add_compile_options("--param=${param}") + endforeach() + endif() -if(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK) - add_compile_options(--param=asan-instrument-writes=0) endif() if(CONFIG_MM_UBSAN_ALL) diff --git a/arch/risc-v/src/common/Toolchain.defs b/arch/risc-v/src/common/Toolchain.defs index 71db3504afa..311fcf39945 100644 --- a/arch/risc-v/src/common/Toolchain.defs +++ b/arch/risc-v/src/common/Toolchain.defs @@ -294,18 +294,28 @@ endif ifeq ($(CONFIG_MM_KASAN_INSTRUMENT_ALL),y) ARCHOPTIMIZATION += -fsanitize=kernel-address -endif + KASAN_PARAM += asan-stack=0 + KASAN_PARAM += asan-instrumentation-with-call-threshold=0 -ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) - ARCHOPTIMIZATION += --param asan-globals=1 -endif + ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) + KASAN_PARAM += asan-globals=1 + else + KASAN_PARAM += asan-globals=0 + endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-reads=0 -endif + ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) + KASAN_PARAM += asan-instrument-reads=0 + endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-writes=0 + ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) + KASAN_PARAM += asan-instrument-writes=0 + endif + + ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) + ARCHOPTIMIZATION += $(addprefix -mllvm ,$(KASAN_PARAM)) + else + ARCHOPTIMIZATION += $(addprefix --param ,$(KASAN_PARAM)) + endif endif ifeq ($(CONFIG_MM_UBSAN_ALL),y) diff --git a/arch/x86/src/common/Toolchain.defs b/arch/x86/src/common/Toolchain.defs index 76cdfca695b..bac6b27b3a0 100644 --- a/arch/x86/src/common/Toolchain.defs +++ b/arch/x86/src/common/Toolchain.defs @@ -62,18 +62,28 @@ OBJDUMP = $(CROSSDEV)objdump ifeq ($(CONFIG_MM_KASAN_INSTRUMENT_ALL),y) ARCHOPTIMIZATION += -fsanitize=kernel-address -endif + KASAN_PARAM += asan-stack=0 + KASAN_PARAM += asan-instrumentation-with-call-threshold=0 -ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) - ARCHOPTIMIZATION += --param asan-globals=1 -endif + ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) + KASAN_PARAM += asan-globals=1 + else + KASAN_PARAM += asan-globals=0 + endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-reads=0 -endif + ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) + KASAN_PARAM += asan-instrument-reads=0 + endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-writes=0 + ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) + KASAN_PARAM += asan-instrument-writes=0 + endif + + ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) + ARCHOPTIMIZATION += $(addprefix -mllvm ,$(KASAN_PARAM)) + else + ARCHOPTIMIZATION += $(addprefix --param ,$(KASAN_PARAM)) + endif endif CFLAGS := $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe diff --git a/arch/x86_64/src/common/Toolchain.defs b/arch/x86_64/src/common/Toolchain.defs index 91a1e5b6ead..fdf35657981 100644 --- a/arch/x86_64/src/common/Toolchain.defs +++ b/arch/x86_64/src/common/Toolchain.defs @@ -136,15 +136,28 @@ endif ifeq ($(CONFIG_MM_KASAN_INSTRUMENT_ALL),y) ARCHOPTIMIZATION += -fsanitize=kernel-address -endif -ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) - ARCHOPTIMIZATION += --param asan-globals=1 -endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-reads=0 -endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-writes=0 + KASAN_PARAM += asan-stack=0 + KASAN_PARAM += asan-instrumentation-with-call-threshold=0 + + ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) + KASAN_PARAM += asan-globals=1 + else + KASAN_PARAM += asan-globals=0 + endif + + ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) + KASAN_PARAM += asan-instrument-reads=0 + endif + + ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) + KASAN_PARAM += asan-instrument-writes=0 + endif + + ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) + ARCHOPTIMIZATION += $(addprefix -mllvm ,$(KASAN_PARAM)) + else + ARCHOPTIMIZATION += $(addprefix --param ,$(KASAN_PARAM)) + endif endif CC = $(CROSSDEV)gcc diff --git a/arch/xtensa/src/cmake/Toolchain.cmake b/arch/xtensa/src/cmake/Toolchain.cmake index 9823706b3f0..2df3519e718 100644 --- a/arch/xtensa/src/cmake/Toolchain.cmake +++ b/arch/xtensa/src/cmake/Toolchain.cmake @@ -87,14 +87,34 @@ add_compile_options(-mtext-section-literals) if(CONFIG_MM_KASAN_INSTRUMENT_ALL) add_compile_options(-fsanitize=kernel-address) -endif() + set(KASAN_PARAM "") + list(APPEND KASAN_PARAM "asan-stack=0") + list(APPEND KASAN_PARAM "asan-instrumentation-with-call-threshold=0") -if(CONFIG_MM_KASAN_DISABLE_READS_CHECK) - add_compile_options(--param=asan-instrument-reads=0) -endif() + if(CONFIG_MM_KASAN_GLOBAL) + list(APPEND KASAN_PARAM "asan-globals=1") + else() + list(APPEND KASAN_PARAM "asan-globals=0") + endif() + + if(CONFIG_MM_KASAN_DISABLE_READS_CHECK) + list(APPEND KASAN_PARAM "asan-instrument-reads=0") + endif() + + if(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK) + list(APPEND KASAN_PARAM "asan-instrument-writes=0") + endif() + + if(CONFIG_ARM_TOOLCHAIN_CLANG) + foreach(param IN LISTS KASAN_PARAM) + add_compile_options("-mllvm=${param}") + endforeach() + else() + foreach(param IN LISTS KASAN_PARAM) + add_compile_options("--param=${param}") + endforeach() + endif() -if(CONFIG_MM_KASAN_DISABLE_READS_CHECK) - add_compile_options(--param=asan-instrument-writes=0) endif() if(CONFIG_MM_UBSAN_ALL) diff --git a/arch/xtensa/src/lx6/Toolchain.defs b/arch/xtensa/src/lx6/Toolchain.defs index 5649523ced6..b10b799b336 100644 --- a/arch/xtensa/src/lx6/Toolchain.defs +++ b/arch/xtensa/src/lx6/Toolchain.defs @@ -47,14 +47,28 @@ ARCHCPUFLAGS = -mlongcalls ifeq ($(CONFIG_MM_KASAN_INSTRUMENT_ALL),y) ARCHOPTIMIZATION += -fsanitize=kernel-address -endif + KASAN_PARAM += asan-stack=0 + KASAN_PARAM += asan-instrumentation-with-call-threshold=0 -ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-reads=0 -endif + ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) + KASAN_PARAM += asan-globals=1 + else + KASAN_PARAM += asan-globals=0 + endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-writes=0 + ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) + KASAN_PARAM += asan-instrument-reads=0 + endif + + ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) + KASAN_PARAM += asan-instrument-writes=0 + endif + + ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) + ARCHOPTIMIZATION += $(addprefix -mllvm ,$(KASAN_PARAM)) + else + ARCHOPTIMIZATION += $(addprefix --param ,$(KASAN_PARAM)) + endif endif ifeq ($(CONFIG_MM_UBSAN_ALL),y) diff --git a/arch/xtensa/src/lx7/Toolchain.defs b/arch/xtensa/src/lx7/Toolchain.defs index 9d45f1d9e02..00b55683d7f 100644 --- a/arch/xtensa/src/lx7/Toolchain.defs +++ b/arch/xtensa/src/lx7/Toolchain.defs @@ -47,14 +47,28 @@ ARCHCPUFLAGS = -mlongcalls ifeq ($(CONFIG_MM_KASAN_INSTRUMENT_ALL),y) ARCHOPTIMIZATION += -fsanitize=kernel-address -endif + KASAN_PARAM += asan-stack=0 + KASAN_PARAM += asan-instrumentation-with-call-threshold=0 -ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-reads=0 -endif + ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) + KASAN_PARAM += asan-globals=1 + else + KASAN_PARAM += asan-globals=0 + endif -ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) - ARCHOPTIMIZATION += --param asan-instrument-writes=0 + ifeq ($(CONFIG_MM_KASAN_DISABLE_READS_CHECK),y) + KASAN_PARAM += asan-instrument-reads=0 + endif + + ifeq ($(CONFIG_MM_KASAN_DISABLE_WRITES_CHECK),y) + KASAN_PARAM += asan-instrument-writes=0 + endif + + ifeq ($(CONFIG_ARM_TOOLCHAIN_CLANG),y) + ARCHOPTIMIZATION += $(addprefix -mllvm ,$(KASAN_PARAM)) + else + ARCHOPTIMIZATION += $(addprefix --param ,$(KASAN_PARAM)) + endif endif ifeq ($(CONFIG_MM_UBSAN_ALL),y)