blob: 6866eb86ea3d8506f4cecb666499928a632aa8c6 [file] [log] [blame]
sewardj024598e2008-09-18 14:43:05 +00001
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
Elliott Hughesed398002017-06-21 14:41:24 -070012 Copyright (C) 2008-2017 OpenWorks Ltd
sewardj024598e2008-09-18 14:43:05 +000013 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"
sewardj4815eb52008-10-20 23:33:49 +000040#include "pub_tool_libcprint.h"
sewardj024598e2008-09-18 14:43:05 +000041#include "pub_tool_execontext.h"
42#include "pub_tool_tooliface.h"
43#include "pub_tool_options.h"
44
sewardj024598e2008-09-18 14:43:05 +000045#include "sg_main.h"
46#include "pc_common.h"
47#include "h_main.h"
48
49
50//////////////////////////////////////////////////////////////
51// //
sewardj024598e2008-09-18 14:43:05 +000052// main //
53// //
54//////////////////////////////////////////////////////////////
55
sewardj024598e2008-09-18 14:43:05 +000056static void pc_pre_clo_init(void)
57{
njnf76d27a2009-05-28 01:53:07 +000058#if defined(VGO_darwin)
59 // This makes the (all-failing) regtests run much faster.
sewardjd2f95a02011-05-11 16:04:28 +000060 VG_(printf)("SGCheck doesn't work on Darwin yet, sorry.\n");
njnf76d27a2009-05-28 01:53:07 +000061 VG_(exit)(1);
62#endif
sewardjf5b019f2011-05-11 12:01:37 +000063#if defined(VGA_s390x)
64 /* fixs390: to be done. */
florian4ced7972014-02-22 22:03:09 +000065 VG_(printf)("SGCheck doesn't work on s390x yet, sorry.\n");
66 VG_(exit)(1);
67#endif
philippe05334052014-08-28 21:02:11 +000068#if defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le)
florian4ced7972014-02-22 22:03:09 +000069 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");
sewardjf5b019f2011-05-11 12:01:37 +000078 VG_(exit)(1);
79#endif
njnf76d27a2009-05-28 01:53:07 +000080
sewardjf5b019f2011-05-11 12:01:37 +000081 // Can't change the name until we change the names in suppressions
82 // too.
sewardjd2f95a02011-05-11 16:04:28 +000083 VG_(details_name) ("exp-sgcheck");
sewardj024598e2008-09-18 14:43:05 +000084 VG_(details_version) (NULL);
sewardjf5b019f2011-05-11 12:01:37 +000085 VG_(details_description) ("a stack and global array "
sewardj024598e2008-09-18 14:43:05 +000086 "overrun detector");
87 VG_(details_copyright_author)(
Elliott Hughesed398002017-06-21 14:41:24 -070088 "Copyright (C) 2003-2017, and GNU GPL'd, by OpenWorks Ltd et al.");
sewardj024598e2008-09-18 14:43:05 +000089 VG_(details_bug_reports_to) (VG_BUGS_TO);
sewardj4b8ce602008-10-20 10:23:46 +000090 VG_(details_avg_translation_sizeB) ( 496 );
sewardj024598e2008-09-18 14:43:05 +000091
sewardjf5b019f2011-05-11 12:01:37 +000092 VG_(basic_tool_funcs) (sg_post_clo_init,
sewardj024598e2008-09-18 14:43:05 +000093 h_instrument,
sewardjf5b019f2011-05-11 12:01:37 +000094 sg_fini);
sewardj024598e2008-09-18 14:43:05 +000095
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,
njn8b140de2009-02-17 04:31:18 +0000105 h_replace_malloc_usable_size,
sewardj024598e2008-09-18 14:43:05 +0000106 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,
sewardjc1bc9d12009-07-15 14:50:22 +0000112 pc_before_pp_Error,
sewardj024598e2008-09-18 14:43:05 +0000113 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,
philippe4e32d672013-10-17 22:10:41 +0000120 pc_get_extra_suppression_info,
121 pc_print_extra_suppression_use,
122 pc_update_extra_suppression_use);
sewardj024598e2008-09-18 14:43:05 +0000123
sewardjc1bc9d12009-07-15 14:50:22 +0000124 VG_(needs_xml_output) ();
125
sewardjf5b019f2011-05-11 12:01:37 +0000126 //VG_(needs_syscall_wrapper)( h_pre_syscall,
127 // h_post_syscall );
sewardj024598e2008-09-18 14:43:05 +0000128
129 VG_(needs_command_line_options)( pc_process_cmd_line_options,
130 pc_print_usage,
131 pc_print_debug_usage );
132
sewardjf5b019f2011-05-11 12:01:37 +0000133 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 );
sewardj024598e2008-09-18 14:43:05 +0000136
sewardjf5b019f2011-05-11 12:01:37 +0000137 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 );
sewardj024598e2008-09-18 14:43:05 +0000140
sewardjf5b019f2011-05-11 12:01:37 +0000141 /* 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 */
sewardj024598e2008-09-18 14:43:05 +0000148
sewardj024598e2008-09-18 14:43:05 +0000149 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
155VG_DETERMINE_INTERFACE_VERSION(pc_pre_clo_init)
156
157
158/*--------------------------------------------------------------------*/
159/*--- end pc_main.c ---*/
160/*--------------------------------------------------------------------*/