Commit e68dcd8e authored by Marco Elver's avatar Marco Elver Committed by Paul E. McKenney

kcsan: Re-add GCC as a supported compiler

GCC version 11 recently implemented all requirements to correctly
support KCSAN:

1. Correct no_sanitize-attribute inlining behaviour:
   https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=4089df8ef4a63126b0774c39b6638845244c20d2

2. --param=tsan-distinguish-volatile
   https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=ab2789ec507a94f1a75a6534bca51c7b39037ce0

3. --param=tsan-instrument-func-entry-exit
   https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=06712fc68dc9843d9af7c7ac10047f49d305ad76

Therefore, we can re-enable GCC for KCSAN, and document the new compiler
requirements.
Signed-off-by: default avatarMarco Elver <elver@google.com>
Cc: Martin Liska <mliska@suse.cz>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 56b031f0
...@@ -8,7 +8,8 @@ approach to detect races. KCSAN's primary purpose is to detect `data races`_. ...@@ -8,7 +8,8 @@ approach to detect races. KCSAN's primary purpose is to detect `data races`_.
Usage Usage
----- -----
KCSAN requires Clang version 11 or later. KCSAN is supported by both GCC and Clang. With GCC we require version 11 or
later, and with Clang also require version 11 or later.
To enable KCSAN configure the kernel with:: To enable KCSAN configure the kernel with::
......
...@@ -4,7 +4,8 @@ config HAVE_ARCH_KCSAN ...@@ -4,7 +4,8 @@ config HAVE_ARCH_KCSAN
bool bool
config HAVE_KCSAN_COMPILER config HAVE_KCSAN_COMPILER
def_bool CC_IS_CLANG && $(cc-option,-fsanitize=thread -mllvm -tsan-distinguish-volatile=1) def_bool (CC_IS_CLANG && $(cc-option,-fsanitize=thread -mllvm -tsan-distinguish-volatile=1)) || \
(CC_IS_GCC && $(cc-option,-fsanitize=thread --param tsan-distinguish-volatile=1))
help help
For the list of compilers that support KCSAN, please see For the list of compilers that support KCSAN, please see
<file:Documentation/dev-tools/kcsan.rst>. <file:Documentation/dev-tools/kcsan.rst>.
......
...@@ -6,7 +6,7 @@ ifdef CONFIG_KCSAN ...@@ -6,7 +6,7 @@ ifdef CONFIG_KCSAN
ifdef CONFIG_CC_IS_CLANG ifdef CONFIG_CC_IS_CLANG
cc-param = -mllvm -$(1) cc-param = -mllvm -$(1)
else else
cc-param = --param -$(1) cc-param = --param $(1)
endif endif
# Keep most options here optional, to allow enabling more compilers if absence # Keep most options here optional, to allow enabling more compilers if absence
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment