Home | History | Annotate | Download | only in rtl
      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 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef TSAN_FLAGS_H
     15 #define TSAN_FLAGS_H
     16 
     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.
     22 
     23 namespace __tsan {
     24 
     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   // Override exit status if something was reported.
     56   int exitcode;
     57   // Write logs to "log_path.pid".
     58   // The special values are "stdout" and "stderr".
     59   // The default is "stderr".
     60   const char *log_path;
     61   // Sleep in main thread before exiting for that many ms
     62   // (useful to catch "at exit" races).
     63   int atexit_sleep_ms;
     64   // Verbosity level (0 - silent, 1 - a bit of output, 2+ - more output).
     65   int verbosity;
     66   // If set, periodically write memory profile to that file.
     67   const char *profile_memory;
     68   // Flush shadow memory every X ms.
     69   int flush_memory_ms;
     70   // Stops on start until __tsan_resume() is called (for debugging).
     71   bool stop_on_start;
     72   // Controls whether RunningOnValgrind() returns true or false.
     73   bool running_on_valgrind;
     74   // Path to external symbolizer.
     75   const char *external_symbolizer_path;
     76   // Per-thread history size, controls how many previous memory accesses
     77   // are remembered per thread.  Possible values are [0..7].
     78   // history_size=0 amounts to 32K memory accesses.  Each next value doubles
     79   // the amount of memory accesses, up to history_size=7 that amounts to
     80   // 4M memory accesses.  The default value is 2 (128K memory accesses).
     81   int history_size;
     82   // Controls level of synchronization implied by IO operations.
     83   // 0 - no synchronization
     84   // 1 - reasonable level of synchronization (write->read)
     85   // 2 - global synchronization of all IO operations
     86   int io_sync;
     87 };
     88 
     89 Flags *flags();
     90 void InitializeFlags(Flags *flags, const char *env);
     91 }  // namespace __tsan
     92 
     93 #endif  // TSAN_FLAGS_H
     94