================ @@ -43,6 +44,21 @@ static __rtsan::Context &GetContextForThisThreadImpl() { return *current_thread_context; } +#else + +// On FreeBSD, pthread api cannot be used as calloc is called under the hood +// at library initialization time. +static __thread Context *ctx = nullptr; + +static __rtsan::Context &GetContextForThisThreadImpl() { + if (ctx == nullptr) { + ctx = static_cast<Context *>(MmapOrDie(sizeof(Context), "RtsanContext")); + new (ctx) Context(); ---------------- cjappl wrote:
This does not do the same thing as the other version. This construct needs to be thread local, otherwise a multi threaded binary will not be able to track its state properly. https://github.com/llvm/llvm-project/pull/125389 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits