Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/compiler-rt/lib/rtsan/rtsan_assertions.h
213766 views
1
//===--- rtsan_assertions.h - Realtime Sanitizer ----------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// Part of the RealtimeSanitizer runtime library
10
//
11
//===----------------------------------------------------------------------===//
12
13
#pragma once
14
15
#include "rtsan/rtsan.h"
16
#include "rtsan/rtsan_context.h"
17
#include "rtsan/rtsan_diagnostics.h"
18
#include "rtsan/rtsan_stats.h"
19
#include "rtsan/rtsan_suppressions.h"
20
21
#include "sanitizer_common/sanitizer_stacktrace.h"
22
23
namespace __rtsan {
24
25
template <typename OnViolationAction>
26
void ExpectNotRealtime(Context &context, const DiagnosticsInfo &info,
27
OnViolationAction &&OnViolation) {
28
CHECK(__rtsan_is_initialized());
29
if (context.InRealtimeContext() && !context.IsBypassed()) {
30
ScopedBypass sb{context};
31
32
if (IsFunctionSuppressed(info.func_name)) {
33
IncrementSuppressedCount();
34
return;
35
}
36
37
__sanitizer::BufferedStackTrace stack;
38
39
// We use the unwind_on_fatal flag here because of precedent with other
40
// sanitizers, this action is not necessarily fatal if halt_on_error=false
41
stack.Unwind(info.pc, info.bp, nullptr,
42
__sanitizer::common_flags()->fast_unwind_on_fatal);
43
44
if (IsStackTraceSuppressed(stack)) {
45
IncrementSuppressedCount();
46
return;
47
}
48
49
OnViolation(stack, info);
50
}
51
}
52
53
} // namespace __rtsan
54
55