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
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Copyright (C) 2000-2011 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 */
89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_trace_children);
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* String containing comma-separated patterns for executable names
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   that should not be traced into even when --trace-children=yes */
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern HChar* VG_(clo_trace_children_skip);
93b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* The same as VG_(clo_trace_children), except that these patterns are
94b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   tested against the arguments for child processes, rather than the
95b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   executable name. */
96b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern HChar* VG_(clo_trace_children_skip_by_arg);
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* After a fork, the child's output can become confusingly
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   intermingled with the parent's output.  This is especially
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   problematic when VG_(clo_xml) is True.  Setting
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VG_(clo_child_silent_after_fork) causes children to fall silent
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   after fork() calls.  Although note they become un-silent again
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   after the subsequent exec(). */
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_child_silent_after_fork);
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* If the user specified --log-file=STR and/or --xml-file=STR, these
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   hold STR after expansion of the %p and %q templates. */
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Char* VG_(clo_log_fname_expanded);
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Char* VG_(clo_xml_fname_expanded);
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
110f0cb39bc6abe181a0abdd1f6c778521ae8497277Evgeniy Stepanovextern Char* VG_(clo_log_fname_unexpanded);
111f0cb39bc6abe181a0abdd1f6c778521ae8497277Evgeniy Stepanovextern Char* VG_(clo_xml_fname_unexpanded);
112f0cb39bc6abe181a0abdd1f6c778521ae8497277Evgeniy Stepanov
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Add timestamps to log messages?  default: NO */
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_time_stamp);
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* The file descriptor to read for input.  default: 0 == stdin */
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Int   VG_(clo_input_fd);
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* The number of suppression files specified. */
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Int   VG_(clo_n_suppressions);
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* The names of the suppression files. */
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Char* VG_(clo_suppressions)[VG_CLO_MAX_SFILES];
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* An array of strings harvested from --fullpath-after= flags. */
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Int   VG_(clo_n_fullpath_after);
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Char* VG_(clo_fullpath_after)[VG_CLO_MAX_FULLPATH_AFTER];
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: print generated code?  default: 00000000 ( == NO ) */
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern UChar VG_(clo_trace_flags);
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: do bb profiling?  default: 00000000 ( == NO ) */
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern UChar VG_(clo_profile_flags);
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: if tracing codegen, be quiet until after this bb ( 0 ) */
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Int   VG_(clo_trace_notbelow);
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: print system calls?  default: NO */
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_trace_syscalls);
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: print signal details?  default: NO */
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_trace_signals);
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: print symtab details?  default: NO */
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_trace_symtab);
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: restrict symtab etc details to object name pattern.  Default: "*" */
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern HChar* VG_(clo_trace_symtab_patt);
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: print call-frame-info details?  default: NO */
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_trace_cfi);
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG:  mimic /usr/bin/readelf --syms?  default: NO */
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_debug_dump_syms);
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: mimic /usr/bin/readelf --debug-dump=line?  default: NO */
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_debug_dump_line);
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: mimic  /usr/bin/readelf --debug-dump=frames?  default: NO */
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_debug_dump_frames);
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: print redirection details?  default: NO */
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_trace_redir);
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: print thread scheduling events?  default: NO */
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_trace_sched);
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: do heap profiling?  default: NO */
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_profile_heap);
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DEBUG: display gory details for the k'th most popular error.
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   default: Infinity. */
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Int   VG_(clo_dump_error);
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Engage miscellaneous weird hacks needed for some progs. */
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Char* VG_(clo_sim_hints);
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Show symbols in the form 'name+offset' ?  Default: NO */
162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool VG_(clo_sym_offsets);
163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Read DWARF3 variable info even if tool doesn't ask for it? */
164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool VG_(clo_read_var_info);
165f0cb39bc6abe181a0abdd1f6c778521ae8497277Evgeniy Stepanov
166f0cb39bc6abe181a0abdd1f6c778521ae8497277Evgeniy Stepanov/* Mountpoint for memfs */
167f0cb39bc6abe181a0abdd1f6c778521ae8497277Evgeniy Stepanovextern Char* VG_(clo_memfs_malloc_path);
168f0cb39bc6abe181a0abdd1f6c778521ae8497277Evgeniy Stepanov/* Size of memfs page in Kbytes */
169f0cb39bc6abe181a0abdd1f6c778521ae8497277Evgeniy Stepanovextern Int   VG_(clo_memfs_page_size);
170f0cb39bc6abe181a0abdd1f6c778521ae8497277Evgeniy Stepanov
171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* An array of strings harvested from --require-text-symbol=
173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   flags.
174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Each string specifies a pair: a soname pattern and a text symbol
176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   name pattern, separated by a colon.  The patterns can be written
177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   using the normal "?" and "*" wildcards.  For example:
178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ":*libc.so*:foo?bar".
179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   These flags take effect when reading debuginfo from objects.  If an
181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   object is loaded and the object's soname matches the soname
182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   component of one of the specified pairs, then Valgrind will examine
183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   all the text symbol names in the object.  If none of them match the
184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   symbol name component of that same specification, then the run is
185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   aborted, with an error message.
186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   The purpose of this is to support reliable usage of marked-up
188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   libraries.  For example, suppose we have a version of GCC's
189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   libgomp.so which has been marked up with annotations to support
190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Helgrind.  It is only too easy and confusing to load the 'wrong'
191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   libgomp.so into the application.  So the idea is: add a text symbol
192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   in the marked-up library (eg), "annotated_for_helgrind_3_6", and
193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   then give the flag
194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     --require-text-symbol=:*libgomp*so*:annotated_for_helgrind_3_6
196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   so that when libgomp.so is loaded, we scan the symbol table, and if
198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   the symbol isn't present the run is aborted, rather than continuing
199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   silently with the un-marked-up library.  Note that you should put
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   the entire flag in quotes to stop shells messing up the * and ?
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   wildcards. */
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Int    VG_(clo_n_req_tsyms);
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern HChar* VG_(clo_req_tsyms)[VG_CLO_MAX_REQ_TSYMS];
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Track open file descriptors? */
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_track_fds);
207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Should we run __libc_freeres at exit?  Sometimes causes crashes.
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Default: YES.  Note this is subservient to VG_(needs).libc_freeres;
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if the latter says False, then the setting of VG_(clo_run_libc_freeres)
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   is ignored.  Ie if a tool says no, I don't want this to run, that
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   cannot be overridden from the command line. */
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool  VG_(clo_run_libc_freeres);
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Should we show VEX emulation warnings?  Default: NO */
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool VG_(clo_show_emwarns);
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* How much does the stack pointer have to change before tools
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   consider a stack switch to have happened?  Default: 2000000 bytes
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   NB: must be host-word-sized to be correct (hence Word). */
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Word VG_(clo_max_stackframe);
222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* How large should Valgrind allow the primary thread's guest stack to
223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   be? */
224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Word VG_(clo_main_stacksize);
225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Delay startup to allow GDB to be attached?  Default: NO */
227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool VG_(clo_wait_for_gdb);
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* To what extent should self-checking translations be made?  These
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   are needed to deal with self-modifying code on uncooperative
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   platforms. */
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   enum {
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Vg_SmcNone,  // never generate self-checking translations
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      Vg_SmcStack, // generate s-c-t's for code found in stacks
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                   // (this is the default)
237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      Vg_SmcAll,   // make all translations self-checking.
238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      Vg_SmcAllNonFile // make all translations derived from
239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   // non-file-backed memory self checking
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VgSmc;
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Describe extent to which self-modifying-code should be
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   auto-detected. */
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern VgSmc VG_(clo_smc_check);
246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* String containing comma-separated names of minor kernel variants,
248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   so they can be properly handled by m_syswrap. */
249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern HChar* VG_(clo_kernel_variant);
250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Darwin-specific: automatically run /usr/bin/dsymutil to update
252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   .dSYM directories as necessary? */
253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern Bool VG_(clo_dsymutil);
254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* NaCl nexe to read symbols from. Overrides the filename NaCl reports, if
256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   any. */
257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern Char* VG_(clo_nacl_file);
258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Should we trace into this child executable (across execve etc) ?
260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   This involves considering --trace-children=,
261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   --trace-children-skip=, --trace-children-skip-by-arg=, and the name
262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   of the executable.  'child_argv' must not include the name of the
263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   executable itself; iow child_argv[0] must be the first arg, if any,
264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   for the child. */
265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern Bool VG_(should_we_trace_this_child) ( HChar* child_exe_name,
266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                              HChar** child_argv );
267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif   // __PUB_CORE_OPTIONS_H
269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- end                                                          ---*/
272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
273