2013-06-12 Richard Biener <rguenther@suse.de>
[official-gcc.git] / libsanitizer / tsan / tsan_flags.h
blob480b41538f941ef57bf706bcb6af4ff4dc610539
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 //===----------------------------------------------------------------------===//
12 #ifndef TSAN_FLAGS_H
13 #define TSAN_FLAGS_H
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.
21 namespace __tsan {
23 struct 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;
87 Flags *flags();
88 void InitializeFlags(Flags *flags, const char *env);
89 } // namespace __tsan
91 #endif // TSAN_FLAGS_H