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