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