You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Off-topic remark. I'm a bit baffled as to why TSAN has a "RunningOnValgrind" that doesn't do what it says (it doesn't detect that the exe is running on Valgrind, it just looks at the TSAN_OPTIONS).
The app that I'm working on uses Google Perftools tcmallloc. I'm doing some tests with LLVM OMP.
When I run our exe I get
Unable to find TSan function AnnotateHappensAfter.
Unable to find TSan function AnnotateHappensBefore.
Unable to find TSan function AnnotateIgnoreWritesBegin.
Unable to find TSan function AnnotateIgnoreWritesEnd.
Unable to find TSan function AnnotateNewMemory.
Unable to find TSan function __tsan_func_entry.
Unable to find TSan function __tsan_func_exit.
Warning: please export TSAN_OPTIONS='ignore_noninstrumented_modules=1' to avoid false positive reports from the OpenMP runtime!
This is because you are checking for TSAN with a function called "RunningOnValgrind". However, tcmalloc, with which our exe links statically, also contains a "RunningOnValgrind".
I'm doing a test, trying to use "_tsan_init" rather than "RunningOnValgrind".
So far, just a few tests, but it looks OK. A non-TSAN exe no longer prints the warnings. And a TSAN exe still does TSAN checks.
diff --git a/openmp/tools/archer/ompt-tsan.cpp b/openmp/tools/archer/ompt-tsan.cpp
index d7658077e83a..6cc8e370eb34 100644
--- a/openmp/tools/archer/ompt-tsan.cpp
+++ b/openmp/tools/archer/ompt-tsan.cpp
@@ -167,8 +167,8 @@ DECLARE_TSAN_FUNCTION(AnnotateNewMemory, const char *, int,
DECLARE_TSAN_FUNCTION(__tsan_func_entry, const void *)
DECLARE_TSAN_FUNCTION(__tsan_func_exit)
-// RunningOnValgrind is used to detect absence of TSan and must intentionally be a nullptr.
-static int (*RunningOnValgrind)(void);
+// __tsan_init is used to detect absence of TSan and must intentionally be a nullptr.
+static void (*__tsan_init)(void);
}
// This marker is used to define a happens-before arc. The race detector will
@@ -1252,12 +1252,12 @@ ompt_start_tool(unsigned int omp_version, const char *runtime_version) {
// The OMPT start-up code uses dlopen with RTLD_LAZY. Therefore, we cannot
// rely on dlopen to fail if TSan is missing, but would get a runtime error
- // for the first TSan call. We use RunningOnValgrind to detect whether
+ // for the first TSan call. We use __tsan_init to detect whether
// an implementation of the Annotation interface is available in the
// execution or disable the tool (by returning NULL).
- findTsanFunctionSilent(RunningOnValgrind, (int (*)(void)));
- if (!RunningOnValgrind) // if we are not running on TSAN, give a different
+ findTsanFunctionSilent(__tsan_init, (void (*)(void)));
+ if (!__tsan_init) // if we are not running on TSAN, give a different
// tool the chance to be loaded
{
if (archer_flags->verbose)
The text was updated successfully, but these errors were encountered:
Off-topic remark. I'm a bit baffled as to why TSAN has a "RunningOnValgrind" that doesn't do what it says (it doesn't detect that the exe is running on Valgrind, it just looks at the TSAN_OPTIONS).
The app that I'm working on uses Google Perftools tcmallloc. I'm doing some tests with LLVM OMP.
When I run our exe I get
This is similar to issue #93524
This is because you are checking for TSAN with a function called "RunningOnValgrind". However, tcmalloc, with which our exe links statically, also contains a "RunningOnValgrind".
I'm doing a test, trying to use "_tsan_init" rather than "RunningOnValgrind".
So far, just a few tests, but it looks OK. A non-TSAN exe no longer prints the warnings. And a TSAN exe still does TSAN checks.
The text was updated successfully, but these errors were encountered: