[clang] [compiler-rt] [rtsan] Enable RealtimeSanitizer for FreeBSD (PR #125389)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 10 14:48:00 PST 2025
================
@@ -864,11 +864,18 @@ INTERCEPTOR(void *, pvalloc, size_t size) {
#define RTSAN_MAYBE_INTERCEPT_PVALLOC
#endif
+#if !SANITIZER_FREEBSD
+// enabling this interception on freebsd leads to infinite recursion
+// on pthread lib initialization
----------------
davidtrevelyan wrote:
I see - thanks. Does the problem go away if you put the `pthread_once` invocation into a disabled scope?
```cpp
static __rtsan::Context &GetContextForThisThreadImpl() {
// ...
{
__rtsan::ScopedDisabler d;
pthread_once(&key_once, MakThreadLocalContextKey);
}
// ...
```
I don't think this would be too unreasonable if the FreeBSD implementation of `pthread_once` allocates. I guess we can study the FreeBSD [source](https://github.com/freebsd/freebsd-src/blob/f8f5b658bc76cd539951fb8ac712d9acf71763ca/lib/libthr/thread/thr_once.c#L35) to find more details.
What do you think @cjappl? Disabling inside `GetContextForThisThread` make me a little uneasy as I haven't been able to consider all the implications. But I think it's potentially worth considering if it means we get to keep all interceptors on FreeBSD...
https://github.com/llvm/llvm-project/pull/125389
More information about the cfe-commits
mailing list