tsan/msan: add halt_on_error flag
[blocksruntime.git] / lib / tsan / rtl / tsan_flags.h
blobb517ccc3ffa7fe549fe3a25c6129082b493e1d4d
1 //===-- tsan_flags.h --------------------------------------------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file is a part of ThreadSanitizer (TSan), a race detector.
11 // NOTE: This file may be included into user code.
12 //===----------------------------------------------------------------------===//
14 #ifndef TSAN_FLAGS_H
15 #define TSAN_FLAGS_H
17 // ----------- ATTENTION -------------
18 // ThreadSanitizer user may provide its implementation of weak
19 // symbol __tsan::OverrideFlags(__tsan::Flags). Therefore, this
20 // header may be included in the user code, and shouldn't include
21 // other headers from TSan or common sanitizer runtime.
23 namespace __tsan {
25 struct Flags {
26 // Enable dynamic annotations, otherwise they are no-ops.
27 bool enable_annotations;
28 // Supress a race report if we've already output another race report
29 // with the same stack.
30 bool suppress_equal_stacks;
31 // Supress a race report if we've already output another race report
32 // on the same address.
33 bool suppress_equal_addresses;
34 // Suppress weird race reports that can be seen if JVM is embed
35 // into the process.
36 bool suppress_java;
37 // Turns off bug reporting entirely (useful for benchmarking).
38 bool report_bugs;
39 // Report thread leaks at exit?
40 bool report_thread_leaks;
41 // Report destruction of a locked mutex?
42 bool report_destroy_locked;
43 // Report violations of async signal-safety
44 // (e.g. malloc() call from a signal handler).
45 bool report_signal_unsafe;
46 // Report races between atomic and plain memory accesses.
47 bool report_atomic_races;
48 // If set, all atomics are effectively sequentially consistent (seq_cst),
49 // regardless of what user actually specified.
50 bool force_seq_cst_atomics;
51 // Strip that prefix from file paths in reports.
52 const char *strip_path_prefix;
53 // Suppressions filename.
54 const char *suppressions;
55 // Print matched suppressions at exit.
56 bool print_suppressions;
57 // Print matched "benign" races at exit.
58 bool print_benign;
59 // Override exit status if something was reported.
60 int exitcode;
61 // Exit after first reported error.
62 bool halt_on_error;
63 // Write logs to "log_path.pid".
64 // The special values are "stdout" and "stderr".
65 // The default is "stderr".
66 const char *log_path;
67 // Sleep in main thread before exiting for that many ms
68 // (useful to catch "at exit" races).
69 int atexit_sleep_ms;
70 // Verbosity level (0 - silent, 1 - a bit of output, 2+ - more output).
71 int verbosity;
72 // If set, periodically write memory profile to that file.
73 const char *profile_memory;
74 // Flush shadow memory every X ms.
75 int flush_memory_ms;
76 // Flush symbolizer caches every X ms.
77 int flush_symbolizer_ms;
78 // Stops on start until __tsan_resume() is called (for debugging).
79 bool stop_on_start;
80 // Controls whether RunningOnValgrind() returns true or false.
81 bool running_on_valgrind;
82 // Path to external symbolizer.
83 const char *external_symbolizer_path;
84 // Per-thread history size, controls how many previous memory accesses
85 // are remembered per thread. Possible values are [0..7].
86 // history_size=0 amounts to 32K memory accesses. Each next value doubles
87 // the amount of memory accesses, up to history_size=7 that amounts to
88 // 4M memory accesses. The default value is 2 (128K memory accesses).
89 int history_size;
90 // Controls level of synchronization implied by IO operations.
91 // 0 - no synchronization
92 // 1 - reasonable level of synchronization (write->read)
93 // 2 - global synchronization of all IO operations
94 int io_sync;
97 Flags *flags();
98 void InitializeFlags(Flags *flags, const char *env);
99 } // namespace __tsan
101 #endif // TSAN_FLAGS_H