On Tue, 19 Nov 2019 at 20:27, Qian Cai <cai@xxxxxx> wrote: > > On Thu, 2019-11-14 at 19:02 +0100, 'Marco Elver' via kasan-dev wrote: > > > +menuconfig KCSAN > > + bool "KCSAN: watchpoint-based dynamic data race detector" > > + depends on HAVE_ARCH_KCSAN && !KASAN && STACKTRACE > > "!KASAN" makes me sorrow. What's problem of those two? Both of them instrument memory accesses, and gcc doesn't let us combine '-fsanitize={kernel-,}address' and '-fsanitize=thread'. > cc1: error: ‘-fsanitize=address’ and ‘-fsanitize=kernel-address’ are incompatible with ‘-fsanitize=thread’ In principle, it may be possible: - either by updating the compiler, which we want to avoid because we'd have to convince gcc and clang to do this; I can see this being infeasible because the compiler needs to become aware (somehow propagate in the IR) of what is ASAN inline-instrumentation and what is TSAN instrumentation and not emit recursive instrumentation. - or somehow merging the instrumentation, but, IMHO this is probably a really bad idea for various other reasons (complexity, performance, stability, etc.). Regardless of approach, my guess is that the complexity outweighs any benefits this may provide in the end. Not only would a hypothetical kernel that combines these be extremely slow, it'd also diminish the practical value because testing and finding bugs would also be impaired due to performance. Thanks, -- Marco