1 | //===-- ubsan_monitor.h -----------------------------------------*- 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 | // Hooks which allow a monitor process to inspect UBSan's diagnostics. |
10 | // |
11 | //===----------------------------------------------------------------------===// |
12 | |
13 | #ifndef UBSAN_MONITOR_H |
14 | #define UBSAN_MONITOR_H |
15 | |
16 | #include "ubsan_diag.h" |
17 | #include "ubsan_value.h" |
18 | |
19 | namespace __ubsan { |
20 | |
21 | struct UndefinedBehaviorReport { |
22 | const char *IssueKind; |
23 | Location &Loc; |
24 | InternalScopedString Buffer; |
25 | |
26 | UndefinedBehaviorReport(const char *IssueKind, Location &Loc, |
27 | InternalScopedString &Msg); |
28 | }; |
29 | |
30 | SANITIZER_INTERFACE_ATTRIBUTE void |
31 | RegisterUndefinedBehaviorReport(UndefinedBehaviorReport *UBR); |
32 | |
33 | /// Called after a report is prepared. This serves to alert monitor processes |
34 | /// that a UB report is available. |
35 | extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __ubsan_on_report(void); |
36 | |
37 | /// Used by the monitor process to extract information from a UB report. The |
38 | /// data is only available until the next time __ubsan_on_report is called. The |
39 | /// caller is responsible for copying and preserving the data if needed. |
40 | extern "C" SANITIZER_INTERFACE_ATTRIBUTE void |
41 | __ubsan_get_current_report_data(const char **OutIssueKind, |
42 | const char **OutMessage, |
43 | const char **OutFilename, unsigned *OutLine, |
44 | unsigned *OutCol, char **OutMemoryAddr); |
45 | |
46 | } // end namespace __ubsan |
47 | |
48 | #endif // UBSAN_MONITOR_H |
49 | |