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