Home | History | Annotate | Download | only in exp-sgcheck
      1 
      2 /*--------------------------------------------------------------------*/
      3 /*--- Ptrcheck: a pointer-use checker.                             ---*/
      4 /*--- This file coordinates the h_ and sg_ subtools.               ---*/
      5 /*---                                                    pc_main.c ---*/
      6 /*--------------------------------------------------------------------*/
      7 
      8 /*
      9    This file is part of Ptrcheck, a Valgrind tool for checking pointer
     10    use in programs.
     11 
     12    Copyright (C) 2008-2013 OpenWorks Ltd
     13       info (at) open-works.co.uk
     14 
     15    This program is free software; you can redistribute it and/or
     16    modify it under the terms of the GNU General Public License as
     17    published by the Free Software Foundation; either version 2 of the
     18    License, or (at your option) any later version.
     19 
     20    This program is distributed in the hope that it will be useful, but
     21    WITHOUT ANY WARRANTY; without even the implied warranty of
     22    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     23    General Public License for more details.
     24 
     25    You should have received a copy of the GNU General Public License
     26    along with this program; if not, write to the Free Software
     27    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     28    02111-1307, USA.
     29 
     30    The GNU General Public License is contained in the file COPYING.
     31 
     32    Neither the names of the U.S. Department of Energy nor the
     33    University of California nor the names of its contributors may be
     34    used to endorse or promote products derived from this software
     35    without prior written permission.
     36 */
     37 
     38 #include "pub_tool_basics.h"
     39 #include "pub_tool_libcassert.h"
     40 #include "pub_tool_libcprint.h"
     41 #include "pub_tool_execontext.h"
     42 #include "pub_tool_tooliface.h"
     43 #include "pub_tool_options.h"
     44 
     45 #include "sg_main.h"
     46 #include "pc_common.h"
     47 #include "h_main.h"
     48 
     49 
     50 //////////////////////////////////////////////////////////////
     51 //                                                          //
     52 // main                                                     //
     53 //                                                          //
     54 //////////////////////////////////////////////////////////////
     55 
     56 static void pc_pre_clo_init(void)
     57 {
     58 #if defined(VGO_darwin)
     59    // This makes the (all-failing) regtests run much faster.
     60    VG_(printf)("SGCheck doesn't work on Darwin yet, sorry.\n");
     61    VG_(exit)(1);
     62 #endif
     63 #if defined(VGA_s390x)
     64    /* fixs390: to be done. */
     65    VG_(printf)("SGCheck doesn't work on s390x yet, sorry.\n");
     66    VG_(exit)(1);
     67 #endif
     68 #if defined(VGA_ppc32) || defined(VGA_ppc64)
     69    VG_(printf)("SGCheck doesn't work on PPC yet, sorry.\n");
     70    VG_(exit)(1);
     71 #endif
     72 #if defined(VGA_arm) || defined(VGA_arm64)
     73    VG_(printf)("SGCheck doesn't work on ARM yet, sorry.\n");
     74    VG_(exit)(1);
     75 #endif
     76 #if defined(VGA_mips32) || defined(VGA_mips64)
     77    VG_(printf)("SGCheck doesn't work on MIPS yet, sorry.\n");
     78    VG_(exit)(1);
     79 #endif
     80 
     81    // Can't change the name until we change the names in suppressions
     82    // too.
     83    VG_(details_name)            ("exp-sgcheck");
     84    VG_(details_version)         (NULL);
     85    VG_(details_description)     ("a stack and global array "
     86                                  "overrun detector");
     87    VG_(details_copyright_author)(
     88       "Copyright (C) 2003-2013, and GNU GPL'd, by OpenWorks Ltd et al.");
     89    VG_(details_bug_reports_to)  (VG_BUGS_TO);
     90    VG_(details_avg_translation_sizeB) ( 496 );
     91 
     92    VG_(basic_tool_funcs)        (sg_post_clo_init,
     93                                  h_instrument,
     94                                  sg_fini);
     95 
     96    VG_(needs_malloc_replacement)( h_replace_malloc,
     97                                   h_replace___builtin_new,
     98                                   h_replace___builtin_vec_new,
     99                                   h_replace_memalign,
    100                                   h_replace_calloc,
    101                                   h_replace_free,
    102                                   h_replace___builtin_delete,
    103                                   h_replace___builtin_vec_delete,
    104                                   h_replace_realloc,
    105                                   h_replace_malloc_usable_size,
    106                                   0 /* no need for client heap redzones */ );
    107 
    108    VG_(needs_var_info)          ();
    109 
    110    VG_(needs_core_errors)       ();
    111    VG_(needs_tool_errors)       (pc_eq_Error,
    112                                  pc_before_pp_Error,
    113                                  pc_pp_Error,
    114                                  True,/*show TIDs for errors*/
    115                                  pc_update_Error_extra,
    116                                  pc_is_recognised_suppression,
    117                                  pc_read_extra_suppression_info,
    118                                  pc_error_matches_suppression,
    119                                  pc_get_error_name,
    120                                  pc_get_extra_suppression_info,
    121                                  pc_print_extra_suppression_use,
    122                                  pc_update_extra_suppression_use);
    123 
    124    VG_(needs_xml_output)        ();
    125 
    126    //VG_(needs_syscall_wrapper)( h_pre_syscall,
    127    //                            h_post_syscall );
    128 
    129    VG_(needs_command_line_options)( pc_process_cmd_line_options,
    130                                     pc_print_usage,
    131                                     pc_print_debug_usage );
    132 
    133    VG_(track_die_mem_stack)        ( sg_die_mem_stack );
    134    VG_(track_pre_thread_ll_create) ( sg_pre_thread_ll_create );
    135    VG_(track_pre_thread_first_insn)( sg_pre_thread_first_insn );
    136 
    137    VG_(track_new_mem_mmap)         ( sg_new_mem_mmap );
    138    VG_(track_new_mem_startup)      ( sg_new_mem_startup);
    139    VG_(track_die_mem_munmap)       ( sg_die_mem_munmap );
    140 
    141    /* Really we ought to give handlers for these, to
    142       check that syscalls don't read across array boundaries. */
    143    /*
    144    VG_(track_pre_mem_read)         ( NULL );
    145    VG_(track_pre_mem_read_asciiz)  ( NULL );
    146    VG_(track_pre_mem_write)        ( NULL );
    147    */
    148 
    149    sg_pre_clo_init();
    150 
    151    VG_(clo_vex_control).iropt_unroll_thresh = 0;
    152    VG_(clo_vex_control).guest_chase_thresh = 0;
    153 }
    154 
    155 VG_DETERMINE_INTERFACE_VERSION(pc_pre_clo_init)
    156 
    157 
    158 /*--------------------------------------------------------------------*/
    159 /*--- end                                                pc_main.c ---*/
    160 /*--------------------------------------------------------------------*/
    161