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