diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2024-09-24 13:47:29 +0200 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-09-24 23:58:21 -0700 |
| commit | a40cdad18c06fd377622c47aa34564df7ea959b5 (patch) | |
| tree | dbcfabc2191cdbf2acc6c356c5ea25237b29d8f1 /lib/tsan/tsan_interface_ann.cpp | |
| parent | 7f6b7c56089eaa5b147e71b3d98328498c9025c8 (diff) | |
| download | zig-a40cdad18c06fd377622c47aa34564df7ea959b5.tar.gz zig-a40cdad18c06fd377622c47aa34564df7ea959b5.zip | |
tsan: Update to LLVM 19.1.0.
Diffstat (limited to 'lib/tsan/tsan_interface_ann.cpp')
| -rw-r--r-- | lib/tsan/tsan_interface_ann.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/tsan/tsan_interface_ann.cpp b/lib/tsan/tsan_interface_ann.cpp index 6bd72e18d9..befd6a3690 100644 --- a/lib/tsan/tsan_interface_ann.cpp +++ b/lib/tsan/tsan_interface_ann.cpp @@ -76,7 +76,7 @@ struct DynamicAnnContext { }; static DynamicAnnContext *dyn_ann_ctx; -static char dyn_ann_ctx_placeholder[sizeof(DynamicAnnContext)] ALIGNED(64); +alignas(64) static char dyn_ann_ctx_placeholder[sizeof(DynamicAnnContext)]; static void AddExpectRace(ExpectRace *list, char *f, int l, uptr addr, uptr size, char *desc) { @@ -435,4 +435,26 @@ void __tsan_mutex_post_divert(void *addr, unsigned flagz) { ThreadIgnoreBegin(thr, 0); ThreadIgnoreSyncBegin(thr, 0); } + +static void ReportMutexHeldWrongContext(ThreadState *thr, uptr pc) { + ThreadRegistryLock l(&ctx->thread_registry); + ScopedReport rep(ReportTypeMutexHeldWrongContext); + for (uptr i = 0; i < thr->mset.Size(); ++i) { + MutexSet::Desc desc = thr->mset.Get(i); + rep.AddMutex(desc.addr, desc.stack_id); + } + VarSizeStackTrace trace; + ObtainCurrentStack(thr, pc, &trace); + rep.AddStack(trace, true); + OutputReport(thr, rep); +} + +INTERFACE_ATTRIBUTE +void __tsan_check_no_mutexes_held() { + SCOPED_ANNOTATION(__tsan_check_no_mutexes_held); + if (thr->mset.Size() == 0) { + return; + } + ReportMutexHeldWrongContext(thr, pc); +} } // extern "C" |
