toolchain: Support KASAN compilation above Clang18
1. When the Clang compiler turns on "-fsanitize=kernel-address", inlining, global variables, and stack detection are enabled by default and must be turned off manually. 2. -mllvm is the parameter passing method of Clang, and --param is the parameter passing method of GCC After the modification, KASan compilation and operation will be supported for Clang 18 and above Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
This commit is contained in:
parent
7b902caf94
commit
e97e33eadc
11 changed files with 228 additions and 87 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue