pub_core_options.h revision 663860b1408516d02ebfcb3a9999a134e6cfb223
1
2/*--------------------------------------------------------------------*/
3/*--- Command line options.                     pub_core_options.h ---*/
4/*--------------------------------------------------------------------*/
5
6/*
7   This file is part of Valgrind, a dynamic binary instrumentation
8   framework.
9
10   Copyright (C) 2000-2012 Julian Seward
11      jseward@acm.org
12
13   This program is free software; you can redistribute it and/or
14   modify it under the terms of the GNU General Public License as
15   published by the Free Software Foundation; either version 2 of the
16   License, or (at your option) any later version.
17
18   This program is distributed in the hope that it will be useful, but
19   WITHOUT ANY WARRANTY; without even the implied warranty of
20   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21   General Public License for more details.
22
23   You should have received a copy of the GNU General Public License
24   along with this program; if not, write to the Free Software
25   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26   02111-1307, USA.
27
28   The GNU General Public License is contained in the file COPYING.
29*/
30
31#ifndef __PUB_CORE_OPTIONS_H
32#define __PUB_CORE_OPTIONS_H
33
34//--------------------------------------------------------------------
35// PURPOSE: This module holds the variables for all command line options,
36// plus some functions and macros for manipulating them.  Almost every
37// other module imports this one, if only for VG_(clo_verbosity).
38//--------------------------------------------------------------------
39
40#include "pub_tool_options.h"
41
42/* The max number of suppression files. */
43#define VG_CLO_MAX_SFILES 100
44
45/* The max number of --require-text-symbol= specification strings. */
46#define VG_CLO_MAX_REQ_TSYMS 100
47
48/* The max number of --fullpath-after= parameters. */
49#define VG_CLO_MAX_FULLPATH_AFTER 100
50
51/* Should we stop collecting errors if too many appear?  default: YES */
52extern Bool  VG_(clo_error_limit);
53/* Alternative exit code to hand to parent if errors were found.
54   default: 0 (no, return the application's exit code in the normal
55   way. */
56extern Int   VG_(clo_error_exitcode);
57
58typedef
59   enum {
60      Vg_VgdbNo,   // Do not activate gdbserver.
61      Vg_VgdbYes,  // Activate gdbserver (default).
62      Vg_VgdbFull, // ACtivate gdbserver in full mode, allowing
63                   // a precise handling of watchpoints and single stepping
64                   // at any moment.
65   }
66   VgVgdb;
67/* if != Vg_VgdbNo, allows valgrind to serve vgdb/gdb. */
68extern VgVgdb VG_(clo_vgdb);
69/* if > 0, checks every VG_(clo_vgdb_poll) BBS if vgdb wants to be served. */
70extern Int VG_(clo_vgdb_poll);
71/* prefix for the named pipes (FIFOs) used by vgdb/gdb to communicate with valgrind */
72extern HChar* VG_(clo_vgdb_prefix);
73/* if True, gdbserver in valgrind will expose a target description containing
74   shadow registers */
75extern Bool  VG_(clo_vgdb_shadow_registers);
76
77/* Enquire about whether to attach to a debugger at errors?   default: NO */
78extern Bool  VG_(clo_db_attach);
79/* The debugger command?  default: whatever gdb ./configure found */
80extern Char* VG_(clo_db_command);
81/* Generating a suppression for each error?   default: 0 (NO)
82   Other values: 1 (yes, but ask user), 2 (yes, don't ask user) */
83extern Int   VG_(clo_gen_suppressions);
84/* Sanity-check level: 0 = none, 1 (default), > 1 = expensive. */
85extern Int   VG_(clo_sanity_level);
86/* Automatically attempt to demangle C++ names?  default: YES */
87extern Bool  VG_(clo_demangle);
88/* Simulate child processes? default: NO */
89/* Soname synonyms : a string containing a list of pairs
90   xxxxx=yyyyy separated by commas.
91   E.g. --soname-synonyms=somalloc=libtcmalloc*.so*,solibtruc=NONE */
92extern HChar* VG_(clo_soname_synonyms);
93extern Bool  VG_(clo_trace_children);
94/* String containing comma-separated patterns for executable names
95   that should not be traced into even when --trace-children=yes */
96extern HChar* VG_(clo_trace_children_skip);
97/* The same as VG_(clo_trace_children), except that these patterns are
98   tested against the arguments for child processes, rather than the
99   executable name. */
100extern HChar* VG_(clo_trace_children_skip_by_arg);
101/* After a fork, the child's output can become confusingly
102   intermingled with the parent's output.  This is especially
103   problematic when VG_(clo_xml) is True.  Setting
104   VG_(clo_child_silent_after_fork) causes children to fall silent
105   after fork() calls.  Although note they become un-silent again
106   after the subsequent exec(). */
107extern Bool  VG_(clo_child_silent_after_fork);
108
109/* If the user specified --log-file=STR and/or --xml-file=STR, these
110   hold STR after expansion of the %p and %q templates. */
111extern Char* VG_(clo_log_fname_expanded);
112extern Char* VG_(clo_xml_fname_expanded);
113
114/* Add timestamps to log messages?  default: NO */
115extern Bool  VG_(clo_time_stamp);
116
117/* The file descriptor to read for input.  default: 0 == stdin */
118extern Int   VG_(clo_input_fd);
119
120/* The number of suppression files specified. */
121extern Int   VG_(clo_n_suppressions);
122/* The names of the suppression files. */
123extern Char* VG_(clo_suppressions)[VG_CLO_MAX_SFILES];
124
125/* An array of strings harvested from --fullpath-after= flags. */
126extern Int   VG_(clo_n_fullpath_after);
127extern Char* VG_(clo_fullpath_after)[VG_CLO_MAX_FULLPATH_AFTER];
128
129/* DEBUG: print generated code?  default: 00000000 ( == NO ) */
130extern UChar VG_(clo_trace_flags);
131/* DEBUG: do bb profiling?  default: 00000000 ( == NO ) */
132extern UChar VG_(clo_profile_flags);
133/* DEBUG: if tracing codegen, be quiet until after this bb */
134extern Int   VG_(clo_trace_notbelow);
135/* DEBUG: if tracing codegen, be quiet after this bb  */
136extern Int   VG_(clo_trace_notabove);
137/* DEBUG: print system calls?  default: NO */
138extern Bool  VG_(clo_trace_syscalls);
139/* DEBUG: print signal details?  default: NO */
140extern Bool  VG_(clo_trace_signals);
141/* DEBUG: print symtab details?  default: NO */
142extern Bool  VG_(clo_trace_symtab);
143/* DEBUG: restrict symtab etc details to object name pattern.  Default: "*" */
144extern HChar* VG_(clo_trace_symtab_patt);
145/* DEBUG: print call-frame-info details?  default: NO */
146extern Bool  VG_(clo_trace_cfi);
147/* DEBUG:  mimic /usr/bin/readelf --syms?  default: NO */
148extern Bool  VG_(clo_debug_dump_syms);
149/* DEBUG: mimic /usr/bin/readelf --debug-dump=line?  default: NO */
150extern Bool  VG_(clo_debug_dump_line);
151/* DEBUG: mimic  /usr/bin/readelf --debug-dump=frames?  default: NO */
152extern Bool  VG_(clo_debug_dump_frames);
153/* DEBUG: print redirection details?  default: NO */
154extern Bool  VG_(clo_trace_redir);
155/* Enable fair scheduling on multicore systems? default: NO */
156enum FairSchedType { disable_fair_sched, enable_fair_sched, try_fair_sched };
157extern enum FairSchedType VG_(clo_fair_sched);
158/* DEBUG: print thread scheduling events?  default: NO */
159extern Bool  VG_(clo_trace_sched);
160/* DEBUG: do heap profiling?  default: NO */
161extern Bool  VG_(clo_profile_heap);
162#define MAX_REDZONE_SZB 128
163// Maximum for the default values for core arenas and for client
164// arena given by the tool.
165// 128 is no special figure, just something not too big
166#define MAX_CLO_REDZONE_SZB 4096
167// We allow the user to increase the redzone size to 4Kb :
168// This allows "off by one" in an array of pages to be detected.
169#define CORE_REDZONE_DEFAULT_SZB 4
170extern Int VG_(clo_core_redzone_size);
171// VG_(clo_redzone_size) has default value -1, indicating to keep
172// the tool provided value.
173extern Int VG_(clo_redzone_size);
174/* DEBUG: display gory details for the k'th most popular error.
175   default: Infinity. */
176extern Int   VG_(clo_dump_error);
177/* Engage miscellaneous weird hacks needed for some progs. */
178extern Char* VG_(clo_sim_hints);
179/* Show symbols in the form 'name+offset' ?  Default: NO */
180extern Bool VG_(clo_sym_offsets);
181/* Read DWARF3 variable info even if tool doesn't ask for it? */
182extern Bool VG_(clo_read_var_info);
183/* Which prefix to strip from full source file paths, if any. */
184extern Char* VG_(clo_prefix_to_strip);
185
186/* An array of strings harvested from --require-text-symbol=
187   flags.
188
189   Each string specifies a pair: a soname pattern and a text symbol
190   name pattern, separated by a colon.  The patterns can be written
191   using the normal "?" and "*" wildcards.  For example:
192   ":*libc.so*:foo?bar".
193
194   These flags take effect when reading debuginfo from objects.  If an
195   object is loaded and the object's soname matches the soname
196   component of one of the specified pairs, then Valgrind will examine
197   all the text symbol names in the object.  If none of them match the
198   symbol name component of that same specification, then the run is
199   aborted, with an error message.
200
201   The purpose of this is to support reliable usage of marked-up
202   libraries.  For example, suppose we have a version of GCC's
203   libgomp.so which has been marked up with annotations to support
204   Helgrind.  It is only too easy and confusing to load the 'wrong'
205   libgomp.so into the application.  So the idea is: add a text symbol
206   in the marked-up library (eg), "annotated_for_helgrind_3_6", and
207   then give the flag
208
209     --require-text-symbol=:*libgomp*so*:annotated_for_helgrind_3_6
210
211   so that when libgomp.so is loaded, we scan the symbol table, and if
212   the symbol isn't present the run is aborted, rather than continuing
213   silently with the un-marked-up library.  Note that you should put
214   the entire flag in quotes to stop shells messing up the * and ?
215   wildcards. */
216extern Int    VG_(clo_n_req_tsyms);
217extern HChar* VG_(clo_req_tsyms)[VG_CLO_MAX_REQ_TSYMS];
218
219/* Track open file descriptors? */
220extern Bool  VG_(clo_track_fds);
221
222/* Should we run __libc_freeres at exit?  Sometimes causes crashes.
223   Default: YES.  Note this is subservient to VG_(needs).libc_freeres;
224   if the latter says False, then the setting of VG_(clo_run_libc_freeres)
225   is ignored.  Ie if a tool says no, I don't want this to run, that
226   cannot be overridden from the command line. */
227extern Bool  VG_(clo_run_libc_freeres);
228
229/* Should we show VEX emulation warnings?  Default: NO */
230extern Bool VG_(clo_show_emwarns);
231
232/* How much does the stack pointer have to change before tools
233   consider a stack switch to have happened?  Default: 2000000 bytes
234   NB: must be host-word-sized to be correct (hence Word). */
235extern Word VG_(clo_max_stackframe);
236/* How large should Valgrind allow the primary thread's guest stack to
237   be? */
238extern Word VG_(clo_main_stacksize);
239
240/* Delay startup to allow GDB to be attached?  Default: NO */
241extern Bool VG_(clo_wait_for_gdb);
242
243/* To what extent should self-checking translations be made?  These
244   are needed to deal with self-modifying code on uncooperative
245   platforms. */
246typedef
247   enum {
248      Vg_SmcNone,  // never generate self-checking translations
249      Vg_SmcStack, // generate s-c-t's for code found in stacks
250                   // (this is the default)
251      Vg_SmcAll,   // make all translations self-checking.
252      Vg_SmcAllNonFile // make all translations derived from
253                   // non-file-backed memory self checking
254   }
255   VgSmc;
256
257/* Describe extent to which self-modifying-code should be
258   auto-detected. */
259extern VgSmc VG_(clo_smc_check);
260
261/* String containing comma-separated names of minor kernel variants,
262   so they can be properly handled by m_syswrap. */
263extern HChar* VG_(clo_kernel_variant);
264
265/* Darwin-specific: automatically run /usr/bin/dsymutil to update
266   .dSYM directories as necessary? */
267extern Bool VG_(clo_dsymutil);
268
269/* Should we trace into this child executable (across execve etc) ?
270   This involves considering --trace-children=,
271   --trace-children-skip=, --trace-children-skip-by-arg=, and the name
272   of the executable.  'child_argv' must not include the name of the
273   executable itself; iow child_argv[0] must be the first arg, if any,
274   for the child. */
275extern Bool VG_(should_we_trace_this_child) ( HChar* child_exe_name,
276                                              HChar** child_argv );
277
278#endif   // __PUB_CORE_OPTIONS_H
279
280/*--------------------------------------------------------------------*/
281/*--- end                                                          ---*/
282/*--------------------------------------------------------------------*/
283