[all-commits] [llvm/llvm-project] 098917: [compiler-rt] Add 'csan' library for the concurren...
Joseph Huber via All-commits
all-commits at lists.llvm.org
Wed Sep 23 07:38:27 PDT 2026
Branch: refs/heads/users/jhuber6/csan
Home: https://github.com/llvm/llvm-project
Commit: 09891783918edb38476f5627ca7547a5df0e55ee
https://github.com/llvm/llvm-project/commit/09891783918edb38476f5627ca7547a5df0e55ee
Author: Joseph Huber <huberjn at outlook.com>
Date: 2026-09-23 (Wed, 23 Sep 2026)
Changed paths:
A clang/docs/ConcurrencySanitizer.md
M clang/docs/index.md
M compiler-rt/cmake/caches/AMDGPU.cmake
M compiler-rt/cmake/config-ix.cmake
A compiler-rt/lib/csan/CMakeLists.txt
A compiler-rt/lib/csan/csan.cpp
A compiler-rt/lib/csan/csan.h
A compiler-rt/lib/csan/csan_defs.h
A compiler-rt/lib/csan/csan_flags.inc
A compiler-rt/lib/csan/csan_gpu.cpp
A compiler-rt/lib/csan/csan_offload_packet.h
A compiler-rt/lib/csan/csan_report.cpp
A compiler-rt/lib/csan/csan_watch.h
A compiler-rt/lib/csan/offload/CMakeLists.txt
A compiler-rt/lib/csan/offload/csan_offload.h
A compiler-rt/lib/csan/offload/csan_offload_hsa_interceptors.cpp
A compiler-rt/lib/csan/offload/csan_offload_report.cpp
M compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h
M compiler-rt/lib/sanitizer_common/sanitizer_offload.cpp
M compiler-rt/lib/sanitizer_common/sanitizer_offload.h
M compiler-rt/lib/sanitizer_common/sanitizer_offload_hsa.h
M compiler-rt/lib/sanitizer_common/sanitizer_offload_image.cpp
M compiler-rt/lib/sanitizer_common/sanitizer_offload_opcodes.h
M compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h
M compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp
A compiler-rt/test/csan/AMDGPU/aba-race.hip
A compiler-rt/test/csan/AMDGPU/array-race.hip
A compiler-rt/test/csan/AMDGPU/atomic-nonatomic.hip
A compiler-rt/test/csan/AMDGPU/atomic.hip
A compiler-rt/test/csan/AMDGPU/disjoint.hip
A compiler-rt/test/csan/AMDGPU/global-race.hip
A compiler-rt/test/csan/AMDGPU/helper-race.hip
A compiler-rt/test/csan/AMDGPU/lds-disjoint.hip
A compiler-rt/test/csan/AMDGPU/lds-race.hip
A compiler-rt/test/csan/AMDGPU/lit.local.cfg.py
A compiler-rt/test/csan/AMDGPU/memcpy-large-race.hip
A compiler-rt/test/csan/AMDGPU/memcpy-race.hip
A compiler-rt/test/csan/AMDGPU/memmove-race.hip
A compiler-rt/test/csan/AMDGPU/openmp-race.cpp
A compiler-rt/test/csan/AMDGPU/race.h
A compiler-rt/test/csan/AMDGPU/shared-watchpoints.hip
A compiler-rt/test/csan/AMDGPU/single-thread.hip
A compiler-rt/test/csan/AMDGPU/write-read-race.hip
A compiler-rt/test/csan/CMakeLists.txt
A compiler-rt/test/csan/access-sizes.cpp
A compiler-rt/test/csan/atomic-nonatomic.cpp
A compiler-rt/test/csan/atomic.cpp
A compiler-rt/test/csan/halt-on-error.cpp
A compiler-rt/test/csan/ignore-thread.cpp
A compiler-rt/test/csan/large-access.cpp
A compiler-rt/test/csan/large-range-race.cpp
A compiler-rt/test/csan/lit.common.cfg.py
A compiler-rt/test/csan/lit.site.cfg.py.in
A compiler-rt/test/csan/race.cpp
A compiler-rt/test/csan/read-read.cpp
A compiler-rt/test/csan/single-thread.cpp
A compiler-rt/test/csan/unknown-origin.cpp
M compiler-rt/test/lit.common.cfg.py
Log Message:
-----------
[compiler-rt] Add 'csan' library for the concurrency sanitizer
Summary:
Adds the runtime for the concurrency sanitizer, both CPU and GPU.
Fundamentally, this works using the following pseudocode:
```c
static u64 watchpoints[N]; // Hash-indexed, zero is empty.
// Emitted before the access, so we never trip on our own write.
void check_access(volatile void *addr, u32 size, u32 type) {
// Every access probes. A read conflicts only with a watched write, a
// write conflicts with either.
if (u64 *wp = find_watchpoint(addr, size, type))
consume(wp, this_pc()); // Hand our location to the owner.
if (!should_sample()) // Wave-uniform, 1-in-N chance.
return;
u64 *wp = arm_watchpoint(addr, size, type);
if (!wp) // Slot is already taken.
return;
auto old = read(addr, size);
delay(ctx.rand()); // Randomized, bounded.
if (void *peer = disarm(wp))
report_race(addr, this_pc(), peer);
else if (read(addr, size) != old)
report_race(addr, this_pc(), UNKNOWN);
}
```
This implementation is kept intentionally minimal to simplify the review
process. Many options are planned for later. The intended use is for
users to pass `-fsanitize=concurrency` for supported compilations.
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list