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 #include "sanitizer_common/sanitizer_flags.h"
     18 #include "sanitizer_common/sanitizer_deadlock_detector_interface.h"
     19 
     20 namespace __tsan {
     21 
     22 struct Flags : CommonFlags, DDFlags {
     23   // Enable dynamic annotations, otherwise they are no-ops.
     24   bool enable_annotations;
     25   // Suppress a race report if we've already output another race report
     26   // with the same stack.
     27   bool suppress_equal_stacks;
     28   // Suppress a race report if we've already output another race report
     29   // on the same address.
     30   bool suppress_equal_addresses;
     31   // Suppress weird race reports that can be seen if JVM is embed
     32   // into the process.
     33   bool suppress_java;
     34   // Turns off bug reporting entirely (useful for benchmarking).
     35   bool report_bugs;
     36   // Report thread leaks at exit?
     37   bool report_thread_leaks;
     38   // Report destruction of a locked mutex?
     39   bool report_destroy_locked;
     40   // Report incorrect usages of mutexes and mutex annotations?
     41   bool report_mutex_bugs;
     42   // Report violations of async signal-safety
     43   // (e.g. malloc() call from a signal handler).
     44   bool report_signal_unsafe;
     45   // Report races between atomic and plain memory accesses.
     46   bool report_atomic_races;
     47   // If set, all atomics are effectively sequentially consistent (seq_cst),
     48   // regardless of what user actually specified.
     49   bool force_seq_cst_atomics;
     50   // Suppressions filename.
     51   const char *suppressions;
     52   // Print matched suppressions at exit.
     53   bool print_suppressions;
     54   // Print matched "benign" races at exit.
     55   bool print_benign;
     56   // Override exit status if something was reported.
     57   int exitcode;
     58   // Exit after first reported error.
     59   bool halt_on_error;
     60   // Sleep in main thread before exiting for that many ms
     61   // (useful to catch "at exit" races).
     62   int atexit_sleep_ms;
     63   // If set, periodically write memory profile to that file.
     64   const char *profile_memory;
     65   // Flush shadow memory every X ms.
     66   int flush_memory_ms;
     67   // Flush symbolizer caches every X ms.
     68   int flush_symbolizer_ms;
     69   // Resident memory limit in MB to aim at.
     70   // If the process consumes more memory, then TSan will flush shadow memory.
     71   int memory_limit_mb;
     72   // Stops on start until __tsan_resume() is called (for debugging).
     73   bool stop_on_start;
     74   // Controls whether RunningOnValgrind() returns true or false.
     75   bool running_on_valgrind;
     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   // Die after multi-threaded fork if the child creates new threads.
     88   bool die_after_fork;
     89 };
     90 
     91 Flags *flags();
     92 void InitializeFlags(Flags *flags, const char *env);
     93 }  // namespace __tsan
     94 
     95 #endif  // TSAN_FLAGS_H
     96