]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/exp-sgcheck/pc_main.c
update
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / exp-sgcheck / pc_main.c
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-2010 OpenWorks Ltd
13       info@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 s390x yet, sorry.\n");
66    VG_(exit)(1);
67 #endif
68
69    // Can't change the name until we change the names in suppressions
70    // too.
71    VG_(details_name)            ("exp-sgcheck");
72    VG_(details_version)         (NULL);
73    VG_(details_description)     ("a stack and global array "
74                                  "overrun detector");
75    VG_(details_copyright_author)(
76       "Copyright (C) 2003-2010, and GNU GPL'd, by OpenWorks Ltd et al.");
77    VG_(details_bug_reports_to)  (VG_BUGS_TO);
78    VG_(details_avg_translation_sizeB) ( 496 );
79
80    VG_(basic_tool_funcs)        (sg_post_clo_init,
81                                  h_instrument,
82                                  sg_fini);
83
84    VG_(needs_malloc_replacement)( h_replace_malloc,
85                                   h_replace___builtin_new,
86                                   h_replace___builtin_vec_new,
87                                   h_replace_memalign,
88                                   h_replace_calloc,
89                                   h_replace_free,
90                                   h_replace___builtin_delete,
91                                   h_replace___builtin_vec_delete,
92                                   h_replace_realloc,
93                                   h_replace_malloc_usable_size,
94                                   0 /* no need for client heap redzones */ );
95
96    VG_(needs_var_info)          ();
97
98    VG_(needs_core_errors)       ();
99    VG_(needs_tool_errors)       (pc_eq_Error,
100                                  pc_before_pp_Error,
101                                  pc_pp_Error,
102                                  True,/*show TIDs for errors*/
103                                  pc_update_Error_extra,
104                                  pc_is_recognised_suppression,
105                                  pc_read_extra_suppression_info,
106                                  pc_error_matches_suppression,
107                                  pc_get_error_name,
108                                  pc_get_extra_suppression_info);
109
110    VG_(needs_xml_output)        ();
111
112    //VG_(needs_syscall_wrapper)( h_pre_syscall,
113    //                            h_post_syscall );
114
115    VG_(needs_command_line_options)( pc_process_cmd_line_options,
116                                     pc_print_usage,
117                                     pc_print_debug_usage );
118
119    VG_(track_die_mem_stack)        ( sg_die_mem_stack );
120    VG_(track_pre_thread_ll_create) ( sg_pre_thread_ll_create );
121    VG_(track_pre_thread_first_insn)( sg_pre_thread_first_insn );
122
123    VG_(track_new_mem_mmap)         ( sg_new_mem_mmap );
124    VG_(track_new_mem_startup)      ( sg_new_mem_startup);
125    VG_(track_die_mem_munmap)       ( sg_die_mem_munmap );
126
127    /* Really we ought to give handlers for these, to
128       check that syscalls don't read across array boundaries. */
129    /*
130    VG_(track_pre_mem_read)         ( NULL );
131    VG_(track_pre_mem_read_asciiz)  ( NULL );
132    VG_(track_pre_mem_write)        ( NULL );
133    */
134
135    sg_pre_clo_init();
136
137    VG_(clo_vex_control).iropt_unroll_thresh = 0;
138    VG_(clo_vex_control).guest_chase_thresh = 0;
139 }
140
141 VG_DETERMINE_INTERFACE_VERSION(pc_pre_clo_init)
142
143
144 /*--------------------------------------------------------------------*/
145 /*--- end                                                pc_main.c ---*/
146 /*--------------------------------------------------------------------*/