GCC Middle and Back End API Reference
tsan.c File Reference

Data Structures

struct  tsan_map_atomic

Enumerations

enum  tsan_atomic_action {
  check_last, add_seq_cst, add_acquire, weak_cas,
  strong_cas, bool_cas, val_cas, lock_release,
  fetch_op, fetch_op_seq_cst
}

Functions

static tree get_memory_access_decl ()
static tree is_vptr_store ()
static bool instrument_expr ()
static void instrument_builtin_call ()
static bool instrument_gimple ()
static bool instrument_memory_accesses ()
static void instrument_func_entry ()
static void instrument_func_exit ()
static unsigned tsan_pass ()
static bool tsan_gate ()
void tsan_finish_file ()
gimple_opt_passmake_pass_tsan ()
static bool tsan_gate_O0 ()
gimple_opt_passmake_pass_tsan_O0 ()

Variables

static struct tsan_map_atomic tsan_atomic_table []

Enumeration Type Documentation

   Actions for sync/atomic builtin transformations.  
Enumerator:
check_last 
add_seq_cst 
add_acquire 
weak_cas 
strong_cas 
bool_cas 
val_cas 
lock_release 
fetch_op 
fetch_op_seq_cst 

Function Documentation

static tree get_memory_access_decl ( )
static
@verbatim 

GCC instrumentation plugin for ThreadSanitizer. Copyright (C) 2011-2013 Free Software Foundation, Inc. Contributed by Dmitry Vyukov dvyuk.nosp@m.ov@g.nosp@m.oogle.nosp@m..com

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see http://www.gnu.org/licenses/.

   Number of instrumented memory accesses in the current function.  
   Builds the following decl
   void __tsan_read/writeX (void *addr);  
static bool instrument_expr ( )
static
   Instruments EXPR if needed. If any instrumentation is inserted,
   return true.  
     For now just avoid instrumenting bit field acceses.
     TODO: handle bit-fields as if touching the whole field.  
     No need to instrument accesses to decls that don't escape,
     they can't escape to other threads then.  
     Instrumentation for assignment of a function result
     must be inserted after the call.  Instrumentation for
     reads of function arguments must be inserted before the call.
     That's because the call can contain synchronization.  
         If the call can throw, it must be the last stmt in
         a basic block, so the instrumented stmts need to be
         inserted in successor bbs.  

Referenced by instrument_gimple().

static void instrument_func_entry ( )
static
   Instruments function entry.  
static void instrument_func_exit ( )
static
   Instruments function exits.  
     Find all function exits.  
static bool instrument_gimple ( )
static
   Instruments the gimple pointed to by GSI. Return
   true if func entry/exit should be instrumented.  

References gimple_assign_lhs(), gimple_assign_load_p(), gimple_assign_rhs1(), gimple_store_p(), and instrument_expr().

static bool instrument_memory_accesses ( )
static
   Instruments all interesting memory accesses in the current function.
   Return true if func entry/exit should be instrumented.  

References builtin_decl_implicit(), cfun, function::function_start_locus, g, gimple_build_call(), gimple_call_set_lhs(), gimple_set_location(), gsi_after_labels(), gsi_insert_before(), GSI_SAME_STMT, make_ssa_name(), and single_succ().

static tree is_vptr_store ( )
static
   Check as to whether EXPR refers to a store to vptr.  

References gimple_assign_rhs1().

gimple_opt_pass* make_pass_tsan ( )
gimple_opt_pass* make_pass_tsan_O0 ( )
void tsan_finish_file ( void  )
   Inserts __tsan_init () into the list of CTORs.  

Referenced by emit_debug_global_declarations().

static bool tsan_gate ( )
static
   The pass's gate.  

References GIMPLE_PASS.

static bool tsan_gate_O0 ( )
static
static unsigned tsan_pass ( )
static

Variable Documentation

struct tsan_map_atomic tsan_atomic_table[]
static

Referenced by instrument_builtin_call().