llvm-project/llvm/test/Instrumentation
Dmitry Vyukov 5a2c31116f [TSAN] Add optional support for distinguishing volatiles
Add support to optionally emit different instrumentation for accesses to
volatile variables. While the default TSAN runtime likely will never
require this feature, other runtimes for different environments that
have subtly different memory models or assumptions may require
distinguishing volatiles.

One such environment are OS kernels, where volatile is still used in
various places for various reasons, and often declare volatile to be
"safe enough" even in multi-threaded contexts. One such example is the
Linux kernel, which implements various synchronization primitives using
volatile (READ_ONCE(), WRITE_ONCE()). Here the Kernel Concurrency
Sanitizer (KCSAN) [1], is a runtime that uses TSAN instrumentation but
otherwise implements a very different approach to race detection from
TSAN.

While in the Linux kernel it is generally discouraged to use volatiles
explicitly, the topic will likely come up again, and we will eventually
need to distinguish volatile accesses [2]. The other use-case is
ignoring data races on specially marked variables in the kernel, for
example bit-flags (here we may hide 'volatile' behind a different name
such as 'no_data_race').

[1] https://github.com/google/ktsan/wiki/KCSAN
[2] https://lkml.kernel.org/r/CANpmjNOfXNE-Zh3MNP=-gmnhvKbsfUfTtWkyg_=VqTxS4nnptQ@mail.gmail.com

Author: melver (Marco Elver)
Reviewed-in: https://reviews.llvm.org/D78554
2020-04-22 17:27:09 +02:00
..
AddressSanitizer Make IRBuilder automatically set alignment on load/store/alloca. 2020-04-13 13:43:14 -07:00
BoundsChecking
DataFlowSanitizer Migrate function attribute "no-frame-pointer-elim" to "frame-pointer"="all" as cleanups after D56351 2019-12-24 15:57:33 -08:00
HWAddressSanitizer hwasan: Move .note.hwasan.globals note to hwasan.module_ctor comdat. 2020-01-17 13:40:52 -08:00
InstrOrderFile
InstrProfiling Reland: [Coverage] Revise format to reduce binary size 2020-02-28 18:12:04 -08:00
MemorySanitizer [llvm] Fix yet more missing FileCheck colons 2020-04-13 10:49:19 -06:00
PoisonChecking [PoisonCheker] Support for out of bounds operands on shifts + insert/extractelement 2019-07-09 19:26:12 +00:00
SanitizerCoverage [SanitizerCoverage] The section name for inline-bool-flag was too long for darwin builds, so shortening it. 2020-04-14 02:06:33 -07:00
ThreadSanitizer [TSAN] Add optional support for distinguishing volatiles 2020-04-22 17:27:09 +02:00
cgprofile.ll