xref: /llvm-project/compiler-rt/include/sanitizer/rtsan_interface.h (revision 5d146c689e28e2878ba5a1aab9560e3c4fa2c2e1)
1*5d146c68SChris Apple //===-- sanitizer/rtsan_interface.h -----------------------------*- C++ -*-===//
2*5d146c68SChris Apple //
3*5d146c68SChris Apple // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*5d146c68SChris Apple // See https://llvm.org/LICENSE.txt for license information.
5*5d146c68SChris Apple // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*5d146c68SChris Apple //
7*5d146c68SChris Apple //===----------------------------------------------------------------------===//
8*5d146c68SChris Apple //
9*5d146c68SChris Apple // This file is a part of RealtimeSanitizer.
10*5d146c68SChris Apple //
11*5d146c68SChris Apple // Public interface header.
12*5d146c68SChris Apple //===----------------------------------------------------------------------===//
13*5d146c68SChris Apple 
14*5d146c68SChris Apple #ifndef SANITIZER_RTSAN_INTERFACE_H
15*5d146c68SChris Apple #define SANITIZER_RTSAN_INTERFACE_H
16*5d146c68SChris Apple 
17*5d146c68SChris Apple #include <sanitizer/common_interface_defs.h>
18*5d146c68SChris Apple 
19*5d146c68SChris Apple #ifdef __cplusplus
20*5d146c68SChris Apple extern "C" {
21*5d146c68SChris Apple #endif // __cplusplus
22*5d146c68SChris Apple 
23*5d146c68SChris Apple // Disable all RTSan error reporting.
24*5d146c68SChris Apple // Must be paired with a call to `__rtsan_enable`
25*5d146c68SChris Apple void SANITIZER_CDECL __rtsan_disable(void);
26*5d146c68SChris Apple 
27*5d146c68SChris Apple // Re-enable all RTSan error reporting.
28*5d146c68SChris Apple // Must follow a call to `__rtsan_disable`.
29*5d146c68SChris Apple void SANITIZER_CDECL __rtsan_enable(void);
30*5d146c68SChris Apple 
31*5d146c68SChris Apple #ifdef __cplusplus
32*5d146c68SChris Apple } // extern "C"
33*5d146c68SChris Apple 
34*5d146c68SChris Apple namespace __rtsan {
35*5d146c68SChris Apple #if defined(__has_feature) && __has_feature(realtime_sanitizer)
36*5d146c68SChris Apple 
37*5d146c68SChris Apple class ScopedDisabler {
38*5d146c68SChris Apple public:
39*5d146c68SChris Apple   ScopedDisabler() { __rtsan_disable(); }
40*5d146c68SChris Apple   ~ScopedDisabler() { __rtsan_enable(); }
41*5d146c68SChris Apple 
42*5d146c68SChris Apple #if __cplusplus >= 201103L
43*5d146c68SChris Apple   ScopedDisabler(const ScopedDisabler &) = delete;
44*5d146c68SChris Apple   ScopedDisabler &operator=(const ScopedDisabler &) = delete;
45*5d146c68SChris Apple   ScopedDisabler(ScopedDisabler &&) = delete;
46*5d146c68SChris Apple   ScopedDisabler &operator=(ScopedDisabler &&) = delete;
47*5d146c68SChris Apple #else
48*5d146c68SChris Apple private:
49*5d146c68SChris Apple   ScopedDisabler(const ScopedDisabler &);
50*5d146c68SChris Apple   ScopedDisabler &operator=(const ScopedDisabler &);
51*5d146c68SChris Apple #endif // __cplusplus >= 201103L
52*5d146c68SChris Apple };
53*5d146c68SChris Apple 
54*5d146c68SChris Apple #else
55*5d146c68SChris Apple 
56*5d146c68SChris Apple class ScopedDisabler {
57*5d146c68SChris Apple public:
58*5d146c68SChris Apple   ScopedDisabler() {}
59*5d146c68SChris Apple #if __cplusplus >= 201103L
60*5d146c68SChris Apple   ScopedDisabler(const ScopedDisabler &) = delete;
61*5d146c68SChris Apple   ScopedDisabler &operator=(const ScopedDisabler &) = delete;
62*5d146c68SChris Apple   ScopedDisabler(ScopedDisabler &&) = delete;
63*5d146c68SChris Apple   ScopedDisabler &operator=(ScopedDisabler &&) = delete;
64*5d146c68SChris Apple #else
65*5d146c68SChris Apple private:
66*5d146c68SChris Apple   ScopedDisabler(const ScopedDisabler &);
67*5d146c68SChris Apple   ScopedDisabler &operator=(const ScopedDisabler &);
68*5d146c68SChris Apple #endif // __cplusplus >= 201103L
69*5d146c68SChris Apple };
70*5d146c68SChris Apple 
71*5d146c68SChris Apple #endif // defined(__has_feature) && __has_feature(realtime_sanitizer)
72*5d146c68SChris Apple } // namespace __rtsan
73*5d146c68SChris Apple #endif // __cplusplus
74*5d146c68SChris Apple 
75*5d146c68SChris Apple #endif // SANITIZER_RTSAN_INTERFACE_H
76