Home | History | Annotate | Download | only in xml
      1 <?xml version="1.0"?> <!-- -*- sgml -*- -->
      2 <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
      3   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
      4 [ <!ENTITY % vg-entities SYSTEM "vg-entities.xml"> %vg-entities; ]>
      5 
      6 
      7 <chapter id="manual-core" xreflabel="Valgrind's core">
      8 <title>Using and understanding the Valgrind core</title>
      9 
     10 <para>This chapter describes the Valgrind core services, command-line
     11 options and behaviours.  That means it is relevant regardless of what
     12 particular tool you are using.  The information should be sufficient for you
     13 to make effective day-to-day use of Valgrind.  Advanced topics related to
     14 the Valgrind core are described in <xref linkend="manual-core-adv"/>.
     15 </para>
     16 
     17 <para>
     18 A point of terminology: most references to "Valgrind" in this chapter
     19 refer to the Valgrind core services.  </para>
     20 
     21 
     22 
     23 <sect1 id="manual-core.whatdoes" 
     24        xreflabel="What Valgrind does with your program">
     25 <title>What Valgrind does with your program</title>
     26 
     27 <para>Valgrind is designed to be as non-intrusive as possible. It works
     28 directly with existing executables. You don't need to recompile, relink,
     29 or otherwise modify the program to be checked.</para>
     30 
     31 <para>You invoke Valgrind like this:</para>
     32 <programlisting><![CDATA[
     33 valgrind [valgrind-options] your-prog [your-prog-options]]]></programlisting>
     34 
     35 <para>The most important option is <option>--tool</option> which dictates
     36 which Valgrind tool to run.  For example, if want to run the command
     37 <computeroutput>ls -l</computeroutput> using the memory-checking tool
     38 Memcheck, issue this command:</para>
     39 
     40 <programlisting><![CDATA[
     41 valgrind --tool=memcheck ls -l]]></programlisting>
     42 
     43 <para>However, Memcheck is the default, so if you want to use it you can
     44 omit the <option>--tool</option> option.</para>
     45 
     46 <para>Regardless of which tool is in use, Valgrind takes control of your
     47 program before it starts.  Debugging information is read from the
     48 executable and associated libraries, so that error messages and other
     49 outputs can be phrased in terms of source code locations, when
     50 appropriate.</para>
     51 
     52 <para>Your program is then run on a synthetic CPU provided by the
     53 Valgrind core.  As new code is executed for the first time, the core
     54 hands the code to the selected tool.  The tool adds its own
     55 instrumentation code to this and hands the result back to the core,
     56 which coordinates the continued execution of this instrumented
     57 code.</para>
     58 
     59 <para>The amount of instrumentation code added varies widely between
     60 tools.  At one end of the scale, Memcheck adds code to check every
     61 memory access and every value computed,
     62 making it run 10-50 times slower than natively.
     63 At the other end of the spectrum, the minimal tool, called Nulgrind,
     64 adds no instrumentation at all and causes in total "only" about a 4 times
     65 slowdown.</para>
     66 
     67 <para>Valgrind simulates every single instruction your program executes.
     68 Because of this, the active tool checks, or profiles, not only the code
     69 in your application but also in all supporting dynamically-linked libraries,
     70 including the C library, graphical libraries, and so on.</para>
     71 
     72 <para>If you're using an error-detection tool, Valgrind may
     73 detect errors in system libraries, for example the GNU C or X11
     74 libraries, which you have to use.  You might not be interested in these
     75 errors, since you probably have no control over that code.  Therefore,
     76 Valgrind allows you to selectively suppress errors, by recording them in
     77 a suppressions file which is read when Valgrind starts up.  The build
     78 mechanism selects default suppressions which give reasonable
     79 behaviour for the OS and libraries detected on your machine.
     80 To make it easier to write suppressions, you can use the
     81 <option>--gen-suppressions=yes</option> option.  This tells Valgrind to
     82 print out a suppression for each reported error, which you can then
     83 copy into a suppressions file.</para>
     84 
     85 <para>Different error-checking tools report different kinds of errors.
     86 The suppression mechanism therefore allows you to say which tool or
     87 tool(s) each suppression applies to.</para>
     88 
     89 </sect1>
     90 
     91 
     92 <sect1 id="manual-core.started" xreflabel="Getting started">
     93 <title>Getting started</title>
     94 
     95 <para>First off, consider whether it might be beneficial to recompile
     96 your application and supporting libraries with debugging info enabled
     97 (the <option>-g</option> option).  Without debugging info, the best
     98 Valgrind tools will be able to do is guess which function a particular
     99 piece of code belongs to, which makes both error messages and profiling
    100 output nearly useless.  With <option>-g</option>, you'll get
    101 messages which point directly to the relevant source code lines.</para>
    102 
    103 <para>Another option you might like to consider, if you are working with
    104 C++, is <option>-fno-inline</option>.  That makes it easier to see the
    105 function-call chain, which can help reduce confusion when navigating
    106 around large C++ apps.  For example, debugging
    107 OpenOffice.org with Memcheck is a bit easier when using this option.  You
    108 don't have to do this, but doing so helps Valgrind produce more accurate
    109 and less confusing error reports.  Chances are you're set up like this
    110 already, if you intended to debug your program with GNU GDB, or some
    111 other debugger.</para>
    112 
    113 <para>If you are planning to use Memcheck: On rare
    114 occasions, compiler optimisations (at <option>-O2</option>
    115 and above, and sometimes <option>-O1</option>) have been
    116 observed to generate code which fools Memcheck into wrongly reporting
    117 uninitialised value errors, or missing uninitialised value errors.  We have
    118 looked in detail into fixing this, and unfortunately the result is that
    119 doing so would give a further significant slowdown in what is already a slow
    120 tool.  So the best solution is to turn off optimisation altogether.  Since
    121 this often makes things unmanageably slow, a reasonable compromise is to use
    122 <option>-O</option>.  This gets you the majority of the
    123 benefits of higher optimisation levels whilst keeping relatively small the
    124 chances of false positives or false negatives from Memcheck.  Also, you
    125 should compile your code with <option>-Wall</option> because
    126 it can identify some or all of the problems that Valgrind can miss at the
    127 higher optimisation levels.  (Using <option>-Wall</option>
    128 is also a good idea in general.)  All other tools (as far as we know) are
    129 unaffected by optimisation level, and for profiling tools like Cachegrind it
    130 is better to compile your program at its normal optimisation level.</para>
    131 
    132 <para>Valgrind understands both the older "stabs" debugging format, used
    133 by GCC versions prior to 3.1, and the newer DWARF2/3/4 formats
    134 used by GCC
    135 3.1 and later.  We continue to develop our debug-info readers,
    136 although the majority of effort will naturally enough go into the newer
    137 DWARF readers.</para>
    138 
    139 <para>When you're ready to roll, run Valgrind as described above.
    140 Note that you should run the real
    141 (machine-code) executable here.  If your application is started by, for
    142 example, a shell or Perl script, you'll need to modify it to invoke
    143 Valgrind on the real executables.  Running such scripts directly under
    144 Valgrind will result in you getting error reports pertaining to
    145 <filename>/bin/sh</filename>,
    146 <filename>/usr/bin/perl</filename>, or whatever interpreter
    147 you're using.  This may not be what you want and can be confusing.  You
    148 can force the issue by giving the option
    149 <option>--trace-children=yes</option>, but confusion is still
    150 likely.</para>
    151 
    152 </sect1>
    153 
    154 
    155 <!-- Referenced from both the manual and manpage -->
    156 <sect1 id="&vg-comment-id;" xreflabel="&vg-comment-label;">
    157 <title>The Commentary</title>
    158 
    159 <para>Valgrind tools write a commentary, a stream of text, detailing
    160 error reports and other significant events.  All lines in the commentary
    161 have following form:
    162 
    163 <programlisting><![CDATA[
    164 ==12345== some-message-from-Valgrind]]></programlisting>
    165 </para>
    166 
    167 <para>The <computeroutput>12345</computeroutput> is the process ID.
    168 This scheme makes it easy to distinguish program output from Valgrind
    169 commentary, and also easy to differentiate commentaries from different
    170 processes which have become merged together, for whatever reason.</para>
    171 
    172 <para>By default, Valgrind tools write only essential messages to the
    173 commentary, so as to avoid flooding you with information of secondary
    174 importance.  If you want more information about what is happening,
    175 re-run, passing the <option>-v</option> option to Valgrind.  A second
    176 <option>-v</option> gives yet more detail.
    177 </para>
    178 
    179 <para>You can direct the commentary to three different places:</para>
    180 
    181 <orderedlist>
    182 
    183   <listitem id="manual-core.out2fd" xreflabel="Directing output to fd">
    184     <para>The default: send it to a file descriptor, which is by default
    185     2 (stderr).  So, if you give the core no options, it will write
    186     commentary to the standard error stream.  If you want to send it to
    187     some other file descriptor, for example number 9, you can specify
    188     <option>--log-fd=9</option>.</para>
    189 
    190     <para>This is the simplest and most common arrangement, but can
    191     cause problems when Valgrinding entire trees of processes which
    192     expect specific file descriptors, particularly stdin/stdout/stderr,
    193     to be available for their own use.</para>
    194   </listitem>
    195 
    196   <listitem id="manual-core.out2file" 
    197             xreflabel="Directing output to file"> <para>A less intrusive
    198     option is to write the commentary to a file, which you specify by
    199     <option>--log-file=filename</option>.  There are special format
    200     specifiers that can be used to use a process ID or an environment
    201     variable name in the log file name.  These are useful/necessary if your
    202     program invokes multiple processes (especially for MPI programs).
    203     See the <link linkend="manual-core.basicopts">basic options section</link>
    204     for more details.</para>
    205   </listitem>
    206 
    207   <listitem id="manual-core.out2socket" 
    208             xreflabel="Directing output to network socket"> <para>The
    209     least intrusive option is to send the commentary to a network
    210     socket.  The socket is specified as an IP address and port number
    211     pair, like this: <option>--log-socket=192.168.0.1:12345</option> if
    212     you want to send the output to host IP 192.168.0.1 port 12345
    213     (note: we
    214     have no idea if 12345 is a port of pre-existing significance).  You
    215     can also omit the port number:
    216     <option>--log-socket=192.168.0.1</option>, in which case a default
    217     port of 1500 is used.  This default is defined by the constant
    218     <computeroutput>VG_CLO_DEFAULT_LOGPORT</computeroutput> in the
    219     sources.</para>
    220 
    221     <para>Note, unfortunately, that you have to use an IP address here,
    222     rather than a hostname.</para>
    223 
    224     <para>Writing to a network socket is pointless if you don't
    225     have something listening at the other end.  We provide a simple
    226     listener program,
    227     <computeroutput>valgrind-listener</computeroutput>, which accepts
    228     connections on the specified port and copies whatever it is sent to
    229     stdout.  Probably someone will tell us this is a horrible security
    230     risk.  It seems likely that people will write more sophisticated
    231     listeners in the fullness of time.</para>
    232 
    233     <para><computeroutput>valgrind-listener</computeroutput> can accept
    234     simultaneous connections from up to 50 Valgrinded processes.  In front
    235     of each line of output it prints the current number of active
    236     connections in round brackets.</para>
    237 
    238     <para><computeroutput>valgrind-listener</computeroutput> accepts two
    239     command-line options:</para>
    240     <!-- start of xi:include in the manpage -->
    241     <variablelist id="listener.opts.list">
    242        <varlistentry>
    243          <term><option>-e --exit-at-zero</option></term>
    244          <listitem>
    245            <para>When the number of connected processes falls back to zero,
    246            exit.  Without this, it will run forever, that is, until you
    247            send it Control-C.</para>
    248          </listitem>
    249        </varlistentry>
    250        <varlistentry>
    251         <term><option>portnumber</option></term>
    252         <listitem>
    253           <para>Changes the port it listens on from the default (1500).
    254           The specified port must be in the range 1024 to 65535.
    255           The same restriction applies to port numbers specified by a
    256           <option>--log-socket</option> to Valgrind itself.</para>
    257         </listitem>
    258       </varlistentry>
    259     </variablelist>
    260     <!-- end of xi:include in the manpage -->
    261 
    262     <para>If a Valgrinded process fails to connect to a listener, for
    263     whatever reason (the listener isn't running, invalid or unreachable
    264     host or port, etc), Valgrind switches back to writing the commentary
    265     to stderr.  The same goes for any process which loses an established
    266     connection to a listener.  In other words, killing the listener
    267     doesn't kill the processes sending data to it.</para>
    268   </listitem>
    269 
    270 </orderedlist>
    271 
    272 <para>Here is an important point about the relationship between the
    273 commentary and profiling output from tools.  The commentary contains a
    274 mix of messages from the Valgrind core and the selected tool.  If the
    275 tool reports errors, it will report them to the commentary.  However, if
    276 the tool does profiling, the profile data will be written to a file of
    277 some kind, depending on the tool, and independent of what
    278 <option>--log-*</option> options are in force.  The commentary is
    279 intended to be a low-bandwidth, human-readable channel.  Profiling data,
    280 on the other hand, is usually voluminous and not meaningful without
    281 further processing, which is why we have chosen this arrangement.</para>
    282 
    283 </sect1>
    284 
    285 
    286 <sect1 id="manual-core.report" xreflabel="Reporting of errors">
    287 <title>Reporting of errors</title>
    288 
    289 <para>When an error-checking tool
    290 detects something bad happening in the program, an error
    291 message is written to the commentary.  Here's an example from Memcheck:</para>
    292 
    293 <programlisting><![CDATA[
    294 ==25832== Invalid read of size 4
    295 ==25832==    at 0x8048724: BandMatrix::ReSize(int, int, int) (bogon.cpp:45)
    296 ==25832==    by 0x80487AF: main (bogon.cpp:66)
    297 ==25832==  Address 0xBFFFF74C is not stack'd, malloc'd or free'd]]></programlisting>
    298 
    299 <para>This message says that the program did an illegal 4-byte read of
    300 address 0xBFFFF74C, which, as far as Memcheck can tell, is not a valid
    301 stack address, nor corresponds to any current heap blocks or recently freed
    302 heap blocks.  The read is happening at line 45 of
    303 <filename>bogon.cpp</filename>, called from line 66 of the same file,
    304 etc.  For errors associated with an identified (current or freed) heap block,
    305 for example reading freed memory, Valgrind reports not only the
    306 location where the error happened, but also where the associated heap block
    307 was allocated/freed.</para>
    308 
    309 <para>Valgrind remembers all error reports.  When an error is detected,
    310 it is compared against old reports, to see if it is a duplicate.  If so,
    311 the error is noted, but no further commentary is emitted.  This avoids
    312 you being swamped with bazillions of duplicate error reports.</para>
    313 
    314 <para>If you want to know how many times each error occurred, run with
    315 the <option>-v</option> option.  When execution finishes, all the
    316 reports are printed out, along with, and sorted by, their occurrence
    317 counts.  This makes it easy to see which errors have occurred most
    318 frequently.</para>
    319 
    320 <para>Errors are reported before the associated operation actually
    321 happens.  For example, if you're using Memcheck and your program attempts to
    322 read from address zero, Memcheck will emit a message to this effect, and
    323 your program will then likely die with a segmentation fault.</para>
    324 
    325 <para>In general, you should try and fix errors in the order that they
    326 are reported.  Not doing so can be confusing.  For example, a program
    327 which copies uninitialised values to several memory locations, and later
    328 uses them, will generate several error messages, when run on Memcheck.
    329 The first such error message may well give the most direct clue to the
    330 root cause of the problem.</para>
    331 
    332 <para>The process of detecting duplicate errors is quite an
    333 expensive one and can become a significant performance overhead
    334 if your program generates huge quantities of errors.  To avoid
    335 serious problems, Valgrind will simply stop collecting
    336 errors after 1,000 different errors have been seen, or 10,000,000 errors
    337 in total have been seen.  In this situation you might as well
    338 stop your program and fix it, because Valgrind won't tell you
    339 anything else useful after this.  Note that the 1,000/10,000,000 limits
    340 apply after suppressed errors are removed.  These limits are
    341 defined in <filename>m_errormgr.c</filename> and can be increased
    342 if necessary.</para>
    343 
    344 <para>To avoid this cutoff you can use the
    345 <option>--error-limit=no</option> option.  Then Valgrind will always show
    346 errors, regardless of how many there are.  Use this option carefully,
    347 since it may have a bad effect on performance.</para>
    348 
    349 </sect1>
    350 
    351 
    352 <sect1 id="manual-core.suppress" xreflabel="Suppressing errors">
    353 <title>Suppressing errors</title>
    354 
    355 <para>The error-checking tools detect numerous problems in the system
    356 libraries, such as the C library, 
    357 which come pre-installed with your OS.  You can't easily fix
    358 these, but you don't want to see these errors (and yes, there are many!)
    359 So Valgrind reads a list of errors to suppress at startup.  A default
    360 suppression file is created by the
    361 <computeroutput>./configure</computeroutput> script when the system is
    362 built.</para>
    363 
    364 <para>You can modify and add to the suppressions file at your leisure,
    365 or, better, write your own.  Multiple suppression files are allowed.
    366 This is useful if part of your project contains errors you can't or
    367 don't want to fix, yet you don't want to continuously be reminded of
    368 them.</para>
    369 
    370 <formalpara><title>Note:</title> <para>By far the easiest way to add
    371 suppressions is to use the <option>--gen-suppressions=yes</option> option
    372 described in <xref linkend="manual-core.options"/>.  This generates
    373 suppressions automatically.  For best results,
    374 though, you may want to edit the output
    375     of  <option>--gen-suppressions=yes</option> by hand, in which
    376 case it would be advisable to read through this section.
    377 </para>
    378 </formalpara>
    379 
    380 <para>Each error to be suppressed is described very specifically, to
    381 minimise the possibility that a suppression-directive inadvertently
    382 suppresses a bunch of similar errors which you did want to see.  The
    383 suppression mechanism is designed to allow precise yet flexible
    384 specification of errors to suppress.</para>
    385 
    386 <para>If you use the <option>-v</option> option, at the end of execution,
    387 Valgrind prints out one line for each used suppression, giving the number of times
    388 it got used, its name and the filename and line number where the suppression is
    389 defined. Depending on the suppression kind, the filename and line number are optionally
    390 followed by additional information (such as the number of blocks and bytes suppressed
    391 by a memcheck leak suppression). Here's the suppressions used by a
    392 run of <computeroutput>valgrind -v --tool=memcheck ls -l</computeroutput>:</para>
    393 
    394 <programlisting><![CDATA[
    395 --1610-- used_suppression:      2 dl-hack3-cond-1 /usr/lib/valgrind/default.supp:1234
    396 --1610-- used_suppression:      2 glibc-2.5.x-on-SUSE-10.2-(PPC)-2a /usr/lib/valgrind/default.supp:1234
    397 ]]></programlisting>
    398 
    399 <para>Multiple suppressions files are allowed.  By default, Valgrind
    400 uses <filename>$PREFIX/lib/valgrind/default.supp</filename>.  You can
    401 ask to add suppressions from another file, by specifying
    402 <option>--suppressions=/path/to/file.supp</option>.
    403 </para>
    404 
    405 <para>If you want to understand more about suppressions, look at an
    406 existing suppressions file whilst reading the following documentation.
    407 The file <filename>glibc-2.3.supp</filename>, in the source
    408 distribution, provides some good examples.</para>
    409 
    410 <para>Each suppression has the following components:</para>
    411 
    412 <itemizedlist>
    413 
    414   <listitem>
    415     <para>First line: its name.  This merely gives a handy name to the
    416     suppression, by which it is referred to in the summary of used
    417     suppressions printed out when a program finishes.  It's not
    418     important what the name is; any identifying string will do.</para>
    419   </listitem>
    420 
    421   <listitem>
    422     <para>Second line: name of the tool(s) that the suppression is for
    423     (if more than one, comma-separated), and the name of the suppression
    424     itself, separated by a colon (n.b.: no spaces are allowed), eg:</para>
    425 <programlisting><![CDATA[
    426 tool_name1,tool_name2:suppression_name]]></programlisting>
    427 
    428     <para>Recall that Valgrind is a modular system, in which
    429     different instrumentation tools can observe your program whilst it
    430     is running.  Since different tools detect different kinds of errors,
    431     it is necessary to say which tool(s) the suppression is meaningful
    432     to.</para>
    433 
    434     <para>Tools will complain, at startup, if a tool does not understand
    435     any suppression directed to it.  Tools ignore suppressions which are
    436     not directed to them.  As a result, it is quite practical to put
    437     suppressions for all tools into the same suppression file.</para>
    438   </listitem>
    439 
    440   <listitem>
    441     <para>Next line: a small number of suppression types have extra
    442     information after the second line (eg. the <varname>Param</varname>
    443     suppression for Memcheck)</para>
    444   </listitem>
    445 
    446   <listitem>
    447     <para>Remaining lines: This is the calling context for the error --
    448     the chain of function calls that led to it.  There can be up to 24
    449     of these lines.</para>
    450 
    451     <para>Locations may be names of either shared objects or
    452     functions.  They begin
    453     <computeroutput>obj:</computeroutput> and
    454     <computeroutput>fun:</computeroutput> respectively.  Function and
    455     object names to match against may use the wildcard characters
    456     <computeroutput>*</computeroutput> and
    457     <computeroutput>?</computeroutput>.</para>
    458 
    459     <para><command>Important note: </command> C++ function names must be
    460     <command>mangled</command>.  If you are writing suppressions by
    461     hand, use the <option>--demangle=no</option> option to get the
    462     mangled names in your error messages.  An example of a mangled
    463     C++ name is  <computeroutput>_ZN9QListView4showEv</computeroutput>.
    464     This is the form that the GNU C++ compiler uses internally, and
    465     the form that must be used in suppression files.  The equivalent
    466     demangled name, <computeroutput>QListView::show()</computeroutput>,
    467     is what you see at the C++ source code level.
    468     </para>
    469 
    470     <para>A location line may also be
    471     simply "<computeroutput>...</computeroutput>" (three dots).  This is
    472     a frame-level wildcard, which matches zero or more frames.  Frame
    473     level wildcards are useful because they make it easy to ignore
    474     varying numbers of uninteresting frames in between frames of
    475     interest.  That is often important when writing suppressions which
    476     are intended to be robust against variations in the amount of
    477     function inlining done by compilers.</para>
    478   </listitem>
    479 
    480   <listitem>
    481     <para>Finally, the entire suppression must be between curly
    482     braces. Each brace must be the first character on its own
    483     line.</para>
    484   </listitem>
    485 
    486  </itemizedlist>
    487 
    488 <para>A suppression only suppresses an error when the error matches all
    489 the details in the suppression.  Here's an example:</para>
    490 
    491 <programlisting><![CDATA[
    492 {
    493   __gconv_transform_ascii_internal/__mbrtowc/mbtowc
    494   Memcheck:Value4
    495   fun:__gconv_transform_ascii_internal
    496   fun:__mbr*toc
    497   fun:mbtowc
    498 }]]></programlisting>
    499 
    500 
    501 <para>What it means is: for Memcheck only, suppress a
    502 use-of-uninitialised-value error, when the data size is 4, when it
    503 occurs in the function
    504 <computeroutput>__gconv_transform_ascii_internal</computeroutput>, when
    505 that is called from any function of name matching
    506 <computeroutput>__mbr*toc</computeroutput>, when that is called from
    507 <computeroutput>mbtowc</computeroutput>.  It doesn't apply under any
    508 other circumstances.  The string by which this suppression is identified
    509 to the user is
    510 <computeroutput>__gconv_transform_ascii_internal/__mbrtowc/mbtowc</computeroutput>.</para>
    511 
    512 <para>(See <xref linkend="mc-manual.suppfiles"/> for more details
    513 on the specifics of Memcheck's suppression kinds.)</para>
    514 
    515 <para>Another example, again for the Memcheck tool:</para>
    516 
    517 <programlisting><![CDATA[
    518 {
    519   libX11.so.6.2/libX11.so.6.2/libXaw.so.7.0
    520   Memcheck:Value4
    521   obj:/usr/X11R6/lib/libX11.so.6.2
    522   obj:/usr/X11R6/lib/libX11.so.6.2
    523   obj:/usr/X11R6/lib/libXaw.so.7.0
    524 }]]></programlisting>
    525 
    526 <para>This suppresses any size 4 uninitialised-value error which occurs
    527 anywhere in <filename>libX11.so.6.2</filename>, when called from
    528 anywhere in the same library, when called from anywhere in
    529 <filename>libXaw.so.7.0</filename>.  The inexact specification of
    530 locations is regrettable, but is about all you can hope for, given that
    531 the X11 libraries shipped on the Linux distro on which this example
    532 was made have had their symbol tables removed.</para>
    533 
    534 <para>Although the above two examples do not make this clear, you can
    535 freely mix <computeroutput>obj:</computeroutput> and
    536 <computeroutput>fun:</computeroutput> lines in a suppression.</para>
    537 
    538 <para>Finally, here's an example using three frame-level wildcards:</para>
    539 
    540 <programlisting><![CDATA[
    541 {
    542    a-contrived-example
    543    Memcheck:Leak
    544    fun:malloc
    545    ...
    546    fun:ddd
    547    ...
    548    fun:ccc
    549    ...
    550    fun:main
    551 }
    552 ]]></programlisting>
    553 This suppresses Memcheck memory-leak errors, in the case where
    554 the allocation was done by <computeroutput>main</computeroutput>
    555 calling (though any number of intermediaries, including zero)
    556 <computeroutput>ccc</computeroutput>,
    557 calling onwards via
    558 <computeroutput>ddd</computeroutput> and eventually
    559 to <computeroutput>malloc.</computeroutput>.
    560 </sect1>
    561 
    562 
    563 <sect1 id="manual-core.options" 
    564        xreflabel="Core Command-line Options">
    565 <title>Core Command-line Options</title>
    566 
    567 <para>As mentioned above, Valgrind's core accepts a common set of options.
    568 The tools also accept tool-specific options, which are documented
    569 separately for each tool.</para>
    570 
    571 <para>Valgrind's default settings succeed in giving reasonable behaviour
    572 in most cases.  We group the available options by rough categories.</para>
    573 
    574 <sect2 id="manual-core.toolopts" xreflabel="Tool-selection Option">
    575 <title>Tool-selection Option</title>
    576 
    577 <para id="tool.opts.para">The single most important option.</para>
    578 
    579 <variablelist id="tool.opts.list">
    580 
    581   <varlistentry id="tool_name" xreflabel="--tool">
    582     <term>
    583       <option><![CDATA[--tool=<toolname> [default: memcheck] ]]></option>
    584     </term>
    585     <listitem>
    586       <para>Run the Valgrind tool called <varname>toolname</varname>,
    587       e.g. memcheck, cachegrind, callgrind, helgrind, drd, massif,
    588       lackey, none, exp-sgcheck, exp-bbv, exp-dhat, etc.</para>
    589     </listitem>
    590   </varlistentry>
    591 
    592 </variablelist>
    593 
    594 </sect2>
    595 
    596 
    597 
    598 <sect2 id="manual-core.basicopts" xreflabel="Basic Options">
    599 <title>Basic Options</title>
    600 
    601 <!-- start of xi:include in the manpage -->
    602 <para id="basic.opts.para">These options work with all tools.</para>
    603 
    604 <variablelist id="basic.opts.list">
    605 
    606   <varlistentry id="opt.help" xreflabel="--help">
    607     <term><option>-h --help</option></term>
    608     <listitem>
    609       <para>Show help for all options, both for the core and for the
    610       selected tool.  If the option is repeated it is equivalent to giving
    611       <option>--help-debug</option>.</para>
    612     </listitem>
    613   </varlistentry>
    614 
    615   <varlistentry id="opt.help-debug" xreflabel="--help-debug">
    616     <term><option>--help-debug</option></term>
    617     <listitem>
    618       <para>Same as <option>--help</option>, but also lists debugging
    619       options which usually are only of use to Valgrind's
    620       developers.</para>
    621     </listitem>
    622   </varlistentry>
    623 
    624   <varlistentry id="opt.version" xreflabel="--version">
    625     <term><option>--version</option></term>
    626     <listitem>
    627       <para>Show the version number of the Valgrind core. Tools can have
    628       their own version numbers. There is a scheme in place to ensure
    629       that tools only execute when the core version is one they are
    630       known to work with. This was done to minimise the chances of
    631       strange problems arising from tool-vs-core version
    632       incompatibilities.</para>
    633     </listitem>
    634   </varlistentry>
    635 
    636   <varlistentry id="opt.quiet" xreflabel="--quiet">
    637     <term><option>-q</option>, <option>--quiet</option></term>
    638     <listitem>
    639       <para>Run silently, and only print error messages. Useful if you
    640       are running regression tests or have some other automated test
    641       machinery.</para>
    642     </listitem>
    643   </varlistentry>
    644 
    645   <varlistentry id="opt.verbose" xreflabel="--verbose">
    646     <term><option>-v</option>, <option>--verbose</option></term>
    647     <listitem>
    648       <para>Be more verbose. Gives extra information on various aspects
    649       of your program, such as: the shared objects loaded, the
    650       suppressions used, the progress of the instrumentation and
    651       execution engines, and warnings about unusual behaviour. Repeating
    652       the option increases the verbosity level.</para>
    653     </listitem>
    654   </varlistentry>
    655 
    656   <varlistentry id="opt.trace-children" xreflabel="--trace-children">
    657     <term>
    658       <option><![CDATA[--trace-children=<yes|no> [default: no] ]]></option>
    659     </term>
    660     <listitem>
    661       <para>When enabled, Valgrind will trace into sub-processes
    662       initiated via the <varname>exec</varname> system call.  This is
    663       necessary for multi-process programs.
    664       </para>
    665       <para>Note that Valgrind does trace into the child of a
    666       <varname>fork</varname> (it would be difficult not to, since
    667       <varname>fork</varname> makes an identical copy of a process), so this
    668       option is arguably badly named.  However, most children of
    669       <varname>fork</varname> calls immediately call <varname>exec</varname>
    670       anyway.
    671       </para>
    672     </listitem>
    673   </varlistentry>
    674 
    675   <varlistentry id="opt.trace-children-skip" xreflabel="--trace-children-skip">
    676     <term>
    677       <option><![CDATA[--trace-children-skip=patt1,patt2,... ]]></option>
    678     </term>
    679     <listitem>
    680       <para>This option only has an effect when 
    681         <option>--trace-children=yes</option> is specified.  It allows
    682         for some children to be skipped.  The option takes a comma
    683         separated list of patterns for the names of child executables
    684         that Valgrind should not trace into.  Patterns may include the
    685         metacharacters <computeroutput>?</computeroutput>
    686         and <computeroutput>*</computeroutput>, which have the usual
    687         meaning.</para>
    688       <para>
    689         This can be useful for pruning uninteresting branches from a
    690         tree of processes being run on Valgrind.  But you should be
    691         careful when using it.  When Valgrind skips tracing into an
    692         executable, it doesn't just skip tracing that executable, it
    693         also skips tracing any of that executable's child processes.
    694         In other words, the flag doesn't merely cause tracing to stop
    695         at the specified executables -- it skips tracing of entire
    696         process subtrees rooted at any of the specified
    697         executables.</para>
    698     </listitem>
    699   </varlistentry>
    700 
    701   <varlistentry id="opt.trace-children-skip-by-arg"
    702                 xreflabel="--trace-children-skip-by-arg">
    703     <term>
    704       <option><![CDATA[--trace-children-skip-by-arg=patt1,patt2,... ]]></option>
    705     </term>
    706     <listitem>
    707       <para>This is the same as  
    708         <option>--trace-children-skip</option>, with one difference:
    709         the decision as to whether to trace into a child process is
    710         made by examining the arguments to the child process, rather
    711         than the name of its executable.</para>
    712     </listitem>
    713   </varlistentry>
    714 
    715   <varlistentry id="opt.child-silent-after-fork"
    716                 xreflabel="--child-silent-after-fork">
    717     <term>
    718       <option><![CDATA[--child-silent-after-fork=<yes|no> [default: no] ]]></option>
    719     </term>
    720     <listitem>
    721       <para>When enabled, Valgrind will not show any debugging or
    722       logging output for the child process resulting from
    723       a <varname>fork</varname> call.  This can make the output less
    724       confusing (although more misleading) when dealing with processes
    725       that create children.  It is particularly useful in conjunction
    726       with <varname>--trace-children=</varname>.  Use of this option is also
    727       strongly recommended if you are requesting XML output
    728       (<varname>--xml=yes</varname>), since otherwise the XML from child and
    729       parent may become mixed up, which usually makes it useless.
    730       </para>
    731     </listitem>
    732   </varlistentry>
    733 
    734   <varlistentry id="opt.vgdb" xreflabel="--vgdb">
    735     <term>
    736       <option><![CDATA[--vgdb=<no|yes|full> [default: yes] ]]></option>
    737     </term>
    738     <listitem>
    739       
    740       <para>Valgrind will provide "gdbserver" functionality when
    741       <option>--vgdb=yes</option> or <option>--vgdb=full</option> is
    742       specified.  This allows an external GNU GDB debugger to control
    743       and debug your program when it runs on Valgrind.
    744       <option>--vgdb=full</option> incurs significant performance
    745       overheads, but provides more precise breakpoints and
    746       watchpoints. See <xref linkend="manual-core-adv.gdbserver"/> for
    747       a detailed description.
    748       </para>
    749 
    750       <para> If the embedded gdbserver is enabled but no gdb is
    751       currently being used, the <xref linkend="manual-core-adv.vgdb"/>
    752       command line utility can send "monitor commands" to Valgrind
    753       from a shell.  The Valgrind core provides a set of
    754       <xref linkend="manual-core-adv.valgrind-monitor-commands"/>. A tool
    755       can optionally provide tool specific monitor commands, which are
    756       documented in the tool specific chapter.
    757       </para>
    758 
    759     </listitem>
    760   </varlistentry>
    761 
    762   <varlistentry id="opt.vgdb-error" xreflabel="--vgdb-error">
    763     <term>
    764       <option><![CDATA[--vgdb-error=<number> [default: 999999999] ]]></option>
    765     </term>
    766     <listitem>
    767       <para> Use this option when the Valgrind gdbserver is enabled with
    768       <option>--vgdb=yes</option> or <option>--vgdb=full</option>.
    769       Tools that report errors will wait
    770       for "<computeroutput>number</computeroutput>" errors to be
    771       reported before freezing the program and waiting for you to
    772       connect with GDB.  It follows that a value of zero will cause
    773       the gdbserver to be started before your program is executed.
    774       This is typically used to insert GDB breakpoints before
    775       execution, and also works with tools that do not report
    776       errors, such as Massif.
    777       </para>
    778     </listitem>
    779   </varlistentry>
    780 
    781   <varlistentry id="opt.vgdb-stop-at" xreflabel="--vgdb-stop-at">
    782     <term>
    783       <option><![CDATA[--vgdb-stop-at=<set> [default: none] ]]></option>
    784     </term>
    785     <listitem>
    786       <para> Use this option when the Valgrind gdbserver is enabled with
    787       <option>--vgdb=yes</option> or <option>--vgdb=full</option>.
    788       The Valgrind gdbserver will be invoked for each error after
    789       <option>--vgdb-error</option> have been reported.
    790       You can additionally ask the Valgrind gdbserver to be invoked
    791       for other events, specified in one of the following ways:  </para>
    792       <itemizedlist>
    793         <listitem><para>a comma separated list of one or more of
    794             <option>startup exit valgrindabexit</option>.</para>
    795 
    796           <para>The values <option>startup</option> <option>exit</option>
    797           <option>valgrindabexit</option> respectively indicate to
    798           invoke gdbserver before your program is executed, after the
    799           last instruction of your program, on Valgrind abnormal exit
    800           (e.g. internal error, out of memory, ...).</para>
    801 
    802           <para>Note: <option>startup</option> and
    803           <option>--vgdb-error=0</option> will both cause Valgrind
    804           gdbserver to be invoked before your program is executed. The
    805           <option>--vgdb-error=0</option> will in addition cause your 
    806           program to stop on all subsequent errors.</para>
    807 
    808         </listitem>
    809         
    810         <listitem><para><option>all</option> to specify the complete set.
    811             It is equivalent to
    812             <option>--vgdb-stop-at=startup,exit,valgrindabexit</option>.</para>
    813         </listitem>
    814         
    815         <listitem><para><option>none</option> for the empty set.</para>
    816         </listitem>
    817       </itemizedlist>
    818     </listitem>
    819   </varlistentry>
    820 
    821   <varlistentry id="opt.track-fds" xreflabel="--track-fds">
    822     <term>
    823       <option><![CDATA[--track-fds=<yes|no> [default: no] ]]></option>
    824     </term>
    825     <listitem>
    826       <para>When enabled, Valgrind will print out a list of open file
    827       descriptors on exit or on request, via the gdbserver monitor
    828       command <varname>v.info open_fds</varname>.  Along with each
    829       file descriptor is printed a stack backtrace of where the file
    830       was opened and any details relating to the file descriptor such
    831       as the file name or socket details.</para>
    832     </listitem>
    833   </varlistentry>
    834 
    835   <varlistentry id="opt.time-stamp" xreflabel="--time-stamp">
    836     <term>
    837       <option><![CDATA[--time-stamp=<yes|no> [default: no] ]]></option>
    838     </term>
    839     <listitem>
    840       <para>When enabled, each message is preceded with an indication of
    841       the elapsed wallclock time since startup, expressed as days,
    842       hours, minutes, seconds and milliseconds.</para>
    843     </listitem>
    844   </varlistentry>
    845 
    846   <varlistentry id="opt.log-fd" xreflabel="--log-fd">
    847     <term>
    848       <option><![CDATA[--log-fd=<number> [default: 2, stderr] ]]></option>
    849     </term>
    850     <listitem>
    851       <para>Specifies that Valgrind should send all of its messages to
    852       the specified file descriptor.  The default, 2, is the standard
    853       error channel (stderr).  Note that this may interfere with the
    854       client's own use of stderr, as Valgrind's output will be
    855       interleaved with any output that the client sends to
    856       stderr.</para>
    857     </listitem>
    858   </varlistentry>
    859 
    860   <varlistentry id="opt.log-file" xreflabel="--log-file">
    861     <term>
    862       <option><![CDATA[--log-file=<filename> ]]></option>
    863     </term>
    864     <listitem>
    865       <para>Specifies that Valgrind should send all of its messages to
    866       the specified file.  If the file name is empty, it causes an abort.
    867       There are three special format specifiers that can be used in the file
    868       name.</para>
    869 
    870       <para><option>%p</option> is replaced with the current process ID.
    871       This is very useful for program that invoke multiple processes.
    872       WARNING: If you use <option>--trace-children=yes</option> and your
    873       program invokes multiple processes OR your program forks without
    874       calling exec afterwards, and you don't use this specifier
    875       (or the <option>%q</option> specifier below), the Valgrind output from
    876       all those processes will go into one file, possibly jumbled up, and
    877       possibly incomplete.</para>
    878 
    879       <para><option>%q{FOO}</option> is replaced with the contents of the
    880       environment variable <varname>FOO</varname>.  If the
    881       <option>{FOO}</option> part is malformed, it causes an abort.  This
    882       specifier is rarely needed, but very useful in certain circumstances
    883       (eg. when running MPI programs).  The idea is that you specify a
    884       variable which will be set differently for each process in the job,
    885       for example <computeroutput>BPROC_RANK</computeroutput> or whatever is
    886       applicable in your MPI setup.  If the named environment variable is not
    887       set, it causes an abort.  Note that in some shells, the
    888       <option>{</option> and <option>}</option> characters may need to be
    889       escaped with a backslash.</para>
    890 
    891       <para><option>%%</option> is replaced with <option>%</option>.</para>
    892       
    893       <para>If an <option>%</option> is followed by any other character, it
    894       causes an abort.</para>
    895 
    896       <para>If the file name specifies a relative file name, it is put
    897       in the program's initial working directory : this is the current
    898       directory when the program started its execution after the fork
    899       or after the exec.  If it specifies an absolute file name (ie.
    900       starts with '/') then it is put there.
    901       </para>
    902     </listitem>
    903   </varlistentry>
    904 
    905   <varlistentry id="opt.log-socket" xreflabel="--log-socket">
    906     <term>
    907       <option><![CDATA[--log-socket=<ip-address:port-number> ]]></option>
    908     </term>
    909     <listitem>
    910       <para>Specifies that Valgrind should send all of its messages to
    911       the specified port at the specified IP address.  The port may be
    912       omitted, in which case port 1500 is used.  If a connection cannot
    913       be made to the specified socket, Valgrind falls back to writing
    914       output to the standard error (stderr).  This option is intended to
    915       be used in conjunction with the
    916       <computeroutput>valgrind-listener</computeroutput> program.  For
    917       further details, see 
    918       <link linkend="&vg-comment-id;">the commentary</link>
    919       in the manual.</para>
    920     </listitem>
    921   </varlistentry>
    922 
    923 </variablelist>
    924 <!-- end of xi:include in the manpage -->
    925 
    926 </sect2>
    927 
    928 
    929 <sect2 id="manual-core.erropts" xreflabel="Error-related Options">
    930 <title>Error-related Options</title>
    931 
    932 <!-- start of xi:include in the manpage -->
    933 <para id="error-related.opts.para">These options are used by all tools
    934 that can report errors, e.g. Memcheck, but not Cachegrind.</para>
    935 
    936 <variablelist id="error-related.opts.list">
    937 
    938   <varlistentry id="opt.xml" xreflabel="--xml">
    939     <term>
    940       <option><![CDATA[--xml=<yes|no> [default: no] ]]></option>
    941     </term>
    942     <listitem>
    943       <para>When enabled, the important parts of the output (e.g. tool error
    944       messages) will be in XML format rather than plain text.  Furthermore,
    945       the XML output will be sent to a different output channel than the
    946       plain text output.  Therefore, you also must use one of
    947       <option>--xml-fd</option>, <option>--xml-file</option> or
    948       <option>--xml-socket</option> to specify where the XML is to be sent.
    949       </para>
    950       
    951       <para>Less important messages will still be printed in plain text, but
    952       because the XML output and plain text output are sent to different
    953       output channels (the destination of the plain text output is still
    954       controlled by <option>--log-fd</option>, <option>--log-file</option>
    955       and <option>--log-socket</option>) this should not cause problems.
    956       </para>
    957 
    958       <para>This option is aimed at making life easier for tools that consume
    959       Valgrind's output as input, such as GUI front ends.  Currently this
    960       option works with Memcheck, Helgrind, DRD and SGcheck.  The output
    961       format is specified in the file
    962       <computeroutput>docs/internals/xml-output-protocol4.txt</computeroutput>
    963       in the source tree for Valgrind 3.5.0 or later.</para>
    964 
    965       <para>The recommended options for a GUI to pass, when requesting
    966       XML output, are: <option>--xml=yes</option> to enable XML output,
    967       <option>--xml-file</option> to send the XML output to a (presumably
    968       GUI-selected) file, <option>--log-file</option> to send the plain
    969       text output to a second GUI-selected file,
    970       <option>--child-silent-after-fork=yes</option>, and
    971       <option>-q</option> to restrict the plain text output to critical
    972       error messages created by Valgrind itself.  For example, failure to
    973       read a specified suppressions file counts as a critical error message.
    974       In this way, for a successful run the text output file will be empty.
    975       But if it isn't empty, then it will contain important information
    976       which the GUI user should be made aware
    977       of.</para>
    978     </listitem>
    979   </varlistentry>
    980 
    981   <varlistentry id="opt.xml-fd" xreflabel="--xml-fd">
    982     <term>
    983       <option><![CDATA[--xml-fd=<number> [default: -1, disabled] ]]></option>
    984     </term>
    985     <listitem>
    986       <para>Specifies that Valgrind should send its XML output to the
    987       specified file descriptor.  It must be used in conjunction with
    988       <option>--xml=yes</option>.</para>
    989     </listitem>
    990   </varlistentry>
    991 
    992   <varlistentry id="opt.xml-file" xreflabel="--xml-file">
    993     <term>
    994       <option><![CDATA[--xml-file=<filename> ]]></option>
    995     </term>
    996     <listitem>
    997       <para>Specifies that Valgrind should send its XML output
    998       to the specified file.  It must be used in conjunction with
    999       <option>--xml=yes</option>.  Any <option>%p</option> or
   1000       <option>%q</option> sequences appearing in the filename are expanded
   1001       in exactly the same way as they are for <option>--log-file</option>.
   1002       See the description of <option>--log-file</option> for details.
   1003       </para>
   1004     </listitem>
   1005   </varlistentry>
   1006 
   1007   <varlistentry id="opt.xml-socket" xreflabel="--xml-socket">
   1008     <term>
   1009       <option><![CDATA[--xml-socket=<ip-address:port-number> ]]></option>
   1010     </term>
   1011     <listitem>
   1012       <para>Specifies that Valgrind should send its XML output the
   1013       specified port at the specified IP address.  It must be used in
   1014       conjunction with <option>--xml=yes</option>.  The form of the argument
   1015       is the same as that used by <option>--log-socket</option>.
   1016       See the description of <option>--log-socket</option>
   1017       for further details.</para>
   1018     </listitem>
   1019   </varlistentry>
   1020 
   1021   <varlistentry id="opt.xml-user-comment" xreflabel="--xml-user-comment">
   1022     <term>
   1023       <option><![CDATA[--xml-user-comment=<string> ]]></option>
   1024     </term>
   1025     <listitem>
   1026       <para>Embeds an extra user comment string at the start of the XML
   1027       output.  Only works when <option>--xml=yes</option> is specified;
   1028       ignored otherwise.</para>
   1029     </listitem>
   1030   </varlistentry>
   1031 
   1032   <varlistentry id="opt.demangle" xreflabel="--demangle">
   1033     <term>
   1034       <option><![CDATA[--demangle=<yes|no> [default: yes] ]]></option>
   1035     </term>
   1036     <listitem>
   1037       <para>Enable/disable automatic demangling (decoding) of C++ names.
   1038       Enabled by default.  When enabled, Valgrind will attempt to
   1039       translate encoded C++ names back to something approaching the
   1040       original.  The demangler handles symbols mangled by g++ versions
   1041       2.X, 3.X and 4.X.</para>
   1042 
   1043       <para>An important fact about demangling is that function names
   1044       mentioned in suppressions files should be in their mangled form.
   1045       Valgrind does not demangle function names when searching for
   1046       applicable suppressions, because to do otherwise would make
   1047       suppression file contents dependent on the state of Valgrind's
   1048       demangling machinery, and also slow down suppression matching.</para>
   1049     </listitem>
   1050   </varlistentry>
   1051 
   1052   <varlistentry id="opt.num-callers" xreflabel="--num-callers">
   1053     <term>
   1054       <option><![CDATA[--num-callers=<number> [default: 12] ]]></option>
   1055     </term>
   1056     <listitem>
   1057       <para>Specifies the maximum number of entries shown in stack traces
   1058       that identify program locations.  Note that errors are commoned up
   1059       using only the top four function locations (the place in the current
   1060       function, and that of its three immediate callers).  So this doesn't
   1061       affect the total number of errors reported.</para>
   1062 
   1063       <para>The maximum value for this is 500. Note that higher settings
   1064       will make Valgrind run a bit more slowly and take a bit more
   1065       memory, but can be useful when working with programs with
   1066       deeply-nested call chains.</para>
   1067     </listitem>
   1068   </varlistentry>
   1069 
   1070   <varlistentry id="opt.unw-stack-scan-thresh"
   1071                 xreflabel="--unw-stack-scan-thresh">
   1072     <term>
   1073       <option><![CDATA[--unw-stack-scan-thresh=<number> [default: 0] ]]></option>
   1074     </term>
   1075     <term>
   1076       <option><![CDATA[--unw-stack-scan-frames=<number> [default: 5] ]]></option>
   1077     </term>
   1078     <listitem>
   1079       <para>Stack-scanning support is available only on ARM
   1080       targets.</para>
   1081 
   1082       <para>These flags enable and control stack unwinding by stack
   1083       scanning.  When the normal stack unwinding mechanisms -- usage
   1084       of Dwarf CFI records, and frame-pointer following -- fail, stack
   1085       scanning may be able to recover a stack trace.</para>
   1086 
   1087       <para>Note that stack scanning is an imprecise, heuristic
   1088       mechanism that may give very misleading results, or none at all.
   1089       It should be used only in emergencies, when normal unwinding
   1090       fails, and it is important to nevertheless have stack
   1091       traces.</para>
   1092 
   1093       <para>Stack scanning is a simple technique: the unwinder reads
   1094       words from the stack, and tries to guess which of them might be
   1095       return addresses, by checking to see if they point just after
   1096       ARM or Thumb call instructions.  If so, the word is added to the
   1097       backtrace.</para>
   1098 
   1099       <para>The main danger occurs when a function call returns,
   1100       leaving its return address exposed, and a new function is
   1101       called, but the new function does not overwrite the old address.
   1102       The result of this is that the backtrace may contain entries for
   1103       functions which have already returned, and so be very
   1104       confusing.</para>
   1105 
   1106       <para>A second limitation of this implementation is that it will
   1107       scan only the page (4KB, normally) containing the starting stack
   1108       pointer.  If the stack frames are large, this may result in only
   1109       a few (or not even any) being present in the trace.  Also, if
   1110       you are unlucky and have an initial stack pointer near the end
   1111       of its containing page, the scan may miss all interesting
   1112       frames.</para>
   1113 
   1114       <para>By default stack scanning is disabled.  The normal use
   1115       case is to ask for it when a stack trace would otherwise be very
   1116       short.  So, to enable it,
   1117       use <computeroutput>--unw-stack-scan-thresh=number</computeroutput>.
   1118       This requests Valgrind to try using stack scanning to "extend"
   1119       stack traces which contain fewer
   1120       than <computeroutput>number</computeroutput> frames.</para>
   1121 
   1122       <para>If stack scanning does take place, it will only generate
   1123       at most the number of frames specified
   1124       by <computeroutput>--unw-stack-scan-frames</computeroutput>.
   1125       Typically, stack scanning generates so many garbage entries that
   1126       this value is set to a low value (5) by default.  In no case
   1127       will a stack trace larger than the value specified
   1128       by <computeroutput>--num-callers</computeroutput> be
   1129       created.</para>
   1130     </listitem>
   1131   </varlistentry>
   1132 
   1133   <varlistentry id="opt.error-limit" xreflabel="--error-limit">
   1134     <term>
   1135       <option><![CDATA[--error-limit=<yes|no> [default: yes] ]]></option>
   1136     </term>
   1137     <listitem>
   1138       <para>When enabled, Valgrind stops reporting errors after 10,000,000
   1139       in total, or 1,000 different ones, have been seen.  This is to
   1140       stop the error tracking machinery from becoming a huge performance
   1141       overhead in programs with many errors.</para>
   1142     </listitem>
   1143   </varlistentry>
   1144 
   1145   <varlistentry id="opt.error-exitcode" xreflabel="--error-exitcode">
   1146     <term>
   1147       <option><![CDATA[--error-exitcode=<number> [default: 0] ]]></option>
   1148     </term>
   1149     <listitem>
   1150       <para>Specifies an alternative exit code to return if Valgrind
   1151       reported any errors in the run.  When set to the default value
   1152       (zero), the return value from Valgrind will always be the return 
   1153       value of the process being simulated.  When set to a nonzero value,
   1154       that value is returned instead, if Valgrind detects any errors.
   1155       This is useful for using Valgrind as part of an automated test
   1156       suite, since it makes it easy to detect test cases for which
   1157       Valgrind has reported errors, just by inspecting return codes.</para>
   1158     </listitem>
   1159   </varlistentry>
   1160 
   1161   <varlistentry id="opt.sigill-diagnostics" xreflabel="--sigill-diagnostics">
   1162     <term>
   1163       <option><![CDATA[--sigill-diagnostics=<yes|no> [default: yes] ]]></option>
   1164     </term>
   1165     <listitem>
   1166       <para>Enable/disable printing of illegal instruction diagnostics.
   1167       Enabled by default, but defaults to disabled when
   1168       <option>--quiet</option> is given. The default can always be explicitly
   1169       overridden by giving this option.</para>
   1170 
   1171       <para>When enabled, a warning message will be printed, along with some
   1172       diagnostics, whenever an instruction is encountered that Valgrind
   1173       cannot decode or translate, before the program is given a SIGILL signal.
   1174       Often an illegal instruction indicates a bug in the program or missing
   1175       support for the particular instruction in Valgrind.  But some programs
   1176       do deliberately try to execute an instruction that might be missing
   1177       and trap the SIGILL signal to detect processor features.  Using
   1178       this flag makes it possible to avoid the diagnostic output
   1179       that you would otherwise get in such cases.</para>
   1180     </listitem>
   1181   </varlistentry>
   1182 
   1183   <varlistentry id="opt.show-below-main" xreflabel="--show-below-main">
   1184     <term>
   1185       <option><![CDATA[--show-below-main=<yes|no> [default: no] ]]></option>
   1186     </term>
   1187     <listitem>
   1188       <para>By default, stack traces for errors do not show any
   1189       functions that appear beneath <function>main</function> because
   1190       most of the time it's uninteresting C library stuff and/or
   1191       gobbledygook.  Alternatively, if <function>main</function> is not
   1192       present in the stack trace, stack traces will not show any functions
   1193       below <function>main</function>-like functions such as glibc's
   1194       <function>__libc_start_main</function>.   Furthermore, if
   1195       <function>main</function>-like functions are present in the trace,
   1196       they are normalised as <function>(below main)</function>, in order to
   1197       make the output more deterministic.</para>
   1198       
   1199       <para>If this option is enabled, all stack trace entries will be
   1200       shown and <function>main</function>-like functions will not be
   1201       normalised.</para>
   1202     </listitem>
   1203   </varlistentry>
   1204 
   1205   <varlistentry id="opt.fullpath-after" xreflabel="--fullpath-after">
   1206     <term>
   1207       <option><![CDATA[--fullpath-after=<string>
   1208               [default: don't show source paths] ]]></option>
   1209     </term>
   1210     <listitem>
   1211       <para>By default Valgrind only shows the filenames in stack
   1212       traces, but not full paths to source files.  When using Valgrind
   1213       in large projects where the sources reside in multiple different
   1214       directories, this can be inconvenient.
   1215       <option>--fullpath-after</option> provides a flexible solution
   1216       to this problem.  When this option is present, the path to each
   1217       source file is shown, with the following all-important caveat:
   1218       if <option>string</option> is found in the path, then the path
   1219       up to and including <option>string</option> is omitted, else the
   1220       path is shown unmodified.  Note that <option>string</option> is
   1221       not required to be a prefix of the path.</para>
   1222 
   1223       <para>For example, consider a file named
   1224       <computeroutput>/home/janedoe/blah/src/foo/bar/xyzzy.c</computeroutput>.
   1225       Specifying <option>--fullpath-after=/home/janedoe/blah/src/</option>
   1226       will cause Valgrind to show the name
   1227       as <computeroutput>foo/bar/xyzzy.c</computeroutput>.</para>
   1228 
   1229       <para>Because the string is not required to be a prefix,
   1230       <option>--fullpath-after=src/</option> will produce the same
   1231       output.  This is useful when the path contains arbitrary
   1232       machine-generated characters.  For example, the
   1233       path
   1234       <computeroutput>/my/build/dir/C32A1B47/blah/src/foo/xyzzy</computeroutput>
   1235       can be pruned to <computeroutput>foo/xyzzy</computeroutput>
   1236       using
   1237       <option>--fullpath-after=/blah/src/</option>.</para>
   1238 
   1239       <para>If you simply want to see the full path, just specify an
   1240       empty string: <option>--fullpath-after=</option>.  This isn't a
   1241       special case, merely a logical consequence of the above rules.</para>
   1242 
   1243       <para>Finally, you can use <option>--fullpath-after</option>
   1244       multiple times.  Any appearance of it causes Valgrind to switch
   1245       to producing full paths and applying the above filtering rule.
   1246       Each produced path is compared against all
   1247       the <option>--fullpath-after</option>-specified strings, in the
   1248       order specified.  The first string to match causes the path to
   1249       be truncated as described above.  If none match, the full path
   1250       is shown.  This facilitates chopping off prefixes when the
   1251       sources are drawn from a number of unrelated directories.
   1252       </para>
   1253     </listitem>
   1254   </varlistentry>
   1255 
   1256   <varlistentry id="opt.extra-debuginfo-path" xreflabel="--extra-debuginfo-path">
   1257     <term>
   1258       <option><![CDATA[--extra-debuginfo-path=<path> [default: undefined and unused] ]]></option>
   1259     </term>
   1260     <listitem>
   1261       <para>By default Valgrind searches in several well-known paths
   1262       for debug objects, such
   1263       as <computeroutput>/usr/lib/debug/</computeroutput>.</para>
   1264 
   1265       <para>However, there may be scenarios where you may wish to put
   1266       debug objects at an arbitrary location, such as external storage
   1267       when running Valgrind on a mobile device with limited local
   1268       storage.  Another example might be a situation where you do not
   1269       have permission to install debug object packages on the system
   1270       where you are running Valgrind.</para>
   1271 
   1272       <para>In these scenarios, you may provide an absolute path as an extra,
   1273       final place for Valgrind to search for debug objects by specifying
   1274       <option>--extra-debuginfo-path=/path/to/debug/objects</option>.
   1275       The given path will be prepended to the absolute path name of
   1276       the searched-for object.  For example, if Valgrind is looking
   1277       for the debuginfo
   1278       for <computeroutput>/w/x/y/zz.so</computeroutput>
   1279       and <option>--extra-debuginfo-path=/a/b/c</option> is specified,
   1280       it will look for a debug object at
   1281       <computeroutput>/a/b/c/w/x/y/zz.so</computeroutput>.</para>
   1282 
   1283       <para>This flag should only be specified once.  If it is
   1284       specified multiple times, only the last instance is
   1285       honoured.</para>
   1286     </listitem>
   1287   </varlistentry>
   1288 
   1289   <varlistentry id="opt.debuginfo-server" xreflabel="--debuginfo-server">
   1290     <term>
   1291       <option><![CDATA[--debuginfo-server=ipaddr:port [default: undefined and unused]]]></option>
   1292     </term>
   1293     <listitem>
   1294       <para>This is a new, experimental, feature introduced in version
   1295       3.9.0.</para>
   1296 
   1297       <para>In some scenarios it may be convenient to read debuginfo
   1298       from objects stored on a different machine.  With this flag,
   1299       Valgrind will query a debuginfo server running
   1300       on <computeroutput>ipaddr</computeroutput> and listening on
   1301       port <computeroutput>port</computeroutput>, if it cannot find
   1302       the debuginfo object in the local filesystem.</para>
   1303 
   1304       <para>The debuginfo server must accept TCP connections on
   1305       port <computeroutput>port</computeroutput>.  The debuginfo
   1306       server is contained in the source
   1307       file <computeroutput>auxprogs/valgrind-di-server.c</computeroutput>.
   1308       It will only serve from the directory it is started
   1309       in.  <computeroutput>port</computeroutput> defaults to 1500 in
   1310       both client and server if not specified.</para>
   1311 
   1312       <para>If Valgrind looks for the debuginfo for
   1313       <computeroutput>/w/x/y/zz.so</computeroutput> by using the
   1314       debuginfo server, it will strip the pathname components and
   1315       merely request <computeroutput>zz.so</computeroutput> on the
   1316       server.  That in turn will look only in its current working
   1317       directory for a matching debuginfo object.</para>
   1318 
   1319       <para>The debuginfo data is transmitted in small fragments (8
   1320       KB) as requested by Valgrind.  Each block is compressed using
   1321       LZO to reduce transmission time.  The implementation has been
   1322       tuned for best performance over a single-stage 802.11g (WiFi)
   1323       network link.</para>
   1324 
   1325       <para>Note that checks for matching primary vs debug objects,
   1326       using GNU debuglink CRC scheme, are performed even when using
   1327       the debuginfo server.  To disable such checking, you need to
   1328       also specify
   1329       <computeroutput>--allow-mismatched-debuginfo=yes</computeroutput>.
   1330       </para>
   1331 
   1332       <para>By default the Valgrind build system will
   1333       build <computeroutput>valgrind-di-server</computeroutput> for
   1334       the target platform, which is almost certainly not what you
   1335       want.  So far we have been unable to find out how to get
   1336       automake/autoconf to build it for the build platform.  If
   1337       you want to use it, you will have to recompile it by hand using
   1338       the command shown at the top
   1339       of <computeroutput>auxprogs/valgrind-di-server.c</computeroutput>.</para>
   1340     </listitem>
   1341   </varlistentry>
   1342 
   1343   <varlistentry id="opt.allow-mismatched-debuginfo"
   1344                 xreflabel="--allow-mismatched-debuginfo">
   1345     <term>
   1346       <option><![CDATA[--allow-mismatched-debuginfo=no|yes [no] ]]></option>
   1347     </term>
   1348     <listitem>
   1349       <para>When reading debuginfo from separate debuginfo objects,
   1350       Valgrind will by default check that the main and debuginfo
   1351       objects match, using the GNU debuglink mechanism.  This
   1352       guarantees that it does not read debuginfo from out of date
   1353       debuginfo objects, and also ensures that Valgrind can't crash as
   1354       a result of mismatches.</para>
   1355 
   1356       <para>This check can be overridden using 
   1357       <computeroutput>--allow-mismatched-debuginfo=yes</computeroutput>.
   1358       This may be useful when the debuginfo and main objects have not
   1359       been split in the proper way.  Be careful when using this,
   1360       though: it disables all consistency checking, and Valgrind has
   1361       been observed to crash when the main and debuginfo objects don't
   1362       match.</para>
   1363     </listitem>
   1364   </varlistentry>
   1365 
   1366   <varlistentry id="opt.suppressions" xreflabel="--suppressions">
   1367     <term>
   1368       <option><![CDATA[--suppressions=<filename> [default: $PREFIX/lib/valgrind/default.supp] ]]></option>
   1369     </term>
   1370     <listitem>
   1371       <para>Specifies an extra file from which to read descriptions of
   1372       errors to suppress.  You may use up to 100 extra suppression
   1373       files.</para>
   1374     </listitem>
   1375   </varlistentry>
   1376 
   1377   <varlistentry id="opt.gen-suppressions" xreflabel="--gen-suppressions">
   1378     <term>
   1379       <option><![CDATA[--gen-suppressions=<yes|no|all> [default: no] ]]></option>
   1380     </term>
   1381     <listitem>
   1382       <para>When set to <varname>yes</varname>, Valgrind will pause
   1383       after every error shown and print the line:
   1384       <literallayout><computeroutput>    ---- Print suppression ? --- [Return/N/n/Y/y/C/c] ----</computeroutput></literallayout>
   1385 
   1386       The prompt's behaviour is the same as for the
   1387       <option>--db-attach</option> option (see below).</para>
   1388 
   1389       <para>If you choose to, Valgrind will print out a suppression for
   1390       this error.  You can then cut and paste it into a suppression file
   1391       if you don't want to hear about the error in the future.</para>
   1392 
   1393       <para>When set to <varname>all</varname>, Valgrind will print a
   1394       suppression for every reported error, without querying the
   1395       user.</para>
   1396 
   1397       <para>This option is particularly useful with C++ programs, as it
   1398       prints out the suppressions with mangled names, as
   1399       required.</para>
   1400 
   1401       <para>Note that the suppressions printed are as specific as
   1402       possible.  You may want to common up similar ones, by adding
   1403       wildcards to function names, and by using frame-level wildcards.
   1404       The wildcarding facilities are powerful yet flexible, and with a
   1405       bit of careful editing, you may be able to suppress a whole
   1406       family of related errors with only a few suppressions.  
   1407       <!-- commented out because it causes broken links in the man page
   1408       For details on how to do this, see
   1409       <xref linkend="manual-core.suppress"/>.
   1410       -->
   1411       </para>
   1412 
   1413       <para>Sometimes two different errors
   1414       are suppressed by the same suppression, in which case Valgrind
   1415       will output the suppression more than once, but you only need to
   1416       have one copy in your suppression file (but having more than one
   1417       won't cause problems).  Also, the suppression name is given as
   1418       <computeroutput>&lt;insert a suppression name
   1419       here&gt;</computeroutput>; the name doesn't really matter, it's
   1420       only used with the <option>-v</option> option which prints out all
   1421       used suppression records.</para>
   1422     </listitem>
   1423   </varlistentry>
   1424 
   1425   <varlistentry id="opt.db-attach" xreflabel="--db-attach">
   1426     <term>
   1427       <option><![CDATA[--db-attach=<yes|no> [default: no] ]]></option>
   1428     </term>
   1429     <listitem>
   1430       <para>When enabled, Valgrind will pause after every error shown
   1431       and print the line:
   1432       <literallayout><computeroutput>    ---- Attach to debugger ? --- [Return/N/n/Y/y/C/c] ----</computeroutput></literallayout>
   1433 
   1434       Pressing <varname>Ret</varname>, or <varname>N Ret</varname> or
   1435       <varname>n Ret</varname>, causes Valgrind not to start a debugger
   1436       for this error.</para>
   1437 
   1438       <para>Pressing <varname>Y Ret</varname> or
   1439       <varname>y Ret</varname> causes Valgrind to start a debugger for
   1440       the program at this point. When you have finished with the
   1441       debugger, quit from it, and the program will continue. Trying to
   1442       continue from inside the debugger doesn't work.</para>
   1443 
   1444       <para>
   1445       Note: if you use GDB, more powerful debugging support is
   1446       provided by the <option>--vgdb=</option> <varname>yes</varname>
   1447       or <varname>full</varname> value.  This activates Valgrind's
   1448       internal gdbserver, which provides more-or-less full GDB-style
   1449       control of the application: insertion of breakpoints, continuing 
   1450       from inside GDB, inferior function calls, and much more.
   1451       </para> 
   1452 
   1453       <para><varname>C Ret</varname> or <varname>c Ret</varname> causes
   1454       Valgrind not to start a debugger, and not to ask again.</para>
   1455     </listitem>
   1456   </varlistentry>
   1457 
   1458   <varlistentry id="opt.db-command" xreflabel="--db-command">
   1459     <term>
   1460       <option><![CDATA[--db-command=<command> [default: gdb -nw %f %p] ]]></option>
   1461     </term>
   1462     <listitem>
   1463       <para>Specify the debugger to use with the
   1464       <option>--db-attach</option> command. The default debugger is
   1465       GDB. This option is a template that is expanded by Valgrind at
   1466       runtime.  <literal>%f</literal> is replaced with the executable's
   1467       file name and <literal>%p</literal> is replaced by the process ID
   1468       of the executable.</para>
   1469 
   1470       <para>This specifies how Valgrind will invoke the debugger.  By
   1471       default it will use whatever GDB is detected at build time, which
   1472       is usually <computeroutput>/usr/bin/gdb</computeroutput>.  Using
   1473       this command, you can specify some alternative command to invoke
   1474       the debugger you want to use.</para>
   1475 
   1476       <para>The command string given can include one or instances of the
   1477       <literal>%p</literal> and <literal>%f</literal> expansions. Each
   1478       instance of <literal>%p</literal> expands to the PID of the
   1479       process to be debugged and each instance of <literal>%f</literal>
   1480       expands to the path to the executable for the process to be
   1481       debugged.</para>
   1482 
   1483       <para>Since <computeroutput>&lt;command&gt;</computeroutput> is likely
   1484       to contain spaces, you will need to put this entire option in
   1485       quotes to ensure it is correctly handled by the shell.</para>
   1486     </listitem>
   1487   </varlistentry>
   1488 
   1489   <varlistentry id="opt.input-fd" xreflabel="--input-fd">
   1490     <term>
   1491       <option><![CDATA[--input-fd=<number> [default: 0, stdin] ]]></option>
   1492     </term>
   1493     <listitem>
   1494       <para>When using <option>--db-attach=yes</option> or
   1495       <option>--gen-suppressions=yes</option>, Valgrind will stop so as
   1496       to read keyboard input from you when each error occurs.  By
   1497       default it reads from the standard input (stdin), which is
   1498       problematic for programs which close stdin.  This option allows
   1499       you to specify an alternative file descriptor from which to read
   1500       input.</para>
   1501     </listitem>
   1502   </varlistentry>
   1503 
   1504   <varlistentry id="opt.dsymutil" xreflabel="--dsymutil">
   1505     <term>
   1506       <option><![CDATA[--dsymutil=no|yes [no] ]]></option>
   1507     </term>
   1508     <listitem>
   1509       <para>This option is only relevant when running Valgrind on
   1510       Mac OS X.</para>
   1511 
   1512       <para>Mac OS X uses a deferred debug information (debuginfo)
   1513       linking scheme.  When object files containing debuginfo are
   1514       linked into a <computeroutput>.dylib</computeroutput> or an
   1515       executable, the debuginfo is not copied into the final file.
   1516       Instead, the debuginfo must be linked manually by
   1517       running <computeroutput>dsymutil</computeroutput>, a
   1518       system-provided utility, on the executable
   1519       or <computeroutput>.dylib</computeroutput>.  The resulting
   1520       combined debuginfo is placed in a directory alongside the
   1521       executable or <computeroutput>.dylib</computeroutput>, but with
   1522       the extension <computeroutput>.dSYM</computeroutput>.</para>
   1523 
   1524       <para>With <option>--dsymutil=no</option>, Valgrind
   1525       will detect cases where the
   1526       <computeroutput>.dSYM</computeroutput> directory is either
   1527       missing, or is present but does not appear to match the
   1528       associated executable or <computeroutput>.dylib</computeroutput>,
   1529       most likely because it is out of date.  In these cases, Valgrind
   1530       will print a warning message but take no further action.</para>
   1531 
   1532       <para>With <option>--dsymutil=yes</option>, Valgrind
   1533       will, in such cases, automatically
   1534       run <computeroutput>dsymutil</computeroutput> as necessary to
   1535       bring the debuginfo up to date.  For all practical purposes, if
   1536       you always use <option>--dsymutil=yes</option>, then
   1537       there is never any need to
   1538       run <computeroutput>dsymutil</computeroutput> manually or as part
   1539       of your applications's build system, since Valgrind will run it
   1540       as necessary.</para>
   1541 
   1542       <para>Valgrind will not attempt to
   1543       run <computeroutput>dsymutil</computeroutput> on any 
   1544       executable or library in
   1545       <computeroutput>/usr/</computeroutput>,
   1546       <computeroutput>/bin/</computeroutput>,
   1547       <computeroutput>/sbin/</computeroutput>,
   1548       <computeroutput>/opt/</computeroutput>,
   1549       <computeroutput>/sw/</computeroutput>,
   1550       <computeroutput>/System/</computeroutput>,
   1551       <computeroutput>/Library/</computeroutput> or
   1552       <computeroutput>/Applications/</computeroutput>
   1553       since <computeroutput>dsymutil</computeroutput> will always fail
   1554       in such situations.  It fails both because the debuginfo for
   1555       such pre-installed system components is not available anywhere,
   1556       and also because it would require write privileges in those
   1557       directories.</para>
   1558 
   1559       <para>Be careful when
   1560       using <option>--dsymutil=yes</option>, since it will
   1561       cause pre-existing <computeroutput>.dSYM</computeroutput>
   1562       directories to be silently deleted and re-created.  Also note that
   1563       <computeroutput>dsymutil</computeroutput> is quite slow, sometimes
   1564       excessively so.</para>
   1565     </listitem>
   1566   </varlistentry>
   1567 
   1568   <varlistentry id="opt.max-stackframe" xreflabel="--max-stackframe">
   1569     <term>
   1570       <option><![CDATA[--max-stackframe=<number> [default: 2000000] ]]></option>
   1571     </term>
   1572     <listitem>
   1573       <para>The maximum size of a stack frame.  If the stack pointer moves by
   1574       more than this amount then Valgrind will assume that
   1575       the program is switching to a different stack.</para>
   1576 
   1577       <para>You may need to use this option if your program has large
   1578       stack-allocated arrays.  Valgrind keeps track of your program's
   1579       stack pointer.  If it changes by more than the threshold amount,
   1580       Valgrind assumes your program is switching to a different stack,
   1581       and Memcheck behaves differently than it would for a stack pointer
   1582       change smaller than the threshold.  Usually this heuristic works
   1583       well.  However, if your program allocates large structures on the
   1584       stack, this heuristic will be fooled, and Memcheck will
   1585       subsequently report large numbers of invalid stack accesses.  This
   1586       option allows you to change the threshold to a different
   1587       value.</para>
   1588 
   1589       <para>You should only consider use of this option if Valgrind's
   1590       debug output directs you to do so.  In that case it will tell you
   1591       the new threshold you should specify.</para>
   1592 
   1593       <para>In general, allocating large structures on the stack is a
   1594       bad idea, because you can easily run out of stack space,
   1595       especially on systems with limited memory or which expect to
   1596       support large numbers of threads each with a small stack, and also
   1597       because the error checking performed by Memcheck is more effective
   1598       for heap-allocated data than for stack-allocated data.  If you
   1599       have to use this option, you may wish to consider rewriting your
   1600       code to allocate on the heap rather than on the stack.</para>
   1601     </listitem>
   1602   </varlistentry>
   1603 
   1604   <varlistentry id="opt.main-stacksize" xreflabel="--main-stacksize">
   1605     <term>
   1606       <option><![CDATA[--main-stacksize=<number>
   1607                [default: use current 'ulimit' value] ]]></option>
   1608     </term>
   1609     <listitem>
   1610       <para>Specifies the size of the main thread's stack.</para>
   1611 
   1612       <para>To simplify its memory management, Valgrind reserves all
   1613       required space for the main thread's stack at startup.  That
   1614       means it needs to know the required stack size at
   1615       startup.</para>
   1616 
   1617       <para>By default, Valgrind uses the current "ulimit" value for
   1618       the stack size, or 16 MB, whichever is lower.  In many cases
   1619       this gives a stack size in the range 8 to 16 MB, which almost
   1620       never overflows for most applications.</para>
   1621 
   1622       <para>If you need a larger total stack size,
   1623       use <option>--main-stacksize</option> to specify it.  Only set
   1624       it as high as you need, since reserving far more space than you
   1625       need (that is, hundreds of megabytes more than you need)
   1626       constrains Valgrind's memory allocators and may reduce the total
   1627       amount of memory that Valgrind can use.  This is only really of
   1628       significance on 32-bit machines.</para>
   1629 
   1630       <para>On Linux, you may request a stack of size up to 2GB.
   1631       Valgrind will stop with a diagnostic message if the stack cannot
   1632       be allocated.</para>
   1633 
   1634       <para><option>--main-stacksize</option> only affects the stack
   1635       size for the program's initial thread.  It has no bearing on the
   1636       size of thread stacks, as Valgrind does not allocate
   1637       those.</para>
   1638 
   1639       <para>You may need to use both <option>--main-stacksize</option>
   1640       and <option>--max-stackframe</option> together.  It is important
   1641       to understand that <option>--main-stacksize</option> sets the
   1642       maximum total stack size,
   1643       whilst <option>--max-stackframe</option> specifies the largest
   1644       size of any one stack frame.  You will have to work out
   1645       the <option>--main-stacksize</option> value for yourself
   1646       (usually, if your applications segfaults).  But Valgrind will
   1647       tell you the needed <option>--max-stackframe</option> size, if
   1648       necessary.</para>
   1649 
   1650       <para>As discussed further in the description
   1651       of <option>--max-stackframe</option>, a requirement for a large
   1652       stack is a sign of potential portability problems.  You are best
   1653       advised to place all large data in heap-allocated memory.</para>
   1654     </listitem>
   1655   </varlistentry>
   1656 
   1657 </variablelist>
   1658 <!-- end of xi:include in the manpage -->
   1659 
   1660 </sect2>
   1661 
   1662 
   1663 <sect2 id="manual-core.mallocopts" xreflabel="malloc-related Options">
   1664 <title>malloc-related Options</title>
   1665 
   1666 <!-- start of xi:include in the manpage -->
   1667 <para id="malloc-related.opts.para">For tools that use their own version of
   1668 <computeroutput>malloc</computeroutput> (e.g. Memcheck,
   1669 Massif, Helgrind, DRD), the following options apply.</para>
   1670 
   1671 <variablelist id="malloc-related.opts.list">
   1672 
   1673   <varlistentry id="opt.alignment" xreflabel="--alignment">
   1674     <term>
   1675       <option><![CDATA[--alignment=<number> [default: 8 or 16, depending on the platform] ]]></option>
   1676     </term>
   1677     <listitem>
   1678       <para>By default Valgrind's <function>malloc</function>,
   1679       <function>realloc</function>, etc, return a block whose starting
   1680       address is 8-byte aligned or 16-byte aligned (the value depends on the
   1681       platform and matches the platform default).  This option allows you to
   1682       specify a different alignment.  The supplied value must be greater
   1683       than or equal to the default, less than or equal to 4096, and must be
   1684       a power of two.</para>
   1685     </listitem>
   1686   </varlistentry>
   1687 
   1688   <varlistentry id="opt.redzone-size" xreflabel="--redzone-size">
   1689     <term>
   1690       <option><![CDATA[--redzone-size=<number> [default: depends on the tool] ]]></option>
   1691     </term>
   1692     <listitem>
   1693       <para> Valgrind's <function>malloc, realloc,</function> etc, add
   1694       padding blocks before and after each heap block allocated by the
   1695       program being run. Such padding blocks are called redzones.  The
   1696       default value for the redzone size depends on the tool.  For
   1697       example, Memcheck adds and protects a minimum of 16 bytes before
   1698       and after each block allocated by the client.  This allows it to
   1699       detect block underruns or overruns of up to 16 bytes.
   1700       </para>
   1701       <para>Increasing the redzone size makes it possible to detect
   1702       overruns of larger distances, but increases the amount of memory
   1703       used by Valgrind.  Decreasing the redzone size will reduce the
   1704       memory needed by Valgrind but also reduces the chances of
   1705       detecting over/underruns, so is not recommended.</para>
   1706     </listitem>
   1707   </varlistentry>
   1708 
   1709 </variablelist>
   1710 <!-- end of xi:include in the manpage -->
   1711 
   1712 </sect2>
   1713 
   1714 
   1715 <sect2 id="manual-core.rareopts" xreflabel="Uncommon Options">
   1716 <title>Uncommon Options</title>
   1717 
   1718 <!-- start of xi:include in the manpage -->
   1719 <para id="uncommon.opts.para">These options apply to all tools, as they
   1720 affect certain obscure workings of the Valgrind core.  Most people won't
   1721 need to use them.</para>
   1722 
   1723 <variablelist id="uncommon.opts.list">
   1724 
   1725   <varlistentry id="opt.smc-check" xreflabel="--smc-check">
   1726     <term>
   1727       <option><![CDATA[--smc-check=<none|stack|all|all-non-file> [default: stack] ]]></option>
   1728     </term>
   1729     <listitem>
   1730       <para>This option controls Valgrind's detection of self-modifying
   1731       code.  If no checking is done, if a program executes some code, then
   1732       overwrites it with new code, and executes the new code, Valgrind will
   1733       continue to execute the translations it made for the old code.  This
   1734       will likely lead to incorrect behaviour and/or crashes.</para>
   1735       
   1736       <para>Valgrind has four levels of self-modifying code detection:
   1737       no detection, detect self-modifying code on the stack (which is used by
   1738       GCC to implement nested functions), detect self-modifying code
   1739       everywhere, and detect self-modifying code everywhere except in
   1740       file-backed mappings.
   1741 
   1742       Note that the default option will catch the vast majority
   1743       of cases.  The main case it will not catch is programs such as JIT
   1744       compilers that dynamically generate code <emphasis>and</emphasis>
   1745       subsequently overwrite part or all of it.  Running with
   1746       <varname>all</varname> will slow Valgrind down noticeably.
   1747       Running with
   1748       <varname>none</varname> will rarely speed things up, since very little
   1749       code gets put on the stack for most programs.  The
   1750       <function>VALGRIND_DISCARD_TRANSLATIONS</function> client
   1751       request is an alternative to <option>--smc-check=all</option>
   1752       that requires more programmer effort but allows Valgrind to run
   1753       your program faster, by telling it precisely when translations
   1754       need to be re-made.
   1755       <!-- commented out because it causes broken links in the man page
   1756       ;  see <xref
   1757       linkend="manual-core-adv.clientreq"/> for more details.
   1758       -->
   1759       </para>
   1760 
   1761       <para><option>--smc-check=all-non-file</option> provides a
   1762       cheaper but more limited version
   1763       of <option>--smc-check=all</option>.  It adds checks to any
   1764       translations that do not originate from file-backed memory
   1765       mappings.  Typical applications that generate code, for example
   1766       JITs in web browsers, generate code into anonymous mmaped areas,
   1767       whereas the "fixed" code of the browser always lives in
   1768       file-backed mappings.  <option>--smc-check=all-non-file</option>
   1769       takes advantage of this observation, limiting the overhead of
   1770       checking to code which is likely to be JIT generated.</para>
   1771 
   1772       <para>Some architectures (including ppc32, ppc64, ARM and MIPS)
   1773       require programs which create code at runtime to flush the
   1774       instruction cache in between code generation and first use.
   1775       Valgrind observes and honours such instructions.  Hence, on
   1776       ppc32/Linux, ppc64/Linux and ARM/Linux, Valgrind always provides
   1777       complete, transparent support for self-modifying code.  It is
   1778       only on platforms such as x86/Linux, AMD64/Linux, x86/Darwin and
   1779       AMD64/Darwin that you need to use this option.</para>
   1780     </listitem>
   1781   </varlistentry>
   1782 
   1783   <varlistentry id="opt.read-var-info" xreflabel="--read-var-info">
   1784     <term>
   1785       <option><![CDATA[--read-var-info=<yes|no> [default: no] ]]></option>
   1786     </term>
   1787     <listitem>
   1788       <para>When enabled, Valgrind will read information about
   1789       variable types and locations from DWARF3 debug info.
   1790       This slows Valgrind down and makes it use more memory, but for
   1791       the tools that can take advantage of it (Memcheck, Helgrind,
   1792       DRD) it can result in more precise error messages.  For example,
   1793       here are some standard errors issued by Memcheck:</para>
   1794 <programlisting><![CDATA[
   1795 ==15516== Uninitialised byte(s) found during client check request
   1796 ==15516==    at 0x400633: croak (varinfo1.c:28)
   1797 ==15516==    by 0x4006B2: main (varinfo1.c:55)
   1798 ==15516==  Address 0x60103b is 7 bytes inside data symbol "global_i2"
   1799 ==15516== 
   1800 ==15516== Uninitialised byte(s) found during client check request
   1801 ==15516==    at 0x400633: croak (varinfo1.c:28)
   1802 ==15516==    by 0x4006BC: main (varinfo1.c:56)
   1803 ==15516==  Address 0x7fefffefc is on thread 1's stack]]></programlisting>
   1804 
   1805       <para>And here are the same errors with
   1806       <option>--read-var-info=yes</option>:</para>
   1807 
   1808 <programlisting><![CDATA[
   1809 ==15522== Uninitialised byte(s) found during client check request
   1810 ==15522==    at 0x400633: croak (varinfo1.c:28)
   1811 ==15522==    by 0x4006B2: main (varinfo1.c:55)
   1812 ==15522==  Location 0x60103b is 0 bytes inside global_i2[7],
   1813 ==15522==  a global variable declared at varinfo1.c:41
   1814 ==15522== 
   1815 ==15522== Uninitialised byte(s) found during client check request
   1816 ==15522==    at 0x400633: croak (varinfo1.c:28)
   1817 ==15522==    by 0x4006BC: main (varinfo1.c:56)
   1818 ==15522==  Location 0x7fefffefc is 0 bytes inside local var "local"
   1819 ==15522==  declared at varinfo1.c:46, in frame #1 of thread 1]]></programlisting>
   1820     </listitem>
   1821   </varlistentry>
   1822 
   1823   <varlistentry id="opt.vgdb-poll" xreflabel="--vgdb-poll">
   1824     <term>
   1825       <option><![CDATA[--vgdb-poll=<number> [default: 5000] ]]></option>
   1826     </term>
   1827     <listitem>
   1828       <para> As part of its main loop, the Valgrind scheduler will
   1829       poll to check if some activity (such as an external command or
   1830       some input from a gdb) has to be handled by gdbserver.  This
   1831       activity poll will be done after having run the given number of
   1832       basic blocks (or slightly more than the given number of basic
   1833       blocks). This poll is quite cheap so the default value is set
   1834       relatively low. You might further decrease this value if vgdb
   1835       cannot use ptrace system call to interrupt Valgrind if all
   1836       threads are (most of the time) blocked in a system call.
   1837       </para>
   1838     </listitem>
   1839   </varlistentry>
   1840 
   1841   <varlistentry id="opt.vgdb-shadow-registers" xreflabel="--vgdb-shadow-registers">
   1842     <term>
   1843       <option><![CDATA[--vgdb-shadow-registers=no|yes [default: no] ]]></option>
   1844     </term>
   1845     <listitem>
   1846       <para> When activated, gdbserver will expose the Valgrind shadow registers
   1847       to GDB. With this, the value of the Valgrind shadow registers can be examined
   1848       or changed using GDB. Exposing shadow registers only works with GDB version
   1849       7.1 or later.
   1850       </para>
   1851     </listitem>
   1852   </varlistentry>
   1853 
   1854   <varlistentry id="opt.vgdb-prefix" xreflabel="--vgdb-prefix">
   1855     <term>
   1856       <option><![CDATA[--vgdb-prefix=<prefix> [default: /tmp/vgdb-pipe] ]]></option>
   1857     </term>
   1858     <listitem>
   1859       <para> To communicate with gdb/vgdb, the Valgrind gdbserver
   1860       creates 3 files (2 named FIFOs and a mmap shared memory
   1861       file). The prefix option controls the directory and prefix for
   1862       the creation of these files.
   1863       </para>
   1864     </listitem>
   1865   </varlistentry>
   1866 
   1867   <varlistentry id="opt.run-libc-freeres" xreflabel="--run-libc-freeres">
   1868     <term>
   1869       <option><![CDATA[--run-libc-freeres=<yes|no> [default: yes] ]]></option>
   1870     </term>
   1871     <listitem>
   1872       <para>This option is only relevant when running Valgrind on Linux.</para>
   1873 
   1874       <para>The GNU C library (<function>libc.so</function>), which is
   1875       used by all programs, may allocate memory for its own uses.
   1876       Usually it doesn't bother to free that memory when the program
   1877       ends&mdash;there would be no point, since the Linux kernel reclaims
   1878       all process resources when a process exits anyway, so it would
   1879       just slow things down.</para>
   1880 
   1881       <para>The glibc authors realised that this behaviour causes leak
   1882       checkers, such as Valgrind, to falsely report leaks in glibc, when
   1883       a leak check is done at exit.  In order to avoid this, they
   1884       provided a routine called <function>__libc_freeres</function>
   1885       specifically to make glibc release all memory it has allocated.
   1886       Memcheck therefore tries to run
   1887       <function>__libc_freeres</function> at exit.</para>
   1888 
   1889       <para>Unfortunately, in some very old versions of glibc,
   1890       <function>__libc_freeres</function> is sufficiently buggy to cause
   1891       segmentation faults.  This was particularly noticeable on Red Hat
   1892       7.1.  So this option is provided in order to inhibit the run of
   1893       <function>__libc_freeres</function>.  If your program seems to run
   1894       fine on Valgrind, but segfaults at exit, you may find that
   1895       <option>--run-libc-freeres=no</option> fixes that, although at the
   1896       cost of possibly falsely reporting space leaks in
   1897       <filename>libc.so</filename>.</para>
   1898     </listitem>
   1899   </varlistentry>
   1900 
   1901   <varlistentry id="opt.sim-hints" xreflabel="--sim-hints">
   1902     <term>
   1903       <option><![CDATA[--sim-hints=hint1,hint2,... ]]></option>
   1904     </term>
   1905     <listitem>
   1906       <para>Pass miscellaneous hints to Valgrind which slightly modify
   1907       the simulated behaviour in nonstandard or dangerous ways, possibly
   1908       to help the simulation of strange features.  By default no hints
   1909       are enabled.  Use with caution!  Currently known hints are:</para>
   1910       <itemizedlist>
   1911         <listitem>
   1912           <para><option>lax-ioctls: </option> Be very lax about ioctl
   1913           handling; the only assumption is that the size is
   1914           correct. Doesn't require the full buffer to be initialized
   1915           when writing.  Without this, using some device drivers with a
   1916           large number of strange ioctl commands becomes very
   1917           tiresome.</para>
   1918         </listitem>
   1919         <listitem>
   1920           <para><option>enable-outer: </option> Enable some special
   1921           magic needed when the program being run is itself
   1922           Valgrind.</para>
   1923         </listitem>
   1924         <listitem>
   1925           <para><option>no-inner-prefix: </option> Disable printing
   1926           a prefix <option>&gt;</option> in front of each stdout or
   1927           stderr output line in an inner Valgrind being run by an
   1928           outer Valgrind. This is useful when running Valgrind
   1929           regression tests in an outer/inner setup. Note that the
   1930           prefix <option>&gt;</option> will always be printed in
   1931           front of the inner debug logging lines.</para>
   1932         </listitem>
   1933         <listitem>
   1934           <para><option>fuse-compatible: </option> Enable special
   1935             handling for certain system calls that may block in a FUSE
   1936             file-system.  This may be necessary when running Valgrind
   1937             on a multi-threaded program that uses one thread to manage
   1938             a FUSE file-system and another thread to access that
   1939             file-system.
   1940           </para>
   1941         </listitem>
   1942       </itemizedlist>
   1943     </listitem>
   1944   </varlistentry>
   1945 
   1946   <varlistentry id="opt.fair-sched" xreflabel="--fair-sched">
   1947     <term>
   1948       <option><![CDATA[--fair-sched=<no|yes|try>    [default: no] ]]></option>
   1949     </term>
   1950 
   1951     <listitem> <para>The <option>--fair-sched</option> option controls
   1952       the locking mechanism used by Valgrind to serialise thread
   1953       execution.  The locking mechanism controls the way the threads
   1954       are scheduled, and different settings give different trade-offs
   1955       between fairness and performance. For more details about the
   1956       Valgrind thread serialisation scheme and its impact on
   1957       performance and thread scheduling, see
   1958       <xref linkend="&vg-pthreads-perf-sched-id;"/>.</para>
   1959 
   1960       <itemizedlist>
   1961         <listitem> <para>The value <option>--fair-sched=yes</option>
   1962           activates a fair scheduler.  In short, if multiple threads are
   1963           ready to run, the threads will be scheduled in a round robin
   1964           fashion.  This mechanism is not available on all platforms or
   1965           Linux versions.  If not available,
   1966           using <option>--fair-sched=yes</option> will cause Valgrind to
   1967           terminate with an error.</para>
   1968         <para>You may find this setting improves overall
   1969           responsiveness if you are running an interactive
   1970           multithreaded program, for example a web browser, on
   1971           Valgrind.</para>
   1972         </listitem>
   1973         
   1974         <listitem> <para>The value <option>--fair-sched=try</option>
   1975           activates fair scheduling if available on the
   1976           platform.  Otherwise, it will automatically fall back
   1977           to <option>--fair-sched=no</option>.</para>
   1978         </listitem>
   1979         
   1980         <listitem> <para>The value <option>--fair-sched=no</option> activates
   1981           a scheduler which does not guarantee fairness
   1982           between threads ready to run, but which in general gives the
   1983          highest performance.</para>
   1984         </listitem>
   1985       </itemizedlist>
   1986     </listitem>
   1987 
   1988   </varlistentry>
   1989 
   1990   <varlistentry id="opt.kernel-variant" xreflabel="--kernel-variant">
   1991     <term>
   1992       <option>--kernel-variant=variant1,variant2,...</option>
   1993     </term>
   1994     <listitem>
   1995       <para>Handle system calls and ioctls arising from minor variants
   1996       of the default kernel for this platform.  This is useful for
   1997       running on hacked kernels or with kernel modules which support
   1998       nonstandard ioctls, for example.  Use with caution.  If you don't
   1999       understand what this option does then you almost certainly don't
   2000       need it.  Currently known variants are:</para>
   2001       <itemizedlist>
   2002         <listitem>
   2003           <para><option>bproc: </option> Support the
   2004           <function>sys_broc</function> system call on x86.  This is for
   2005           running on BProc, which is a minor variant of standard Linux which
   2006           is sometimes used for building clusters.</para>
   2007         </listitem>
   2008       </itemizedlist>
   2009     </listitem>
   2010   </varlistentry>
   2011 
   2012   <varlistentry id="opt.merge-recursive-frames" xreflabel="--merge-recursive-frames">
   2013     <term>
   2014       <option><![CDATA[--merge-recursive-frames=<number> [default: 0] ]]></option>
   2015     </term>
   2016     <listitem>
   2017       <para>Some recursive algorithms, for example balanced binary
   2018       tree implementations, create many different stack traces, each
   2019       containing cycles of calls.  A cycle is defined as two identical
   2020       program counter values separated by zero or more other program
   2021       counter values.  Valgrind may then use a lot of memory to store
   2022       all these stack traces.  This is a poor use of memory
   2023       considering that such stack traces contain repeated
   2024       uninteresting recursive calls instead of more interesting
   2025       information such as the function that has initiated the
   2026       recursive call.
   2027       </para>
   2028       <para>The option <option>--merge-recursive-frames=&lt;number&gt;</option>
   2029       instructs Valgrind to detect and merge recursive call cycles
   2030       having a size of up to <option>&lt;number&gt;</option>
   2031       frames. When such a cycle is detected, Valgrind records the
   2032       cycle in the stack trace as a unique program counter.
   2033       </para>
   2034       <para>
   2035       The value 0 (the default) causes no recursive call merging.
   2036       A value of 1 will cause stack traces of simple recursive algorithms
   2037       (for example, a factorial implementation) to be collapsed.
   2038       A value of 2 will usually be needed to collapse stack traces produced
   2039       by recursive algorithms such as binary trees, quick sort, etc.
   2040       Higher values might be needed for more complex recursive algorithms.
   2041       </para>
   2042       <para>Note: recursive calls are detected by analysis of program
   2043       counter values.  They are not detected by looking at function
   2044       names.</para>
   2045    </listitem>
   2046   </varlistentry>
   2047 
   2048   <varlistentry id="opt.num-transtab-sectors" xreflabel="--num-transtab-sectors">
   2049     <term>
   2050       <option><![CDATA[--num-transtab-sectors=<number> [default: 6
   2051       for Android platforms, 16 for all others] ]]></option>
   2052     </term>
   2053     <listitem>
   2054       <para>Valgrind translates and instruments your program's machine
   2055       code in small fragments. The translations are stored in a
   2056       translation cache that is divided into a number of sections
   2057       (sectors). If the cache is full, the sector containing the
   2058       oldest translations is emptied and reused. If these old
   2059       translations are needed again, Valgrind must re-translate and
   2060       re-instrument the corresponding machine code, which is
   2061       expensive.  If the "executed instructions" working set of a
   2062       program is big, increasing the number of sectors may improve
   2063       performance by reducing the number of re-translations needed.
   2064       Sectors are allocated on demand.  Once allocated, a sector can
   2065       never be freed, and occupies considerable space, depending on the tool
   2066       (about 40 MB per sector for Memcheck).  Use the
   2067       option <option>--stats=yes</option> to obtain precise
   2068       information about the memory used by a sector and the allocation
   2069       and recycling of sectors.</para>
   2070    </listitem>
   2071   </varlistentry>
   2072 
   2073   <varlistentry id="opt.aspace-minaddr" xreflabel="----aspace-minaddr">
   2074     <term>
   2075       <option><![CDATA[--aspace-minaddr=<address> [default: depends
   2076       on the platform] ]]></option>
   2077     </term>
   2078     <listitem>
   2079       <para>To avoid potential conflicts with some system libraries,
   2080       Valgrind does not use the address space
   2081       below <option>--aspace-minaddr</option> value, keeping it
   2082       reserved in case a library specifically requests memory in this
   2083       region.  So, some "pessimistic" value is guessed by Valgrind
   2084       depending on the platform. On linux, by default, Valgrind avoids
   2085       using the first 64MB even if typically there is no conflict in
   2086       this complete zone.  You can use the
   2087       option <option>--aspace-minaddr</option> to have your memory
   2088       hungry application benefitting from more of this lower memory.
   2089       On the other hand, if you encounter a conflict, increasing
   2090       aspace-minaddr value might solve it. Conflicts will typically
   2091       manifest themselves with mmap failures in the low range of the
   2092       address space. The
   2093       provided <computeroutput>address</computeroutput> must be page
   2094       aligned and must be equal or bigger to 0x1000 (4KB). To find the
   2095       default value on your platform, do something such as
   2096       <computeroutput>valgrind -d -d date 2&gt;&amp;1 | grep -i minaddr</computeroutput>. Values lower than 0x10000 (64KB) are known to create problems
   2097       on some distributions.
   2098       </para>
   2099    </listitem>
   2100   </varlistentry>
   2101 
   2102   <varlistentry id="opt.show-emwarns" xreflabel="--show-emwarns">
   2103     <term>
   2104       <option><![CDATA[--show-emwarns=<yes|no> [default: no] ]]></option>
   2105     </term>
   2106     <listitem>
   2107       <para>When enabled, Valgrind will emit warnings about its CPU
   2108       emulation in certain cases.  These are usually not
   2109       interesting.</para>
   2110    </listitem>
   2111   </varlistentry>
   2112 
   2113   <varlistentry id="opt.require-text-symbol"
   2114         xreflabel="--require-text-symbol">
   2115     <term>
   2116       <option><![CDATA[--require-text-symbol=:sonamepatt:fnnamepatt]]></option>
   2117     </term>
   2118     <listitem>
   2119       <para>When a shared object whose soname
   2120       matches <varname>sonamepatt</varname> is loaded into the
   2121       process, examine all the text symbols it exports.  If none of
   2122       those match <varname>fnnamepatt</varname>, print an error
   2123       message and abandon the run.  This makes it possible to ensure
   2124       that the run does not continue unless a given shared object
   2125       contains a particular function name.
   2126       </para>
   2127       <para>
   2128       Both <varname>sonamepatt</varname> and
   2129       <varname>fnnamepatt</varname> can be written using the usual
   2130       <varname>?</varname> and <varname>*</varname> wildcards.  For
   2131       example: <varname>":*libc.so*:foo?bar"</varname>.  You may use
   2132       characters other than a colon to separate the two patterns.  It
   2133       is only important that the first character and the separator
   2134       character are the same.  For example, the above example could
   2135       also be written <varname>"Q*libc.so*Qfoo?bar"</varname>.
   2136       Multiple <varname> --require-text-symbol</varname> flags are
   2137       allowed, in which case shared objects that are loaded into
   2138       the process will be checked against all of them.
   2139       </para>
   2140       <para>
   2141       The purpose of this is to support reliable usage of marked-up
   2142       libraries.  For example, suppose we have a version of GCC's
   2143       <varname>libgomp.so</varname> which has been marked up with
   2144       annotations to support Helgrind.  It is only too easy and
   2145       confusing to load the wrong, un-annotated
   2146       <varname>libgomp.so</varname> into the application.  So the idea
   2147       is: add a text symbol in the marked-up library, for
   2148       example <varname>annotated_for_helgrind_3_6</varname>, and then
   2149       give the flag
   2150       <varname>--require-text-symbol=:*libgomp*so*:annotated_for_helgrind_3_6</varname>
   2151       so that when <varname>libgomp.so</varname> is loaded, Valgrind
   2152       scans its symbol table, and if the symbol isn't present the run
   2153       is aborted, rather than continuing silently with the
   2154       un-marked-up library.  Note that you should put the entire flag
   2155       in quotes to stop shells expanding up the <varname>*</varname>
   2156       and <varname>?</varname> wildcards.
   2157       </para>
   2158    </listitem>
   2159   </varlistentry>
   2160 
   2161   <varlistentry id="opt.soname-synonyms"
   2162         xreflabel="--soname-synonyms">
   2163     <term>
   2164       <option><![CDATA[--soname-synonyms=syn1=pattern1,syn2=pattern2,...]]></option>
   2165     </term>
   2166     <listitem>
   2167       <para>When a shared library is loaded, Valgrind checks for 
   2168       functions in the library that must be replaced or wrapped.
   2169       For example, Memcheck replaces all malloc related
   2170       functions (malloc, free, calloc, ...) with its own versions.
   2171       Such replacements are done by default only in shared libraries whose
   2172       soname matches a predefined soname pattern (e.g.
   2173       <varname>libc.so*</varname> on linux).
   2174       By default, no replacement is done for a statically linked
   2175       library or for alternative libraries such as tcmalloc.
   2176       In some cases, the replacements allow
   2177       <option>--soname-synonyms</option> to specify one additional
   2178       synonym pattern, giving flexibility in the replacement. </para>
   2179 
   2180       <para>Currently, this flexibility is only allowed for the
   2181       malloc related functions, using the
   2182       synonym <varname>somalloc</varname>.  This synonym is usable for
   2183       all tools doing standard replacement of malloc related functions
   2184       (e.g. memcheck, massif, drd, helgrind, exp-dhat, exp-sgcheck).
   2185       </para>
   2186 
   2187       <itemizedlist>
   2188         <listitem>
   2189 
   2190           <para>Alternate malloc library: to replace the malloc
   2191           related functions in an alternate library with
   2192           soname <varname>mymalloclib.so</varname>, give the
   2193           option <option>--soname-synonyms=somalloc=mymalloclib.so</option>.
   2194           A pattern can be used to match multiple libraries sonames.
   2195           For
   2196           example, <option>--soname-synonyms=somalloc=*tcmalloc*</option>
   2197           will match the soname of all variants of the tcmalloc library
   2198           (native, debug, profiled, ... tcmalloc variants). </para>
   2199           <para>Note: the soname of a elf shared library can be
   2200           retrieved using the readelf utility. </para>
   2201 
   2202         </listitem>
   2203 
   2204         <listitem>
   2205           <para>Replacements in a statically linked library are done by
   2206           using the <varname>NONE</varname> pattern. For example, if
   2207           you link with <varname>libtcmalloc.a</varname>, memcheck 
   2208           will properly work when you give the
   2209           option <option>--soname-synonyms=somalloc=NONE</option>.  Note
   2210           that a NONE pattern will match the main executable and any
   2211           shared library having no soname. </para>
   2212         </listitem>
   2213 
   2214         <listitem>
   2215           <para>To run a "default" Firefox build for Linux, in which
   2216           JEMalloc is linked in to the main executable,
   2217           use <option>--soname-synonyms=somalloc=NONE</option>.
   2218           </para>
   2219         </listitem>
   2220 
   2221       </itemizedlist>
   2222    </listitem>
   2223   </varlistentry>
   2224 
   2225 
   2226 </variablelist>
   2227 <!-- end of xi:include in the manpage -->
   2228 
   2229 </sect2>
   2230 
   2231 
   2232 <sect2 id="manual-core.debugopts" xreflabel="Debugging Options">
   2233 <title>Debugging Options</title>
   2234 
   2235 <!-- start of xi:include in the manpage -->
   2236 <para id="debug.opts.para">There are also some options for debugging
   2237 Valgrind itself.  You shouldn't need to use them in the normal run of
   2238 things.  If you wish to see the list, use the
   2239 <option>--help-debug</option> option.</para>
   2240 
   2241 <para>If you wish to debug your program rather than debugging
   2242 Valgrind itself, then you should use the options
   2243 <option>--vgdb=yes</option> or <option>--vgdb=full</option>
   2244 or <option>--db-attach=yes</option>.
   2245 </para>
   2246 
   2247 <!-- end of xi:include in the manpage -->
   2248 
   2249 </sect2>
   2250 
   2251 
   2252 <sect2 id="manual-core.defopts" xreflabel="Setting Default Options">
   2253 <title>Setting Default Options</title>
   2254 
   2255 <para>Note that Valgrind also reads options from three places:</para>
   2256 
   2257   <orderedlist>
   2258    <listitem>
   2259     <para>The file <computeroutput>~/.valgrindrc</computeroutput></para>
   2260    </listitem>
   2261 
   2262    <listitem>
   2263     <para>The environment variable
   2264     <computeroutput>$VALGRIND_OPTS</computeroutput></para>
   2265    </listitem>
   2266 
   2267    <listitem>
   2268     <para>The file <computeroutput>./.valgrindrc</computeroutput></para>
   2269    </listitem>
   2270   </orderedlist>
   2271 
   2272 <para>These are processed in the given order, before the
   2273 command-line options.  Options processed later override those
   2274 processed earlier; for example, options in
   2275 <computeroutput>./.valgrindrc</computeroutput> will take
   2276 precedence over those in
   2277 <computeroutput>~/.valgrindrc</computeroutput>.
   2278 </para>
   2279 
   2280 <para>Please note that the <computeroutput>./.valgrindrc</computeroutput>
   2281 file is ignored if it is marked as world writeable or not owned 
   2282 by the current user. This is because the
   2283 <computeroutput>./.valgrindrc</computeroutput> can contain options that are
   2284 potentially harmful or can be used by a local attacker to execute code under
   2285 your user account.
   2286 </para>
   2287 
   2288 <para>Any tool-specific options put in
   2289 <computeroutput>$VALGRIND_OPTS</computeroutput> or the
   2290 <computeroutput>.valgrindrc</computeroutput> files should be
   2291 prefixed with the tool name and a colon.  For example, if you
   2292 want Memcheck to always do leak checking, you can put the
   2293 following entry in <literal>~/.valgrindrc</literal>:</para>
   2294 
   2295 <programlisting><![CDATA[
   2296 --memcheck:leak-check=yes]]></programlisting>
   2297 
   2298 <para>This will be ignored if any tool other than Memcheck is
   2299 run.  Without the <computeroutput>memcheck:</computeroutput>
   2300 part, this will cause problems if you select other tools that
   2301 don't understand
   2302 <option>--leak-check=yes</option>.</para>
   2303 
   2304 </sect2>
   2305 
   2306 </sect1>
   2307 
   2308 
   2309 
   2310 <sect1 id="manual-core.pthreads" xreflabel="Support for Threads">
   2311 <title>Support for Threads</title>
   2312 
   2313 <para>Threaded programs are fully supported.</para>
   2314 
   2315 <para>The main thing to point out with respect to threaded programs is
   2316 that your program will use the native threading library, but Valgrind
   2317 serialises execution so that only one (kernel) thread is running at a
   2318 time.  This approach avoids the horrible implementation problems of
   2319 implementing a truly multithreaded version of Valgrind, but it does
   2320 mean that threaded apps never use more than one CPU simultaneously,
   2321 even if you have a multiprocessor or multicore machine.</para>
   2322 
   2323 <para>Valgrind doesn't schedule the threads itself.  It merely ensures
   2324 that only one thread runs at once, using a simple locking scheme.  The
   2325 actual thread scheduling remains under control of the OS kernel.  What
   2326 this does mean, though, is that your program will see very different
   2327 scheduling when run on Valgrind than it does when running normally.
   2328 This is both because Valgrind is serialising the threads, and because
   2329 the code runs so much slower than normal.</para>
   2330 
   2331 <para>This difference in scheduling may cause your program to behave
   2332 differently, if you have some kind of concurrency, critical race,
   2333 locking, or similar, bugs.  In that case you might consider using the
   2334 tools Helgrind and/or DRD to track them down.</para>
   2335 
   2336 <para>On Linux, Valgrind also supports direct use of the
   2337 <computeroutput>clone</computeroutput> system call,
   2338 <computeroutput>futex</computeroutput> and so on.
   2339 <computeroutput>clone</computeroutput> is supported where either
   2340 everything is shared (a thread) or nothing is shared (fork-like); partial
   2341 sharing will fail.
   2342 </para>
   2343 
   2344 <!-- Referenced from both the manual and manpage -->
   2345 <sect2 id="&vg-pthreads-perf-sched-id;" xreflabel="&vg-pthreads-perf-sched-label;">
   2346 <title>Scheduling and Multi-Thread Performance</title>
   2347 
   2348 <para>A thread executes code only when it holds the abovementioned
   2349 lock.  After executing some number of instructions, the running thread
   2350 will release the lock.  All threads ready to run will then compete to
   2351 acquire the lock.</para>
   2352 
   2353 <para>The <option>--fair-sched</option> option controls the locking mechanism
   2354 used to serialise thread execution.</para>
   2355 
   2356 <para>The default pipe based locking mechanism
   2357 (<option>--fair-sched=no</option>) is available on all
   2358 platforms.  Pipe based locking does not guarantee fairness between
   2359 threads: it is quite likely that a thread that has just released the
   2360 lock reacquires it immediately, even though other threads are ready to
   2361 run.  When using pipe based locking, different runs of the same
   2362 multithreaded application might give very different thread
   2363 scheduling.</para>
   2364 
   2365 <para>An alternative locking mechanism, based on futexes, is available
   2366 on some platforms.  If available, it is activated
   2367 by <option>--fair-sched=yes</option> or
   2368 <option>--fair-sched=try</option>.  Futex based locking ensures
   2369 fairness (round-robin scheduling) between threads: if multiple threads
   2370 are ready to run, the lock will be given to the thread which first
   2371 requested the lock.  Note that a thread which is blocked in a system
   2372 call (e.g. in a blocking read system call) has not (yet) requested the
   2373 lock: such a thread requests the lock only after the system call is
   2374 finished.</para>
   2375 
   2376 <para> The fairness of the futex based locking produces better
   2377 reproducibility of thread scheduling for different executions of a
   2378 multithreaded application. This better reproducibility is particularly
   2379 helpful when using Helgrind or DRD.</para>
   2380 
   2381 <para>Valgrind's use of thread serialisation implies that only one
   2382 thread at a time may run.  On a multiprocessor/multicore system, the
   2383 running thread is assigned to one of the CPUs by the OS kernel
   2384 scheduler.  When a thread acquires the lock, sometimes the thread will
   2385 be assigned to the same CPU as the thread that just released the
   2386 lock.  Sometimes, the thread will be assigned to another CPU.  When
   2387 using pipe based locking, the thread that just acquired the lock
   2388 will usually be scheduled on the same CPU as the thread that just
   2389 released the lock.  With the futex based mechanism, the thread that
   2390 just acquired the lock will more often be scheduled on another
   2391 CPU.</para>
   2392 
   2393 <para>Valgrind's thread serialisation and CPU assignment by the OS
   2394 kernel scheduler can interact badly with the CPU frequency scaling
   2395 available on many modern CPUs.  To decrease power consumption, the
   2396 frequency of a CPU or core is automatically decreased if the CPU/core
   2397 has not been used recently.  If the OS kernel often assigns the thread
   2398 which just acquired the lock to another CPU/core, it is quite likely
   2399 that this CPU/core is currently at a low frequency.  The frequency of
   2400 this CPU will be increased after some time.  However, during this
   2401 time, the (only) running thread will have run at the low frequency.
   2402 Once this thread has run for some time, it will release the lock.
   2403 Another thread will acquire this lock, and might be scheduled again on
   2404 another CPU whose clock frequency was decreased in the
   2405 meantime.</para>
   2406 
   2407 <para>The futex based locking causes threads to change CPUs/cores more
   2408 often.  So, if CPU frequency scaling is activated, the futex based
   2409 locking might decrease significantly the performance of a
   2410 multithreaded app running under Valgrind.  Performance losses of up to
   2411 50% degradation have been observed, as compared to running on a
   2412 machine for which CPU frequency scaling has been disabled.  The pipe
   2413 based locking locking scheme also interacts badly with CPU frequency
   2414 scaling, with performance losses in the range 10..20% having been
   2415 observed.</para>
   2416 
   2417 <para>To avoid such performance degradation, you should indicate to
   2418 the kernel that all CPUs/cores should always run at maximum clock
   2419 speed.  Depending on your Linux distribution, CPU frequency scaling
   2420 may be controlled using a graphical interface or using command line
   2421 such as
   2422 <computeroutput>cpufreq-selector</computeroutput> or
   2423 <computeroutput>cpufreq-set</computeroutput>.
   2424 </para>
   2425 
   2426 <para>An alternative way to avoid these problems is to tell the
   2427 OS scheduler to tie a Valgrind process to a specific (fixed) CPU using the
   2428 <computeroutput>taskset</computeroutput> command.  This should ensure
   2429 that the selected CPU does not fall below its maximum frequency
   2430 setting so long as any thread of the program has work to do.
   2431 </para>
   2432 
   2433 </sect2>
   2434 
   2435 
   2436 </sect1>
   2437 
   2438 <sect1 id="manual-core.signals" xreflabel="Handling of Signals">
   2439 <title>Handling of Signals</title>
   2440 
   2441 <para>Valgrind has a fairly complete signal implementation.  It should be
   2442 able to cope with any POSIX-compliant use of signals.</para>
   2443  
   2444 <para>If you're using signals in clever ways (for example, catching
   2445 SIGSEGV, modifying page state and restarting the instruction), you're
   2446 probably relying on precise exceptions.  In this case, you will need
   2447 to use <option>--vex-iropt-register-updates=allregs-at-mem-access</option>
   2448 or <option>--vex-iropt-register-updates=allregs-at-each-insn</option>.
   2449 </para>
   2450 
   2451 <para>If your program dies as a result of a fatal core-dumping signal,
   2452 Valgrind will generate its own core file
   2453 (<computeroutput>vgcore.NNNNN</computeroutput>) containing your program's
   2454 state.  You may use this core file for post-mortem debugging with GDB or
   2455 similar.  (Note: it will not generate a core if your core dump size limit is
   2456 0.)  At the time of writing the core dumps do not include all the floating
   2457 point register information.</para>
   2458 
   2459 <para>In the unlikely event that Valgrind itself crashes, the operating system
   2460 will create a core dump in the usual way.</para>
   2461 
   2462 </sect1>
   2463 
   2464 
   2465 
   2466 
   2467 
   2468 
   2469 
   2470 
   2471 <sect1 id="manual-core.install" xreflabel="Building and Installing">
   2472 <title>Building and Installing Valgrind</title>
   2473 
   2474 <para>We use the standard Unix
   2475 <computeroutput>./configure</computeroutput>,
   2476 <computeroutput>make</computeroutput>, <computeroutput>make
   2477 install</computeroutput> mechanism.  Once you have completed 
   2478 <computeroutput>make install</computeroutput> you may then want 
   2479 to run the regression tests
   2480 with <computeroutput>make regtest</computeroutput>.
   2481 </para>
   2482 
   2483 <para>In addition to the usual
   2484 <option>--prefix=/path/to/install/tree</option>, there are three
   2485  options which affect how Valgrind is built:
   2486 <itemizedlist>
   2487 
   2488   <listitem>
   2489     <para><option>--enable-inner</option></para>
   2490     <para>This builds Valgrind with some special magic hacks which make
   2491      it possible to run it on a standard build of Valgrind (what the
   2492      developers call "self-hosting").  Ordinarily you should not use
   2493      this option as various kinds of safety checks are disabled.
   2494    </para>
   2495   </listitem>
   2496 
   2497   <listitem>
   2498     <para><option>--enable-only64bit</option></para>
   2499     <para><option>--enable-only32bit</option></para>
   2500     <para>On 64-bit platforms (amd64-linux, ppc64-linux,
   2501      amd64-darwin), Valgrind is by default built in such a way that
   2502      both 32-bit and 64-bit executables can be run.  Sometimes this
   2503      cleverness is a problem for a variety of reasons.  These two
   2504      options allow for single-target builds in this situation.  If you
   2505      issue both, the configure script will complain.  Note they are
   2506      ignored on 32-bit-only platforms (x86-linux, ppc32-linux,
   2507      arm-linux, x86-darwin).
   2508    </para>
   2509   </listitem>
   2510 
   2511 </itemizedlist>
   2512 </para>
   2513 
   2514 <para>The <computeroutput>configure</computeroutput> script tests
   2515 the version of the X server currently indicated by the current
   2516 <computeroutput>$DISPLAY</computeroutput>.  This is a known bug.
   2517 The intention was to detect the version of the current X
   2518 client libraries, so that correct suppressions could be selected
   2519 for them, but instead the test checks the server version.  This
   2520 is just plain wrong.</para>
   2521 
   2522 <para>If you are building a binary package of Valgrind for
   2523 distribution, please read <literal>README_PACKAGERS</literal>
   2524 <xref linkend="dist.readme-packagers"/>.  It contains some
   2525 important information.</para>
   2526 
   2527 <para>Apart from that, there's not much excitement here.  Let us
   2528 know if you have build problems.</para>
   2529 
   2530 </sect1>
   2531 
   2532 
   2533 
   2534 <sect1 id="manual-core.problems" xreflabel="If You Have Problems">
   2535 <title>If You Have Problems</title>
   2536 
   2537 <para>Contact us at <ulink url="&vg-url;">&vg-url;</ulink>.</para>
   2538 
   2539 <para>See <xref linkend="manual-core.limits"/> for the known
   2540 limitations of Valgrind, and for a list of programs which are
   2541 known not to work on it.</para>
   2542 
   2543 <para>All parts of the system make heavy use of assertions and 
   2544 internal self-checks.  They are permanently enabled, and we have no 
   2545 plans to disable them.  If one of them breaks, please mail us!</para>
   2546 
   2547 <para>If you get an assertion failure
   2548 in <filename>m_mallocfree.c</filename>, this may have happened because
   2549 your program wrote off the end of a heap block, or before its
   2550 beginning, thus corrupting heap metadata.  Valgrind hopefully will have
   2551 emitted a message to that effect before dying in this way.</para>
   2552 
   2553 <para>Read the <xref linkend="FAQ"/> for more advice about common problems, 
   2554 crashes, etc.</para>
   2555 
   2556 </sect1>
   2557 
   2558 
   2559 
   2560 <sect1 id="manual-core.limits" xreflabel="Limitations">
   2561 <title>Limitations</title>
   2562 
   2563 <para>The following list of limitations seems long.  However, most
   2564 programs actually work fine.</para>
   2565 
   2566 <para>Valgrind will run programs on the supported platforms
   2567 subject to the following constraints:</para>
   2568 
   2569  <itemizedlist>
   2570   <listitem>
   2571    <para>On x86 and amd64, there is no support for 3DNow!
   2572    instructions.  If the translator encounters these, Valgrind will
   2573    generate a SIGILL when the instruction is executed.  Apart from
   2574    that, on x86 and amd64, essentially all instructions are supported,
   2575    up to and including AVX and AES in 64-bit mode and SSSE3 in 32-bit
   2576    mode.  32-bit mode does in fact support the bare minimum SSE4
   2577    instructions to needed to run programs on MacOSX 10.6 on 32-bit
   2578    targets.
   2579    </para>
   2580   </listitem>
   2581 
   2582   <listitem>
   2583    <para>On ppc32 and ppc64, almost all integer, floating point and
   2584    Altivec instructions are supported.  Specifically: integer and FP
   2585    insns that are mandatory for PowerPC, the "General-purpose
   2586    optional" group (fsqrt, fsqrts, stfiwx), the "Graphics optional"
   2587    group (fre, fres, frsqrte, frsqrtes), and the Altivec (also known
   2588    as VMX) SIMD instruction set, are supported.  Also, instructions
   2589    from the Power ISA 2.05 specification, as present in POWER6 CPUs,
   2590    are supported.</para>
   2591   </listitem>
   2592 
   2593   <listitem>
   2594    <para>On ARM, essentially the entire ARMv7-A instruction set
   2595     is supported, in both ARM and Thumb mode.  ThumbEE and Jazelle are
   2596     not supported.  NEON, VFPv3 and ARMv6 media support is fairly
   2597     complete.
   2598    </para>
   2599   </listitem>
   2600 
   2601   <listitem>
   2602    <para>If your program does its own memory management, rather than
   2603    using malloc/new/free/delete, it should still work, but Memcheck's
   2604    error checking won't be so effective.  If you describe your
   2605    program's memory management scheme using "client requests" (see
   2606    <xref linkend="manual-core-adv.clientreq"/>), Memcheck can do
   2607    better.  Nevertheless, using malloc/new and free/delete is still
   2608    the best approach.</para>
   2609   </listitem>
   2610 
   2611   <listitem>
   2612    <para>Valgrind's signal simulation is not as robust as it could be.
   2613    Basic POSIX-compliant sigaction and sigprocmask functionality is
   2614    supplied, but it's conceivable that things could go badly awry if you
   2615    do weird things with signals.  Workaround: don't.  Programs that do
   2616    non-POSIX signal tricks are in any case inherently unportable, so
   2617    should be avoided if possible.</para>
   2618   </listitem>
   2619 
   2620   <listitem>
   2621    <para>Machine instructions, and system calls, have been implemented
   2622    on demand.  So it's possible, although unlikely, that a program will
   2623    fall over with a message to that effect.  If this happens, please
   2624    report all the details printed out, so we can try and implement the
   2625    missing feature.</para>
   2626   </listitem>
   2627 
   2628   <listitem>
   2629    <para>Memory consumption of your program is majorly increased
   2630    whilst running under Valgrind's Memcheck tool.  This is due to the
   2631    large amount of administrative information maintained behind the
   2632    scenes.  Another cause is that Valgrind dynamically translates the
   2633    original executable.  Translated, instrumented code is 12-18 times
   2634    larger than the original so you can easily end up with 150+ MB of
   2635    translations when running (eg) a web browser.</para>
   2636   </listitem>
   2637 
   2638   <listitem>
   2639    <para>Valgrind can handle dynamically-generated code just fine.  If
   2640    you regenerate code over the top of old code (ie. at the same
   2641    memory addresses), if the code is on the stack Valgrind will
   2642    realise the code has changed, and work correctly.  This is
   2643    necessary to handle the trampolines GCC uses to implemented nested
   2644    functions.  If you regenerate code somewhere other than the stack,
   2645    and you are running on an 32- or 64-bit x86 CPU, you will need to
   2646    use the <option>--smc-check=all</option> option, and Valgrind will
   2647    run more slowly than normal.  Or you can add client requests that
   2648    tell Valgrind when your program has overwritten code.
   2649    </para>
   2650    <para> On other platforms (ARM, PowerPC) Valgrind observes and
   2651    honours the cache invalidation hints that programs are obliged to
   2652    emit to notify new code, and so self-modifying-code support should
   2653    work automatically, without the need
   2654    for <option>--smc-check=all</option>.</para>
   2655   </listitem>
   2656 
   2657   <listitem>
   2658    <para>Valgrind has the following limitations
   2659    in its implementation of x86/AMD64 floating point relative to 
   2660    IEEE754.</para>
   2661 
   2662    <para>Precision: There is no support for 80 bit arithmetic.
   2663    Internally, Valgrind represents all such "long double" numbers in 64
   2664    bits, and so there may be some differences in results.  Whether or
   2665    not this is critical remains to be seen.  Note, the x86/amd64
   2666    fldt/fstpt instructions (read/write 80-bit numbers) are correctly
   2667    simulated, using conversions to/from 64 bits, so that in-memory
   2668    images of 80-bit numbers look correct if anyone wants to see.</para>
   2669 
   2670    <para>The impression observed from many FP regression tests is that
   2671    the accuracy differences aren't significant.  Generally speaking, if
   2672    a program relies on 80-bit precision, there may be difficulties
   2673    porting it to non x86/amd64 platforms which only support 64-bit FP
   2674    precision.  Even on x86/amd64, the program may get different results
   2675    depending on whether it is compiled to use SSE2 instructions (64-bits
   2676    only), or x87 instructions (80-bit).  The net effect is to make FP
   2677    programs behave as if they had been run on a machine with 64-bit IEEE
   2678    floats, for example PowerPC.  On amd64 FP arithmetic is done by
   2679    default on SSE2, so amd64 looks more like PowerPC than x86 from an FP
   2680    perspective, and there are far fewer noticeable accuracy differences
   2681    than with x86.</para>
   2682 
   2683    <para>Rounding: Valgrind does observe the 4 IEEE-mandated rounding
   2684    modes (to nearest, to +infinity, to -infinity, to zero) for the
   2685    following conversions: float to integer, integer to float where
   2686    there is a possibility of loss of precision, and float-to-float
   2687    rounding.  For all other FP operations, only the IEEE default mode
   2688    (round to nearest) is supported.</para>
   2689 
   2690    <para>Numeric exceptions in FP code: IEEE754 defines five types of
   2691    numeric exception that can happen: invalid operation (sqrt of
   2692    negative number, etc), division by zero, overflow, underflow,
   2693    inexact (loss of precision).</para>
   2694 
   2695    <para>For each exception, two courses of action are defined by IEEE754:
   2696    either (1) a user-defined exception handler may be called, or (2) a
   2697    default action is defined, which "fixes things up" and allows the
   2698    computation to proceed without throwing an exception.</para>
   2699 
   2700    <para>Currently Valgrind only supports the default fixup actions.
   2701    Again, feedback on the importance of exception support would be
   2702    appreciated.</para>
   2703 
   2704    <para>When Valgrind detects that the program is trying to exceed any
   2705    of these limitations (setting exception handlers, rounding mode, or
   2706    precision control), it can print a message giving a traceback of
   2707    where this has happened, and continue execution.  This behaviour used
   2708    to be the default, but the messages are annoying and so showing them
   2709    is now disabled by default.  Use <option>--show-emwarns=yes</option> to see
   2710    them.</para>
   2711 
   2712    <para>The above limitations define precisely the IEEE754 'default'
   2713    behaviour: default fixup on all exceptions, round-to-nearest
   2714    operations, and 64-bit precision.</para>
   2715   </listitem>
   2716    
   2717   <listitem>
   2718    <para>Valgrind has the following limitations in
   2719    its implementation of x86/AMD64 SSE2 FP arithmetic, relative to 
   2720    IEEE754.</para>
   2721 
   2722    <para>Essentially the same: no exceptions, and limited observance of
   2723    rounding mode.  Also, SSE2 has control bits which make it treat
   2724    denormalised numbers as zero (DAZ) and a related action, flush
   2725    denormals to zero (FTZ).  Both of these cause SSE2 arithmetic to be
   2726    less accurate than IEEE requires.  Valgrind detects, ignores, and can
   2727    warn about, attempts to enable either mode.</para>
   2728   </listitem>
   2729 
   2730   <listitem>
   2731    <para>Valgrind has the following limitations in
   2732    its implementation of ARM VFPv3 arithmetic, relative to 
   2733    IEEE754.</para>
   2734 
   2735    <para>Essentially the same: no exceptions, and limited observance
   2736    of rounding mode.  Also, switching the VFP unit into vector mode
   2737    will cause Valgrind to abort the program -- it has no way to
   2738    emulate vector uses of VFP at a reasonable performance level.  This
   2739    is no big deal given that non-scalar uses of VFP instructions are
   2740    in any case deprecated.</para>
   2741   </listitem>
   2742 
   2743   <listitem>
   2744    <para>Valgrind has the following limitations
   2745    in its implementation of PPC32 and PPC64 floating point 
   2746    arithmetic, relative to IEEE754.</para>
   2747 
   2748    <para>Scalar (non-Altivec): Valgrind provides a bit-exact emulation of
   2749    all floating point instructions, except for "fre" and "fres", which are
   2750    done more precisely than required by the PowerPC architecture specification.
   2751    All floating point operations observe the current rounding mode.
   2752    </para>
   2753 
   2754    <para>However, fpscr[FPRF] is not set after each operation.  That could
   2755    be done but would give measurable performance overheads, and so far
   2756    no need for it has been found.</para>
   2757 
   2758    <para>As on x86/AMD64, IEEE754 exceptions are not supported: all floating
   2759    point exceptions are handled using the default IEEE fixup actions.
   2760    Valgrind detects, ignores, and can warn about, attempts to unmask 
   2761    the 5 IEEE FP exception kinds by writing to the floating-point status 
   2762    and control register (fpscr).
   2763    </para>
   2764 
   2765    <para>Vector (Altivec, VMX): essentially as with x86/AMD64 SSE/SSE2: 
   2766    no exceptions, and limited observance of rounding mode.  
   2767    For Altivec, FP arithmetic
   2768    is done in IEEE/Java mode, which is more accurate than the Linux default
   2769    setting.  "More accurate" means that denormals are handled properly, 
   2770    rather than simply being flushed to zero.</para>
   2771   </listitem>
   2772  </itemizedlist>
   2773 
   2774  <para>Programs which are known not to work are:</para>
   2775  <itemizedlist>
   2776   <listitem>
   2777    <para>emacs starts up but immediately concludes it is out of
   2778    memory and aborts.  It may be that Memcheck does not provide
   2779    a good enough emulation of the 
   2780    <computeroutput>mallinfo</computeroutput> function.
   2781    Emacs works fine if you build it to use
   2782    the standard malloc/free routines.</para>
   2783   </listitem>
   2784  </itemizedlist>
   2785 
   2786 </sect1>
   2787 
   2788 
   2789 <sect1 id="manual-core.example" xreflabel="An Example Run">
   2790 <title>An Example Run</title>
   2791 
   2792 <para>This is the log for a run of a small program using Memcheck.
   2793 The program is in fact correct, and the reported error is as the
   2794 result of a potentially serious code generation bug in GNU g++
   2795 (snapshot 20010527).</para>
   2796 
   2797 <programlisting><![CDATA[
   2798 sewardj@phoenix:~/newmat10$ ~/Valgrind-6/valgrind -v ./bogon 
   2799 ==25832== Valgrind 0.10, a memory error detector for x86 RedHat 7.1.
   2800 ==25832== Copyright (C) 2000-2001, and GNU GPL'd, by Julian Seward.
   2801 ==25832== Startup, with flags:
   2802 ==25832== --suppressions=/home/sewardj/Valgrind/redhat71.supp
   2803 ==25832== reading syms from /lib/ld-linux.so.2
   2804 ==25832== reading syms from /lib/libc.so.6
   2805 ==25832== reading syms from /mnt/pima/jrs/Inst/lib/libgcc_s.so.0
   2806 ==25832== reading syms from /lib/libm.so.6
   2807 ==25832== reading syms from /mnt/pima/jrs/Inst/lib/libstdc++.so.3
   2808 ==25832== reading syms from /home/sewardj/Valgrind/valgrind.so
   2809 ==25832== reading syms from /proc/self/exe
   2810 ==25832== 
   2811 ==25832== Invalid read of size 4
   2812 ==25832==    at 0x8048724: BandMatrix::ReSize(int,int,int) (bogon.cpp:45)
   2813 ==25832==    by 0x80487AF: main (bogon.cpp:66)
   2814 ==25832==  Address 0xBFFFF74C is not stack'd, malloc'd or free'd
   2815 ==25832==
   2816 ==25832== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
   2817 ==25832== malloc/free: in use at exit: 0 bytes in 0 blocks.
   2818 ==25832== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
   2819 ==25832== For a detailed leak analysis, rerun with: --leak-check=yes
   2820 ]]></programlisting>
   2821 
   2822 <para>The GCC folks fixed this about a week before GCC 3.0
   2823 shipped.</para>
   2824 
   2825 </sect1>
   2826 
   2827 
   2828 <sect1 id="manual-core.warnings" xreflabel="Warning Messages">
   2829 <title>Warning Messages You Might See</title>
   2830 
   2831 <para>Some of these only appear if you run in verbose mode
   2832 (enabled by <option>-v</option>):</para>
   2833 
   2834  <itemizedlist>
   2835 
   2836   <listitem>
   2837     <para><computeroutput>More than 100 errors detected.  Subsequent
   2838     errors will still be recorded, but in less detail than
   2839     before.</computeroutput></para>
   2840 
   2841     <para>After 100 different errors have been shown, Valgrind becomes
   2842     more conservative about collecting them.  It then requires only the
   2843     program counters in the top two stack frames to match when deciding
   2844     whether or not two errors are really the same one.  Prior to this
   2845     point, the PCs in the top four frames are required to match.  This
   2846     hack has the effect of slowing down the appearance of new errors
   2847     after the first 100.  The 100 constant can be changed by recompiling
   2848     Valgrind.</para>
   2849   </listitem>
   2850 
   2851   <listitem>
   2852     <para><computeroutput>More than 1000 errors detected.  I'm not
   2853     reporting any more.  Final error counts may be inaccurate.  Go fix
   2854     your program!</computeroutput></para>
   2855 
   2856     <para>After 1000 different errors have been detected, Valgrind
   2857     ignores any more.  It seems unlikely that collecting even more
   2858     different ones would be of practical help to anybody, and it avoids
   2859     the danger that Valgrind spends more and more of its time comparing
   2860     new errors against an ever-growing collection.  As above, the 1000
   2861     number is a compile-time constant.</para>
   2862   </listitem>
   2863 
   2864   <listitem>
   2865     <para><computeroutput>Warning: client switching stacks?</computeroutput></para>
   2866 
   2867     <para>Valgrind spotted such a large change in the stack pointer
   2868     that it guesses the client is switching to a different stack.  At
   2869     this point it makes a kludgey guess where the base of the new
   2870     stack is, and sets memory permissions accordingly.  At the moment
   2871     "large change" is defined as a change of more that 2000000 in the
   2872     value of the stack pointer register.  If Valgrind guesses wrong,
   2873     you may get many bogus error messages following this and/or have
   2874     crashes in the stack trace recording code.  You might avoid these
   2875     problems by informing Valgrind about the stack bounds using
   2876     VALGRIND_STACK_REGISTER client request. </para>
   2877 
   2878   </listitem>
   2879 
   2880   <listitem>
   2881     <para><computeroutput>Warning: client attempted to close Valgrind's
   2882     logfile fd &lt;number&gt;</computeroutput></para>
   2883 
   2884     <para>Valgrind doesn't allow the client to close the logfile,
   2885     because you'd never see any diagnostic information after that point.
   2886     If you see this message, you may want to use the
   2887     <option>--log-fd=&lt;number&gt;</option> option to specify a
   2888     different logfile file-descriptor number.</para>
   2889   </listitem>
   2890 
   2891   <listitem>
   2892     <para><computeroutput>Warning: noted but unhandled ioctl
   2893     &lt;number&gt;</computeroutput></para>
   2894 
   2895     <para>Valgrind observed a call to one of the vast family of
   2896     <computeroutput>ioctl</computeroutput> system calls, but did not
   2897     modify its memory status info (because nobody has yet written a 
   2898     suitable wrapper).  The call will still have gone through, but you may get
   2899     spurious errors after this as a result of the non-update of the
   2900     memory info.</para>
   2901   </listitem>
   2902 
   2903   <listitem>
   2904     <para><computeroutput>Warning: set address range perms: large range
   2905     &lt;number></computeroutput></para>
   2906 
   2907     <para>Diagnostic message, mostly for benefit of the Valgrind
   2908     developers, to do with memory permissions.</para>
   2909   </listitem>
   2910 
   2911  </itemizedlist>
   2912 
   2913 </sect1>
   2914 
   2915 
   2916 
   2917 
   2918 
   2919 
   2920 </chapter>
   2921