Messages in this thread | | | Date | Wed, 13 May 2020 13:02:18 -0700 | From | "Paul E. McKenney" <> | Subject | Re: [PATCH] [v2] ubsan, kcsan: don't combine sanitizer with kcov on clang |
| |
On Thu, May 07, 2020 at 06:25:31PM +0200, Arnd Bergmann wrote: > Clang does not allow -fsanitize-coverage=trace-{pc,cmp} together > with -fsanitize=bounds or with ubsan: > > clang: error: argument unused during compilation: '-fsanitize-coverage=trace-pc' [-Werror,-Wunused-command-line-argument] > clang: error: argument unused during compilation: '-fsanitize-coverage=trace-cmp' [-Werror,-Wunused-command-line-argument] > > To avoid the warning, check whether clang can handle this correctly > or disallow ubsan and kcsan when kcov is enabled. > > Link: https://bugs.llvm.org/show_bug.cgi?id=45831 > Link: https://lore.kernel.org/lkml/20200505142341.1096942-1-arnd@arndb.de > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Applied for v5.9 and pushed, thank you!
Thanx, Paul
> --- > v2: this implements Marco's suggestion to check what the compiler > actually supports, and references the bug report I now opened. > > Let's wait for replies on that bug report before this gets applied, > in case the feedback there changes the conclusion. > --- > lib/Kconfig.kcsan | 11 +++++++++++ > lib/Kconfig.ubsan | 11 +++++++++++ > 2 files changed, 22 insertions(+) > > diff --git a/lib/Kconfig.kcsan b/lib/Kconfig.kcsan > index ea28245c6c1d..a7276035ca0d 100644 > --- a/lib/Kconfig.kcsan > +++ b/lib/Kconfig.kcsan > @@ -3,9 +3,20 @@ > config HAVE_ARCH_KCSAN > bool > > +config KCSAN_KCOV_BROKEN > + def_bool KCOV && CC_HAS_SANCOV_TRACE_PC > + depends on CC_IS_CLANG > + depends on !$(cc-option,-Werror=unused-command-line-argument -fsanitize=thread -fsanitize-coverage=trace-pc) > + help > + Some versions of clang support either KCSAN and KCOV but not the > + combination of the two. > + See https://bugs.llvm.org/show_bug.cgi?id=45831 for the status > + in newer releases. > + > menuconfig KCSAN > bool "KCSAN: dynamic data race detector" > depends on HAVE_ARCH_KCSAN && DEBUG_KERNEL && !KASAN > + depends on !KCSAN_KCOV_BROKEN > select STACKTRACE > help > The Kernel Concurrency Sanitizer (KCSAN) is a dynamic > diff --git a/lib/Kconfig.ubsan b/lib/Kconfig.ubsan > index 929211039bac..a5ba2fd51823 100644 > --- a/lib/Kconfig.ubsan > +++ b/lib/Kconfig.ubsan > @@ -26,9 +26,20 @@ config UBSAN_TRAP > the system. For some system builders this is an acceptable > trade-off. > > +config UBSAN_KCOV_BROKEN > + def_bool KCOV && CC_HAS_SANCOV_TRACE_PC > + depends on CC_IS_CLANG > + depends on !$(cc-option,-Werror=unused-command-line-argument -fsanitize=bounds -fsanitize-coverage=trace-pc) > + help > + Some versions of clang support either UBSAN or KCOV but not the > + combination of the two. > + See https://bugs.llvm.org/show_bug.cgi?id=45831 for the status > + in newer releases. > + > config UBSAN_BOUNDS > bool "Perform array index bounds checking" > default UBSAN > + depends on !UBSAN_KCOV_BROKEN > help > This option enables detection of directly indexed out of bounds > array accesses, where the array size is known at compile time. > -- > 2.26.0 >
| |