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