https://github.com/cjappl created https://github.com/llvm/llvm-project/pull/107707
None >From e3e211f65afbc923299c0f413d2c50c7b00884b6 Mon Sep 17 00:00:00 2001 From: Chris Apple <cja-priv...@pm.me> Date: Sat, 7 Sep 2024 08:38:06 -0700 Subject: [PATCH] [NFC][rtsan] Docs of how to disable rtsan --- clang/docs/RealtimeSanitizer.rst | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/clang/docs/RealtimeSanitizer.rst b/clang/docs/RealtimeSanitizer.rst index 799cd43509c6e6..7854cd3c0331a4 100644 --- a/clang/docs/RealtimeSanitizer.rst +++ b/clang/docs/RealtimeSanitizer.rst @@ -83,3 +83,53 @@ non-zero exit code. #13 0x00010230dd64 in main main.cpp:9 #14 0x0001958960dc (<unknown module>) #15 0x2f557ffffffffffc (<unknown module>) + +Disabling +--------- + +In some circumstances, you may want to suppress RealtimeSanitizer violations in a specific scope. + +In C++, this is achieved via ``__rtsan::ScopedDisabler``. Within the scope where the ``ScopedDisabler`` object is instantiated, all sanitizer-reported violations are suppressed. This suppression applies to the current scope as well as all invoked functions, including any functions called transitively. + +.. code-block:: c++ + + #include <sanitizer/rtsan_interface.h> + + void process(const std::vector<float>& buffer) [[clang::nonblocking]] { + { + __rtsan::ScopedDisabler d; + ... + } + } + +If RealtimeSanitizer is not enabled at compile time (i.e., the code is not compiled with the ``-fsanitize=realtime`` flag), the ``ScopedDisabler`` is compiled as a no-op. + +In C, you can use the ``__rtsan_disable()`` and ``rtsan_enable()`` functions to manually disable and re-enable RealtimeSanitizer checks. + +.. code-block:: c++ + + #include <sanitizer/rtsan_interface.h> + + int process(const float* buffer) [[clang::nonblocking]] + { + { + __rtsan_disable(); + + ... + + __rtsan_enable(); + } + } + +Each call to ``__rtsan_disable()`` must be paired with a subsequent call to ``__rtsan_enable()`` to restore normal sanitizer functionality. If a corresponding ``rtsan_enable()`` call is not made, undefined behavior may result, potentially leaving the sanitizer permanently disabled for the rest of the program's execution. + +Compile-time sanitizer detection +-------------------------------- + +Clang provides the pre-processor macro ``__has_feature`` which may be used to detect if RealtimeSanitizer is enabled at compile-time. + +.. code-block:: c++ + + #if defined(__has_feature) && __has_feature(realtime_sanitizer) + ... + #endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits