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; ]>
7 <chapter id="manual-core-adv" xreflabel="Valgrind's core: advanced topics">
8 <title>Using and understanding the Valgrind core: Advanced Topics</title>
10 <para>This chapter describes advanced aspects of the Valgrind core
11 services, which are mostly of interest to power users who wish to
12 customise and modify Valgrind's default behaviours in certain useful
13 ways. The subjects covered are:</para>
16 <listitem><para>The "Client Request" mechanism</para></listitem>
17 <listitem><para>Debugging your program using Valgrind's gdbserver
18 and GDB</para></listitem>
19 <listitem><para>Function Wrapping</para></listitem>
24 <sect1 id="manual-core-adv.clientreq"
25 xreflabel="The Client Request mechanism">
26 <title>The Client Request mechanism</title>
28 <para>Valgrind has a trapdoor mechanism via which the client
29 program can pass all manner of requests and queries to Valgrind
30 and the current tool. Internally, this is used extensively
31 to make various things work, although that's not visible from the
34 <para>For your convenience, a subset of these so-called client
35 requests is provided to allow you to tell Valgrind facts about
36 the behaviour of your program, and also to make queries.
37 In particular, your program can tell Valgrind about things that it
38 otherwise would not know, leading to better results.
41 <para>Clients need to include a header file to make this work.
42 Which header file depends on which client requests you use. Some
43 client requests are handled by the core, and are defined in the
44 header file <filename>valgrind/valgrind.h</filename>. Tool-specific
45 header files are named after the tool, e.g.
46 <filename>valgrind/memcheck.h</filename>. Each tool-specific header file
47 includes <filename>valgrind/valgrind.h</filename> so you don't need to
48 include it in your client if you include a tool-specific header. All header
49 files can be found in the <literal>include/valgrind</literal> directory of
50 wherever Valgrind was installed.</para>
52 <para>The macros in these header files have the magical property
53 that they generate code in-line which Valgrind can spot.
54 However, the code does nothing when not run on Valgrind, so you
55 are not forced to run your program under Valgrind just because you
56 use the macros in this file. Also, you are not required to link your
57 program with any extra supporting libraries.</para>
59 <para>The code added to your binary has negligible performance impact:
60 on x86, amd64, ppc32, ppc64 and ARM, the overhead is 6 simple integer
61 instructions and is probably undetectable except in tight loops.
62 However, if you really wish to compile out the client requests, you
63 can compile with <option>-DNVALGRIND</option> (analogous to
64 <option>-DNDEBUG</option>'s effect on
65 <function>assert</function>).
68 <para>You are encouraged to copy the <filename>valgrind/*.h</filename> headers
69 into your project's include directory, so your program doesn't have a
70 compile-time dependency on Valgrind being installed. The Valgrind headers,
71 unlike most of the rest of the code, are under a BSD-style license so you may
72 include them without worrying about license incompatibility.</para>
74 <para>Here is a brief description of the macros available in
75 <filename>valgrind.h</filename>, which work with more than one
76 tool (see the tool-specific documentation for explanations of the
77 tool-specific macros).</para>
82 <term><command><computeroutput>RUNNING_ON_VALGRIND</computeroutput></command>:</term>
84 <para>Returns 1 if running on Valgrind, 0 if running on the
85 real CPU. If you are running Valgrind on itself, returns the
86 number of layers of Valgrind emulation you're running on.
92 <term><command><computeroutput>VALGRIND_DISCARD_TRANSLATIONS</computeroutput>:</command></term>
94 <para>Discards translations of code in the specified address
95 range. Useful if you are debugging a JIT compiler or some other
96 dynamic code generation system. After this call, attempts to
97 execute code in the invalidated address range will cause
98 Valgrind to make new translations of that code, which is
99 probably the semantics you want. Note that code invalidations
100 are expensive because finding all the relevant translations
101 quickly is very difficult, so try not to call it often.
102 Note that you can be clever about
103 this: you only need to call it when an area which previously
104 contained code is overwritten with new code. You can choose
105 to write code into fresh memory, and just call this
106 occasionally to discard large chunks of old code all at
109 Alternatively, for transparent self-modifying-code support,
110 use<option>--smc-check=all</option>, or run
111 on ppc32/Linux, ppc64/Linux or ARM/Linux.
117 <term><command><computeroutput>VALGRIND_COUNT_ERRORS</computeroutput>:</command></term>
119 <para>Returns the number of errors found so far by Valgrind. Can be
120 useful in test harness code when combined with the
121 <option>--log-fd=-1</option> option; this runs Valgrind silently,
122 but the client program can detect when errors occur. Only useful
123 for tools that report errors, e.g. it's useful for Memcheck, but for
124 Cachegrind it will always return zero because Cachegrind doesn't
125 report errors.</para>
130 <term><command><computeroutput>VALGRIND_MALLOCLIKE_BLOCK</computeroutput>:</command></term>
132 <para>If your program manages its own memory instead of using
133 the standard <function>malloc</function> /
134 <function>new</function> /
135 <function>new[]</function>, tools that track
136 information about heap blocks will not do nearly as good a
137 job. For example, Memcheck won't detect nearly as many
138 errors, and the error messages won't be as informative. To
139 improve this situation, use this macro just after your custom
140 allocator allocates some new memory. See the comments in
141 <filename>valgrind.h</filename> for information on how to use
147 <term><command><computeroutput>VALGRIND_FREELIKE_BLOCK</computeroutput>:</command></term>
149 <para>This should be used in conjunction with
150 <computeroutput>VALGRIND_MALLOCLIKE_BLOCK</computeroutput>.
151 Again, see <filename>valgrind.h</filename> for
152 information on how to use it.</para>
157 <term><command><computeroutput>VALGRIND_RESIZEINPLACE_BLOCK</computeroutput>:</command></term>
159 <para>Informs a Valgrind tool that the size of an allocated block has been
160 modified but not its address. See <filename>valgrind.h</filename> for
161 more information on how to use it.</para>
167 <command><computeroutput>VALGRIND_CREATE_MEMPOOL</computeroutput></command>,
168 <command><computeroutput>VALGRIND_DESTROY_MEMPOOL</computeroutput></command>,
169 <command><computeroutput>VALGRIND_MEMPOOL_ALLOC</computeroutput></command>,
170 <command><computeroutput>VALGRIND_MEMPOOL_FREE</computeroutput></command>,
171 <command><computeroutput>VALGRIND_MOVE_MEMPOOL</computeroutput></command>,
172 <command><computeroutput>VALGRIND_MEMPOOL_CHANGE</computeroutput></command>,
173 <command><computeroutput>VALGRIND_MEMPOOL_EXISTS</computeroutput></command>:
176 <para>These are similar to
177 <computeroutput>VALGRIND_MALLOCLIKE_BLOCK</computeroutput> and
178 <computeroutput>VALGRIND_FREELIKE_BLOCK</computeroutput>
179 but are tailored towards code that uses memory pools. See
180 <xref linkend="mc-manual.mempools"/> for a detailed description.</para>
185 <term><command><computeroutput>VALGRIND_NON_SIMD_CALL[0123]</computeroutput>:</command></term>
187 <para>Executes a function in the client program on the
188 <emphasis>real</emphasis> CPU, not the virtual CPU that Valgrind
189 normally runs code on. The function must take an integer (holding a
190 thread ID) as the first argument and then 0, 1, 2 or 3 more arguments
191 (depending on which client request is used). These are used in various
192 ways internally to Valgrind. They might be useful to client
195 <para><command>Warning:</command> Only use these if you
196 <emphasis>really</emphasis> know what you are doing. They aren't
197 entirely reliable, and can cause Valgrind to crash. See
198 <filename>valgrind.h</filename> for more details.
204 <term><command><computeroutput>VALGRIND_PRINTF(format, ...)</computeroutput>:</command></term>
206 <para>Print a printf-style message to the Valgrind log file. The
207 message is prefixed with the PID between a pair of
208 <computeroutput>**</computeroutput> markers. (Like all client requests,
209 nothing is output if the client program is not running under Valgrind.)
210 Output is not produced until a newline is encountered, or subsequent
211 Valgrind output is printed; this allows you to build up a single line of
212 output over multiple calls. Returns the number of characters output,
213 excluding the PID prefix.</para>
218 <term><command><computeroutput>VALGRIND_PRINTF_BACKTRACE(format, ...)</computeroutput>:</command></term>
220 <para>Like <computeroutput>VALGRIND_PRINTF</computeroutput> (in
221 particular, the return value is identical), but prints a stack backtrace
222 immediately afterwards.</para>
227 <term><command><computeroutput>VALGRIND_MONITOR_COMMAND(command)</computeroutput>:</command></term>
229 <para>Execute the given monitor command (a string).
230 Returns 0 if command is recognised. Returns 1 if command is not recognised.
231 Note that some monitor commands provide access to a functionality
232 also accessible via a specific client request. For example,
233 memcheck leak search can be requested from the client program
234 using VALGRIND_DO_LEAK_CHECK or via the monitor command "leak_search".
235 Note that the syntax of the command string is only verified at
236 run-time. So, if it exists, it is preferable to use a specific
237 client request to have better compile time verifications of the
244 <term><command><computeroutput>VALGRIND_STACK_REGISTER(start, end)</computeroutput>:</command></term>
246 <para>Registers a new stack. Informs Valgrind that the memory range
247 between start and end is a unique stack. Returns a stack identifier
248 that can be used with other
249 <computeroutput>VALGRIND_STACK_*</computeroutput> calls.</para>
250 <para>Valgrind will use this information to determine if a change
251 to the stack pointer is an item pushed onto the stack or a change
252 over to a new stack. Use this if you're using a user-level thread
253 package and are noticing crashes in stack trace recording or
254 spurious errors from Valgrind about uninitialized memory
257 <para><command>Warning:</command> Unfortunately, this client request is
258 unreliable and best avoided.</para>
263 <term><command><computeroutput>VALGRIND_STACK_DEREGISTER(id)</computeroutput>:</command></term>
265 <para>Deregisters a previously registered stack. Informs
266 Valgrind that previously registered memory range with stack id
267 <computeroutput>id</computeroutput> is no longer a stack.</para>
269 <para><command>Warning:</command> Unfortunately, this client request is
270 unreliable and best avoided.</para>
275 <term><command><computeroutput>VALGRIND_STACK_CHANGE(id, start, end)</computeroutput>:</command></term>
277 <para>Changes a previously registered stack. Informs
278 Valgrind that the previously registered stack with stack id
279 <computeroutput>id</computeroutput> has changed its start and end
280 values. Use this if your user-level thread package implements
283 <para><command>Warning:</command> Unfortunately, this client request is
284 unreliable and best avoided.</para>
297 <!-- Referenced from both the manual and manpage -->
298 <sect1 id="&vg-gdbserver-id;"
299 xreflabel="&vg-gdbserver-label;">
300 <title>Debugging your program using Valgrind gdbserver and GDB</title>
302 <para>A program running under Valgrind is not executed directly by the
303 CPU. Instead it runs on a synthetic CPU provided by Valgrind. This is
304 why a debugger cannot debug your program when it runs on Valgrind.
307 This section describes how GDB can interact with the
308 Valgrind gdbserver to provide a fully debuggable program under
309 Valgrind. Used in this way, GDB also provides an interactive usage of
310 Valgrind core or tool functionalities, including incremental leak search
311 under Memcheck and on-demand Massif snapshot production.
314 <sect2 id="manual-core-adv.gdbserver-simple"
315 xreflabel="gdbserver simple example">
316 <title>Quick Start: debugging in 3 steps</title>
318 <para>The simplest way to get started is to run Valgrind with the
319 flag <option>--vgdb-error=0</option>. Then follow the on-screen
320 directions, which give you the precise commands needed to start GDB
321 and connect it to your program.</para>
323 <para>Otherwise, here's a slightly more verbose overview.</para>
325 <para>If you want to debug a program with GDB when using the Memcheck
326 tool, start Valgrind like this:
328 valgrind --vgdb=yes --vgdb-error=0 prog
331 <para>In another shell, start GDB:
336 <para>Then give the following command to GDB:
338 (gdb) target remote | vgdb
341 <para>You can now debug your program e.g. by inserting a breakpoint
342 and then using the GDB <computeroutput>continue</computeroutput>
345 <para>This quick start information is enough for basic usage of the
346 Valgrind gdbserver. The sections below describe more advanced
347 functionality provided by the combination of Valgrind and GDB. Note
348 that the command line flag <option>--vgdb=yes</option> can be omitted,
349 as this is the default value.
354 <sect2 id="manual-core-adv.gdbserver-concept"
355 xreflabel="gdbserver">
356 <title>Valgrind gdbserver overall organisation</title>
357 <para>The GNU GDB debugger is typically used to debug a process
358 running on the same machine. In this mode, GDB uses system calls to
359 control and query the program being debugged. This works well, but
360 only allows GDB to debug a program running on the same computer.
363 <para>GDB can also debug processes running on a different computer.
364 To achieve this, GDB defines a protocol (that is, a set of query and
365 reply packets) that facilitates fetching the value of memory or
366 registers, setting breakpoints, etc. A gdbserver is an implementation
367 of this "GDB remote debugging" protocol. To debug a process running
368 on a remote computer, a gdbserver (sometimes called a GDB stub)
369 must run at the remote computer side.
372 <para>The Valgrind core provides a built-in gdbserver implementation,
373 which is activated using <option>--vgdb=yes</option>
374 or <option>--vgdb=full</option>. This gdbserver allows the process
375 running on Valgrind's synthetic CPU to be debugged remotely.
376 GDB sends protocol query packets (such as "get register contents") to
377 the Valgrind embedded gdbserver. The gdbserver executes the queries
378 (for example, it will get the register values of the synthetic CPU)
379 and gives the results back to GDB.
382 <para>GDB can use various kinds of channels (TCP/IP, serial line, etc)
383 to communicate with the gdbserver. In the case of Valgrind's
384 gdbserver, communication is done via a pipe and a small helper program
385 called <xref linkend="&vg-vgdb-id;"/>, which acts as an
386 intermediary. If no GDB is in use, vgdb can also be
387 used to send monitor commands to the Valgrind gdbserver from a shell
393 <sect2 id="manual-core-adv.gdbserver-gdb"
394 xreflabel="Connecting GDB to a Valgrind gdbserver">
395 <title>Connecting GDB to a Valgrind gdbserver</title>
396 <para>To debug a program "<filename>prog</filename>" running under
397 Valgrind, you must ensure that the Valgrind gdbserver is activated by
398 specifying either <option>--vgdb=yes</option>
399 or <option>--vgdb=full</option>. A secondary command line option,
400 <option>--vgdb-error=number</option>, can be used to tell the gdbserver
401 only to become active once the specified number of errors have been
402 shown. A value of zero will therefore cause
403 the gdbserver to become active at startup, which allows you to
404 insert breakpoints before starting the run. For example:
406 valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prog
409 <para>The Valgrind gdbserver is invoked at startup
410 and indicates it is waiting for a connection from a GDB:</para>
412 <programlisting><![CDATA[
413 ==2418== Memcheck, a memory error detector
414 ==2418== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
415 ==2418== Using Valgrind-3.14.0.GIT and LibVEX; rerun with -h for copyright info
416 ==2418== Command: ./prog
418 ==2418== (action at startup) vgdb me ...
422 <para>GDB (in another shell) can then be connected to the Valgrind gdbserver.
423 For this, GDB must be started on the program <filename>prog</filename>:
429 <para>You then indicate to GDB that you want to debug a remote target:
431 (gdb) target remote | vgdb
433 GDB then starts a vgdb relay application to communicate with the
434 Valgrind embedded gdbserver:</para>
436 <programlisting><![CDATA[
437 (gdb) target remote | vgdb
438 Remote debugging using | vgdb
439 relaying data between gdb and process 2418
440 Reading symbols from /lib/ld-linux.so.2...done.
441 Reading symbols from /usr/lib/debug/lib/ld-2.11.2.so.debug...done.
442 Loaded symbols for /lib/ld-linux.so.2
443 [Switching to Thread 2418]
444 0x001f2850 in _start () from /lib/ld-linux.so.2
448 <para>Note that vgdb is provided as part of the Valgrind
449 distribution. You do not need to install it separately.</para>
451 <para>If vgdb detects that there are multiple Valgrind gdbservers that
452 can be connected to, it will list all such servers and their PIDs, and
453 then exit. You can then reissue the GDB "target" command, but
454 specifying the PID of the process you want to debug:
457 <programlisting><![CDATA[
458 (gdb) target remote | vgdb
459 Remote debugging using | vgdb
460 no --pid= arg given and multiple valgrind pids found:
461 use --pid=2479 for valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prog
462 use --pid=2481 for valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prog
463 use --pid=2483 for valgrind --vgdb=yes --vgdb-error=0 ./another_prog
464 Remote communication error: Resource temporarily unavailable.
465 (gdb) target remote | vgdb --pid=2479
466 Remote debugging using | vgdb --pid=2479
467 relaying data between gdb and process 2479
468 Reading symbols from /lib/ld-linux.so.2...done.
469 Reading symbols from /usr/lib/debug/lib/ld-2.11.2.so.debug...done.
470 Loaded symbols for /lib/ld-linux.so.2
471 [Switching to Thread 2479]
472 0x001f2850 in _start () from /lib/ld-linux.so.2
476 <para>Once GDB is connected to the Valgrind gdbserver, it can be used
477 in the same way as if you were debugging the program natively:</para>
480 <para>Breakpoints can be inserted or deleted.</para>
483 <para>Variables and register values can be examined or modified.
487 <para>Signal handling can be configured (printing, ignoring).
491 <para>Execution can be controlled (continue, step, next, stepi, etc).
495 <para>Program execution can be interrupted using Control-C.</para>
499 <para>And so on. Refer to the GDB user manual for a complete
500 description of GDB's functionality.
505 <sect2 id="manual-core-adv.gdbserver-gdb-android"
506 xreflabel="Connecting to an Android gdbserver">
507 <title>Connecting to an Android gdbserver</title>
508 <para> When developping applications for Android, you will typically use
509 a development system (on which the Android NDK is installed) to compile your
510 application. An Android target system or emulator will be used to run
512 In this setup, Valgrind and vgdb will run on the Android system,
513 while GDB will run on the development system. GDB will connect
514 to the vgdb running on the Android system using the Android NDK
515 'adb forward' application.
517 <para> Example: on the Android system, execute the following:
519 valgrind --vgdb-error=0 --vgdb=yes prog
520 # and then in another shell, run:
525 <para> On the development system, execute the following commands:
527 adb forward tcp:1234 tcp:1234
529 (gdb) target remote :1234
531 GDB will use a local tcp/ip connection to connect to the Android adb forwarder.
532 Adb will establish a relay connection between the host system and the Android
533 target system. Be sure to use the GDB delivered in the
534 Android NDK system (typically, arm-linux-androideabi-gdb), as the host
535 GDB is probably not able to debug Android arm applications.
536 Note that the local port nr (used by GDB) must not necessarily be equal
537 to the port number used by vgdb: adb can forward tcp/ip between different
541 <para>In the current release, the GDB server is not enabled by default
542 for Android, due to problems in establishing a suitable directory in
543 which Valgrind can create the necessary FIFOs (named pipes) for
544 communication purposes. You can stil try to use the GDB server, but
545 you will need to explicitly enable it using the flag
546 <computeroutput>--vgdb=yes</computeroutput> or
547 <computeroutput>--vgdb=full</computeroutput>.
550 <para>Additionally, you
551 will need to select a temporary directory which is (a) writable
552 by Valgrind, and (b) supports FIFOs. This is the main difficult
553 point. Often, <computeroutput>/sdcard</computeroutput> satisfies
554 requirement (a), but fails for (b) because it is a VFAT file system
555 and VFAT does not support pipes. Possibilities you could try are
556 <computeroutput>/data/local</computeroutput>,
557 <computeroutput>/data/local/Inst</computeroutput> (if you
558 installed Valgrind there), or
559 <computeroutput>/data/data/name.of.my.app</computeroutput>, if you
560 are running a specific application and it has its own directory of
561 that form. This last possibility may have the highest probability
564 <para>You can specify the temporary directory to use either via
565 the <computeroutput>--with-tmpdir=</computeroutput> configure time
566 flag, or by setting environment variable TMPDIR when running Valgrind
567 (on the Android device, not on the Android NDK development host).
568 Another alternative is to specify the directory for the FIFOs using
569 the <computeroutput>--vgdb-prefix=</computeroutput> Valgrind command
573 <para>We hope to have a better story for temporary directory handling
574 on Android in the future. The difficulty is that, unlike in standard
575 Unixes, there is no single temporary file directory that reliably
576 works across all devices and scenarios.
581 <sect2 id="manual-core-adv.gdbserver-commandhandling"
582 xreflabel="Monitor command handling by the Valgrind gdbserver">
583 <title>Monitor command handling by the Valgrind gdbserver</title>
585 <para> The Valgrind gdbserver provides additional Valgrind-specific
586 functionality via "monitor commands". Such monitor commands can be
587 sent from the GDB command line or from the shell command line or
588 requested by the client program using the VALGRIND_MONITOR_COMMAND
590 <xref linkend="&vg-monitor-id;"/> for the
591 list of the Valgrind core monitor commands available regardless of the
592 Valgrind tool selected.
595 <para>The following tools provide tool-specific monitor commands:
598 <para><xref linkend="mc-manual.monitor-commands"/></para>
601 <para><xref linkend="cl-manual.monitor-commands"/></para>
604 <para><xref linkend="ms-manual.monitor-commands"/></para>
607 <para><xref linkend="hg-manual.monitor-commands"/></para>
612 <para>An example of a tool specific monitor command is the Memcheck monitor
613 command <computeroutput>leak_check full
614 reachable any</computeroutput>. This requests a full reporting of the
615 allocated memory blocks. To have this leak check executed, use the GDB
618 (gdb) monitor leak_check full reachable any
622 <para>GDB will send the <computeroutput>leak_check</computeroutput>
623 command to the Valgrind gdbserver. The Valgrind gdbserver will
624 execute the monitor command itself, if it recognises it to be a Valgrind core
625 monitor command. If it is not recognised as such, it is assumed to
626 be tool-specific and is handed to the tool for execution. For example:
628 <programlisting><![CDATA[
629 (gdb) monitor leak_check full reachable any
630 ==2418== 100 bytes in 1 blocks are still reachable in loss record 1 of 1
631 ==2418== at 0x4006E9E: malloc (vg_replace_malloc.c:236)
632 ==2418== by 0x804884F: main (prog.c:88)
634 ==2418== LEAK SUMMARY:
635 ==2418== definitely lost: 0 bytes in 0 blocks
636 ==2418== indirectly lost: 0 bytes in 0 blocks
637 ==2418== possibly lost: 0 bytes in 0 blocks
638 ==2418== still reachable: 100 bytes in 1 blocks
639 ==2418== suppressed: 0 bytes in 0 blocks
644 <para>As with other GDB commands, the Valgrind gdbserver will accept
645 abbreviated monitor command names and arguments, as long as the given
646 abbreviation is unambiguous. For example, the above
647 <computeroutput>leak_check</computeroutput>
648 command can also be typed as:
653 The letters <computeroutput>mo</computeroutput> are recognised by GDB as being
654 an abbreviation for <computeroutput>monitor</computeroutput>. So GDB sends the
655 string <computeroutput>l f r a</computeroutput> to the Valgrind
656 gdbserver. The letters provided in this string are unambiguous for the
657 Valgrind gdbserver. This therefore gives the same output as the
658 unabbreviated command and arguments. If the provided abbreviation is
659 ambiguous, the Valgrind gdbserver will report the list of commands (or
660 argument values) that can match:
661 <programlisting><![CDATA[
663 v. can match v.set v.info v.wait v.kill v.translate v.do
665 n_errs_found 0 n_errs_shown 0 (vgdb-error 0)
670 <para>Instead of sending a monitor command from GDB, you can also send
671 these from a shell command line. For example, the following command
672 lines, when given in a shell, will cause the same leak search to be executed
675 vgdb --pid=3145 leak_check full reachable any
676 vgdb --pid=3145 l f r a
679 <para>Note that the Valgrind gdbserver automatically continues the
680 execution of the program after a standalone invocation of
681 vgdb. Monitor commands sent from GDB do not cause the program to
682 continue: the program execution is controlled explicitly using GDB
683 commands such as "continue" or "next".</para>
687 <sect2 id="manual-core-adv.gdbserver-threads"
688 xreflabel="Valgrind gdbserver thread information">
689 <title>Valgrind gdbserver thread information</title>
691 <para>Valgrind's gdbserver enriches the output of the
692 GDB <computeroutput>info threads</computeroutput> command
693 with Valgrind-specific information.
694 The operating system's thread number is followed
695 by Valgrind's internal index for that thread ("tid") and by
696 the Valgrind scheduler thread state:</para>
698 <programlisting><![CDATA[
700 4 Thread 6239 (tid 4 VgTs_Yielding) 0x001f2832 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
701 * 3 Thread 6238 (tid 3 VgTs_Runnable) make_error (s=0x8048b76 "called from London") at prog.c:20
702 2 Thread 6237 (tid 2 VgTs_WaitSys) 0x001f2832 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
703 1 Thread 6234 (tid 1 VgTs_Yielding) main (argc=1, argv=0xbedcc274) at prog.c:105
709 <sect2 id="manual-core-adv.gdbserver-shadowregisters"
710 xreflabel="Examining and modifying Valgrind shadow registers">
711 <title>Examining and modifying Valgrind shadow registers</title>
713 <para> When the option <option>--vgdb-shadow-registers=yes</option> is
714 given, the Valgrind gdbserver will let GDB examine and/or modify
715 Valgrind's shadow registers. GDB version 7.1 or later is needed for this
716 to work. For x86 and amd64, GDB version 7.2 or later is needed.</para>
718 <para>For each CPU register, the Valgrind core maintains two
719 shadow register sets. These shadow registers can be accessed from
720 GDB by giving a postfix <computeroutput>s1</computeroutput>
721 or <computeroutput>s2</computeroutput> for respectively the first
722 and second shadow register. For example, the x86 register
723 <computeroutput>eax</computeroutput> and its two shadows
724 can be examined using the following commands:</para>
726 <programlisting><![CDATA[
736 <para>Float shadow registers are shown by GDB as unsigned integer
737 values instead of float values, as it is expected that these
738 shadow values are mostly used for memcheck validity bits. </para>
740 <para>Intel/amd64 AVX registers <computeroutput>ymm0</computeroutput>
741 to <computeroutput>ymm15</computeroutput> have also their shadow
742 registers. However, GDB presents the shadow values using two
743 "half" registers. For example, the half shadow registers for
744 <computeroutput>ymm9</computeroutput> are
745 <computeroutput>xmm9s1</computeroutput> (lower half for set 1),
746 <computeroutput>ymm9hs1</computeroutput> (upper half for set 1),
747 <computeroutput>xmm9s2</computeroutput> (lower half for set 2),
748 <computeroutput>ymm9hs2</computeroutput> (upper half for set 2).
749 Note the inconsistent notation for the names of the half registers:
750 the lower part starts with an <computeroutput>x</computeroutput>,
751 the upper part starts with an <computeroutput>y</computeroutput>
752 and has an <computeroutput>h</computeroutput> before the shadow postfix.
754 <para>The special presentation of the AVX shadow registers is due to
755 the fact that GDB independently retrieves the lower and upper half of
756 the <computeroutput>ymm</computeroutput> registers. GDB does not
757 however know that the shadow half registers have to be shown combined.
762 <sect2 id="manual-core-adv.gdbserver-limitations"
763 xreflabel="Limitations of the Valgrind gdbserver">
764 <title>Limitations of the Valgrind gdbserver</title>
766 <para>Debugging with the Valgrind gdbserver is very similar to native
767 debugging. Valgrind's gdbserver implementation is quite
768 complete, and so provides most of the GDB debugging functionality. There
769 are however some limitations and peculiarities:</para>
772 <para>Precision of "stop-at" commands.</para>
774 GDB commands such as "step", "next", "stepi", breakpoints
775 and watchpoints, will stop the execution of the process. With
776 the option <option>--vgdb=yes</option>, the process might not
777 stop at the exact requested instruction. Instead, it might
778 continue execution of the current basic block and stop at one
779 of the following basic blocks. This is linked to the fact that
780 Valgrind gdbserver has to instrument a block to allow stopping
781 at the exact instruction requested. Currently,
782 re-instrumentation of the block currently being executed is not
783 supported. So, if the action requested by GDB (e.g. single
784 stepping or inserting a breakpoint) implies re-instrumentation
785 of the current block, the GDB action may not be executed
789 This limitation applies when the basic block
790 currently being executed has not yet been instrumented for debugging.
791 This typically happens when the gdbserver is activated due to the
792 tool reporting an error or to a watchpoint. If the gdbserver
793 block has been activated following a breakpoint, or if a
794 breakpoint has been inserted in the block before its execution,
795 then the block has already been instrumented for debugging.
798 If you use the option <option>--vgdb=full</option>, then GDB
799 "stop-at" commands will be obeyed precisely. The
800 downside is that this requires each instruction to be
801 instrumented with an additional call to a gdbserver helper
802 function, which gives considerable overhead (+500% for memcheck)
803 compared to <option>--vgdb=no</option>.
804 Option <option>--vgdb=yes</option> has neglectible overhead compared
805 to <option>--vgdb=no</option>.
810 <para>Processor registers and flags values.</para>
811 <para>When Valgrind gdbserver stops on an error, on a breakpoint
812 or when single stepping, registers and flags values might not be always
813 up to date due to the optimisations done by the Valgrind core.
815 <option>--vex-iropt-register-updates=unwindregs-at-mem-access</option>
816 ensures that the registers needed to make a stack trace (typically
817 PC/SP/FP) are up to date at each memory access (i.e. memory exception
819 Disabling some optimisations using the following values will increase
820 the precision of registers and flags values (a typical performance
821 impact for memcheck is given for each option).
824 <option>--vex-iropt-register-updates=allregs-at-mem-access</option> (+10%)
825 ensures that all registers and flags are up to date at each memory
829 <option>--vex-iropt-register-updates=allregs-at-each-insn</option> (+25%)
830 ensures that all registers and flags are up to date at each instruction.
833 Note that <option>--vgdb=full</option> (+500%, see above
834 Precision of "stop-at" commands) automatically
835 activates <option>--vex-iropt-register-updates=allregs-at-each-insn</option>.
840 <para>Hardware watchpoint support by the Valgrind
843 <para> The Valgrind gdbserver can simulate hardware watchpoints
844 if the selected tool provides support for it. Currently,
845 only Memcheck provides hardware watchpoint simulation. The
846 hardware watchpoint simulation provided by Memcheck is much
847 faster that GDB software watchpoints, which are implemented by
848 GDB checking the value of the watched zone(s) after each
849 instruction. Hardware watchpoint simulation also provides read
850 watchpoints. The hardware watchpoint simulation by Memcheck has
851 some limitations compared to real hardware
852 watchpoints. However, the number and length of simulated
853 watchpoints are not limited.
855 <para>Typically, the number of (real) hardware watchpoints is
856 limited. For example, the x86 architecture supports a maximum of
857 4 hardware watchpoints, each watchpoint watching 1, 2, 4 or 8
858 bytes. The Valgrind gdbserver does not have any limitation on the
859 number of simulated hardware watchpoints. It also has no
860 limitation on the length of the memory zone being
861 watched. Using GDB version 7.4 or later allow full use of the
862 flexibility of the Valgrind gdbserver's simulated hardware watchpoints.
863 Previous GDB versions do not understand that Valgrind gdbserver
864 watchpoints have no length limit.
866 <para>Memcheck implements hardware watchpoint simulation by
867 marking the watched address ranges as being unaddressable. When
868 a hardware watchpoint is removed, the range is marked as
869 addressable and defined. Hardware watchpoint simulation of
870 addressable-but-undefined memory zones works properly, but has
871 the undesirable side effect of marking the zone as defined when
872 the watchpoint is removed.
874 <para>Write watchpoints might not be reported at the
875 exact instruction that writes the monitored area,
876 unless option <option>--vgdb=full</option> is given. Read watchpoints
877 will always be reported at the exact instruction reading the
880 <para>It is better to avoid using hardware watchpoint of not
881 addressable (yet) memory: in such a case, GDB will fall back to
882 extremely slow software watchpoints. Also, if you do not quit GDB
883 between two debugging sessions, the hardware watchpoints of the
884 previous sessions will be re-inserted as software watchpoints if
885 the watched memory zone is not addressable at program startup.
890 <para>Stepping inside shared libraries on ARM.</para>
891 <para>For unknown reasons, stepping inside shared
892 libraries on ARM may fail. A workaround is to use the
893 <computeroutput>ldd</computeroutput> command
894 to find the list of shared libraries and their loading address
895 and inform GDB of the loading address using the GDB command
896 "add-symbol-file". Example:
897 <programlisting><![CDATA[
898 (gdb) shell ldd ./prog
899 libc.so.6 => /lib/libc.so.6 (0x4002c000)
900 /lib/ld-linux.so.3 (0x40000000)
901 (gdb) add-symbol-file /lib/libc.so.6 0x4002c000
902 add symbol table from file "/lib/libc.so.6" at
903 .text_addr = 0x4002c000
905 Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
912 <para>GDB version needed for ARM and PPC32/64.</para>
913 <para>You must use a GDB version which is able to read XML
914 target description sent by a gdbserver. This is the standard setup
915 if GDB was configured and built with the "expat"
916 library. If your GDB was not configured with XML support, it
917 will report an error message when using the "target"
918 command. Debugging will not work because GDB will then not be
919 able to fetch the registers from the Valgrind gdbserver.
920 For ARM programs using the Thumb instruction set, you must use
921 a GDB version of 7.1 or later, as earlier versions have problems
922 with next/step/breakpoints in Thumb code.
927 <para>Stack unwinding on PPC32/PPC64. </para>
928 <para>On PPC32/PPC64, stack unwinding for leaf functions
929 (functions that do not call any other functions) works properly
930 only when you give the option
931 <option>--vex-iropt-register-updates=allregs-at-mem-access</option>
932 or <option>--vex-iropt-register-updates=allregs-at-each-insn</option>.
933 You must also pass this option in order to get a precise stack when
934 a signal is trapped by GDB.
939 <para>Breakpoints encountered multiple times.</para>
940 <para>Some instructions (e.g. x86 "rep movsb")
941 are translated by Valgrind using a loop. If a breakpoint is placed
942 on such an instruction, the breakpoint will be encountered
943 multiple times -- once for each step of the "implicit" loop
944 implementing the instruction.
949 <para>Execution of Inferior function calls by the Valgrind
952 <para>GDB allows the user to "call" functions inside the process
953 being debugged. Such calls are named "inferior calls" in the GDB
954 terminology. A typical use of an inferior call is to execute
955 a function that prints a human-readable version of a complex data
956 structure. To make an inferior call, use the GDB "print" command
957 followed by the function to call and its arguments. As an
958 example, the following GDB command causes an inferior call to the
959 libc "printf" function to be executed by the process
962 <programlisting><![CDATA[
963 (gdb) p printf("process being debugged has pid %d\n", getpid())
968 <para>The Valgrind gdbserver supports inferior function calls.
969 Whilst an inferior call is running, the Valgrind tool will report
970 errors as usual. If you do not want to have such errors stop the
971 execution of the inferior call, you can
972 use <computeroutput>v.set vgdb-error</computeroutput> to set a
973 big value before the call, then manually reset it to its original
974 value when the call is complete.</para>
976 <para>To execute inferior calls, GDB changes registers such as
977 the program counter, and then continues the execution of the
978 program. In a multithreaded program, all threads are continued,
979 not just the thread instructed to make the inferior call. If
980 another thread reports an error or encounters a breakpoint, the
981 evaluation of the inferior call is abandoned.</para>
983 <para>Note that inferior function calls are a powerful GDB
984 feature, but should be used with caution. For example, if
985 the program being debugged is stopped inside the function "printf",
986 forcing a recursive call to printf via an inferior call will
987 very probably create problems. The Valgrind tool might also add
988 another level of complexity to inferior calls, e.g. by reporting
989 tool errors during the Inferior call or due to the
990 instrumentation done.
996 <para>Connecting to or interrupting a Valgrind process blocked in
997 a system call.</para>
999 <para>Connecting to or interrupting a Valgrind process blocked in
1000 a system call requires the "ptrace" system call to be usable.
1001 This may be disabled in your kernel for security reasons.
1004 <para>When running your program, Valgrind's scheduler
1005 periodically checks whether there is any work to be handled by
1006 the gdbserver. Unfortunately this check is only done if at least
1007 one thread of the process is runnable. If all the threads of the
1008 process are blocked in a system call, then the checks do not
1009 happen, and the Valgrind scheduler will not invoke the gdbserver.
1010 In such a case, the vgdb relay application will "force" the
1011 gdbserver to be invoked, without the intervention of the Valgrind
1015 <para>Such forced invocation of the Valgrind gdbserver is
1016 implemented by vgdb using ptrace system calls. On a properly
1017 implemented kernel, the ptrace calls done by vgdb will not
1018 influence the behaviour of the program running under Valgrind.
1019 If however they do, giving the
1020 option <option>--max-invoke-ms=0</option> to the vgdb relay
1021 application will disable the usage of ptrace calls. The
1022 consequence of disabling ptrace usage in vgdb is that a Valgrind
1023 process blocked in a system call cannot be woken up or
1024 interrupted from GDB until it executes enough basic blocks to let
1025 the Valgrind scheduler's normal checking take effect.
1028 <para>When ptrace is disabled in vgdb, you can increase the
1029 responsiveness of the Valgrind gdbserver to commands or
1030 interrupts by giving a lower value to the
1031 option <option>--vgdb-poll</option>. If your application is
1032 blocked in system calls most of the time, using a very low value
1033 for <option>--vgdb-poll</option> will cause a the gdbserver to be
1034 invoked sooner. The gdbserver polling done by Valgrind's
1035 scheduler is very efficient, so the increased polling frequency
1036 should not cause significant performance degradation.
1039 <para>When ptrace is disabled in vgdb, a query packet sent by GDB
1040 may take significant time to be handled by the Valgrind
1041 gdbserver. In such cases, GDB might encounter a protocol
1042 timeout. To avoid this,
1043 you can increase the value of the timeout by using the GDB
1044 command "set remotetimeout".
1047 <para>Ubuntu versions 10.10 and later may restrict the scope of
1048 ptrace to the children of the process calling ptrace. As the
1049 Valgrind process is not a child of vgdb, such restricted scoping
1050 causes the ptrace calls to fail. To avoid that, Valgrind will
1051 automatically allow all processes belonging to the same userid to
1052 "ptrace" a Valgrind process, by using PR_SET_PTRACER.</para>
1054 <para>Unblocking processes blocked in system calls is not
1055 currently implemented on Mac OS X and Android. So you cannot
1056 connect to or interrupt a process blocked in a system call on Mac
1060 <para>Unblocking processes blocked in system calls is implemented
1061 via agent thread on Solaris. This is quite a different approach
1062 than using ptrace on Linux, but leads to equivalent result - Valgrind
1063 gdbserver is invoked. Note that agent thread is a Solaris OS
1064 feature and cannot be disabled.
1069 <para>Changing register values.</para>
1070 <para>The Valgrind gdbserver will only modify the values of the
1071 thread's registers when the thread is in status Runnable or
1072 Yielding. In other states (typically, WaitSys), attempts to
1073 change register values will fail. Amongst other things, this
1074 means that inferior calls are not executed for a thread which is
1075 in a system call, since the Valgrind gdbserver does not implement
1076 system call restart.
1081 <para>Unsupported GDB functionality.</para>
1082 <para>GDB provides a lot of debugging functionality and not all
1083 of it is supported. Specifically, the following are not
1084 supported: reversible debugging and tracepoints.
1089 <para>Unknown limitations or problems.</para>
1090 <para>The combination of GDB, Valgrind and the Valgrind gdbserver
1091 probably has unknown other limitations and problems. If you
1092 encounter strange or unexpected behaviour, feel free to report a
1093 bug. But first please verify that the limitation or problem is
1094 not inherent to GDB or the GDB remote protocol. You may be able
1095 to do so by checking the behaviour when using standard gdbserver
1096 part of the GDB package.
1104 <!-- Referenced from both the manual and manpage -->
1105 <sect2 id="&vg-vgdb-id;"
1106 xreflabel="&vg-vgdb-label;">
1107 <title>vgdb command line options</title>
1108 <para> Usage: <computeroutput>vgdb [OPTION]... [[-c] COMMAND]...</computeroutput></para>
1110 <para> vgdb ("Valgrind to GDB") is a small program that is used as an
1111 intermediary between Valgrind and GDB or a shell.
1112 Therefore, it has two usage modes:
1114 <!-- start of xi:include in the manpage -->
1115 <orderedlist id="vgdb.desc.modes">
1116 <listitem id="manual-core-adv.vgdb-standalone" xreflabel="vgdb standalone">
1117 <para>As a standalone utility, it is used from a shell command
1118 line to send monitor commands to a process running under
1119 Valgrind. For this usage, the vgdb OPTION(s) must be followed by
1120 the monitor command to send. To send more than one command,
1121 separate them with the <option>-c</option> option.
1125 <listitem id="manual-core-adv.vgdb-relay" xreflabel="vgdb relay">
1126 <para>In combination with GDB "target remote |" command, it is
1127 used as the relay application between GDB and the Valgrind
1128 gdbserver. For this usage, only OPTION(s) can be given, but no
1129 COMMAND can be given.
1134 <!-- end of xi:include in the manpage -->
1136 <para><computeroutput>vgdb</computeroutput> accepts the following
1138 <!-- start of xi:include in the manpage -->
1139 <variablelist id="vgdb.opts.list">
1141 <term><option>--pid=<number></option></term>
1142 <listitem><para>Specifies the PID of
1143 the process to which vgdb must connect to. This option is useful
1144 in case more than one Valgrind gdbserver can be connected to. If
1145 the <option>--pid</option> argument is not given and multiple
1146 Valgrind gdbserver processes are running, vgdb will report the
1147 list of such processes and then exit.</para></listitem>
1151 <term><option>--vgdb-prefix</option></term>
1152 <listitem><para>Must be given to both
1153 Valgrind and vgdb if you want to change the default prefix for the
1154 FIFOs (named pipes) used for communication between the Valgrind
1155 gdbserver and vgdb.</para></listitem>
1159 <term><option>--wait=<number></option></term>
1160 <listitem><para>Instructs vgdb to
1161 search for available Valgrind gdbservers for the specified number
1162 of seconds. This makes it possible start a vgdb process
1163 before starting the Valgrind gdbserver with which you intend the
1164 vgdb to communicate. This option is useful when used in
1165 conjunction with a <option>--vgdb-prefix</option> that is
1166 unique to the process you want to wait for.
1167 Also, if you use the <option>--wait</option> argument in the GDB
1168 "target remote" command, you must set the GDB remotetimeout to a
1169 value bigger than the --wait argument value. See option
1170 <option>--max-invoke-ms</option> (just below)
1171 for an example of setting the remotetimeout value.</para></listitem>
1175 <term><option>--max-invoke-ms=<number></option></term>
1176 <listitem><para>Gives the
1177 number of milliseconds after which vgdb will force the invocation
1178 of gdbserver embedded in Valgrind. The default value is 100
1179 milliseconds. A value of 0 disables forced invocation. The forced
1180 invocation is used when vgdb is connected to a Valgrind gdbserver,
1181 and the Valgrind process has all its threads blocked in a system
1185 <para>If you specify a large value, you might need to increase the
1186 GDB "remotetimeout" value from its default value of 2 seconds.
1187 You should ensure that the timeout (in seconds) is
1188 bigger than the <option>--max-invoke-ms</option> value. For
1189 example, for <option>--max-invoke-ms=5000</option>, the following
1190 GDB command is suitable:
1192 (gdb) set remotetimeout 6
1198 <term><option>--cmd-time-out=<number></option></term>
1199 <listitem><para>Instructs a
1200 standalone vgdb to exit if the Valgrind gdbserver it is connected
1201 to does not process a command in the specified number of seconds.
1202 The default value is to never time out.</para></listitem>
1206 <term><option>--port=<portnr></option></term>
1207 <listitem><para>Instructs vgdb to
1208 use tcp/ip and listen for GDB on the specified port nr rather than
1209 to use a pipe to communicate with GDB. Using tcp/ip allows to have
1210 GDB running on one computer and debugging a Valgrind process
1211 running on another target computer.
1214 # On the target computer, start your program under valgrind using
1215 valgrind --vgdb-error=0 prog
1216 # and then in another shell, run:
1219 <para>On the computer which hosts GDB, execute the command:
1222 (gdb) target remote targetip:1234
1224 where targetip is the ip address or hostname of the target computer.
1229 <term><option>-c</option></term>
1230 <listitem><para>To give more than one command to a
1231 standalone vgdb, separate the commands by an
1232 option <option>-c</option>. Example:
1234 vgdb v.set log_output -c leak_check any
1235 ]]></screen></para></listitem>
1239 <term><option>-l</option></term>
1240 <listitem><para>Instructs a standalone vgdb to report
1241 the list of the Valgrind gdbserver processes running and then
1242 exit.</para></listitem>
1246 <term><option>-D</option></term>
1247 <listitem><para>Instructs a standalone vgdb to show the
1248 state of the shared memory used by the Valgrind gdbserver. vgdb
1249 will exit after having shown the Valgrind gdbserver shared memory
1250 state.</para></listitem>
1254 <term><option>-d</option></term>
1255 <listitem><para>Instructs vgdb to produce debugging
1256 output. Give multiple <option>-d</option> args to increase the
1257 verbosity. When giving <option>-d</option> to a relay vgdb, you better
1258 redirect the standard error (stderr) of vgdb to a file to avoid
1259 interaction between GDB and vgdb debugging output.</para></listitem>
1263 <!-- end of xi:include in the manpage -->
1268 <!-- Referenced from both the manual and manpage -->
1269 <sect2 id="&vg-monitor-id;"
1270 xreflabel="&vg-monitor-label;">
1271 <title>Valgrind monitor commands</title>
1273 <para>This section describes the Valgrind monitor commands, available
1274 regardless of the Valgrind tool selected. For the tool specific
1275 commands, refer to <xref linkend="mc-manual.monitor-commands"/>,
1276 <xref linkend="hg-manual.monitor-commands"/>,
1277 <xref linkend="cl-manual.monitor-commands"/> and
1278 <xref linkend="ms-manual.monitor-commands"/>. </para>
1280 <para> The monitor commands can be sent either from a shell command line, by using a
1281 standalone vgdb, or from GDB, by using GDB's "monitor"
1282 command (see <xref linkend="manual-core-adv.gdbserver-commandhandling"/>).
1283 They can also be launched by the client program, using the VALGRIND_MONITOR_COMMAND
1289 <para><varname>help [debug]</varname> instructs Valgrind's gdbserver
1290 to give the list of all monitor commands of the Valgrind core and
1291 of the tool. The optional "debug" argument tells to also give help
1292 for the monitor commands aimed at Valgrind internals debugging.
1297 <para><varname>v.info all_errors</varname> shows all errors found
1301 <para><varname>v.info last_error</varname> shows the last error
1306 <para><varname>v.info location <addr></varname> outputs
1307 information about the location <addr>. Possibly, the
1308 following are described: global variables, local (stack)
1309 variables, allocated or freed blocks, ... The information
1310 produced depends on the tool and on the options given to valgrind.
1311 Some tools (e.g. memcheck and helgrind) produce more detailed
1312 information for client heap blocks. For example, these tools show
1313 the stacktrace where the heap block was allocated. If a tool does
1314 not replace the malloc/free/... functions, then client heap blocks
1315 will not be described. Use the
1316 option <varname>--read-var-info=yes</varname> to obtain more
1317 detailed information about global or local (stack) variables.
1319 <programlisting><![CDATA[
1320 (gdb) monitor v.info location 0x8050b20
1321 Location 0x8050b20 is 0 bytes inside global var "mx"
1322 declared at tc19_shadowmem.c:19
1324 (gdb) mo v.in loc 0x582f33c
1325 Location 0x582f33c is 0 bytes inside local var "info"
1326 declared at tc19_shadowmem.c:282, in frame #1 of thread 3
1328 ]]></programlisting>
1332 <para><varname>v.info n_errs_found [msg]</varname> shows the number of
1333 errors found so far, the nr of errors shown so far and the current
1334 value of the <option>--vgdb-error</option> argument. The optional
1335 <computeroutput>msg</computeroutput> (one or more words) is appended.
1336 Typically, this can be used to insert markers in a process output
1337 file between several tests executed in sequence by a process
1338 started only once. This allows to associate the errors reported
1339 by Valgrind with the specific test that produced these errors.
1344 <para><varname>v.info open_fds</varname> shows the list of open file
1345 descriptors and details related to the file descriptor.
1346 This only works if <option>--track-fds=yes</option>
1347 was given at Valgrind startup.</para>
1351 <para><varname>v.set {gdb_output | log_output |
1352 mixed_output}</varname> allows redirection of the Valgrind output
1353 (e.g. the errors detected by the tool). The default setting is
1354 <computeroutput>mixed_output</computeroutput>.</para>
1356 <para>With <computeroutput>mixed_output</computeroutput>, the
1357 Valgrind output goes to the Valgrind log (typically stderr) while
1358 the output of the interactive GDB monitor commands (e.g.
1359 <computeroutput>v.info last_error</computeroutput>)
1360 is displayed by GDB.</para>
1362 <para>With <computeroutput>gdb_output</computeroutput>, both the
1363 Valgrind output and the interactive GDB monitor commands output are
1364 displayed by GDB.</para>
1366 <para>With <computeroutput>log_output</computeroutput>, both the
1367 Valgrind output and the interactive GDB monitor commands output go
1368 to the Valgrind log.</para>
1372 <para><varname>v.wait [ms (default 0)]</varname> instructs
1373 Valgrind gdbserver to sleep "ms" milli-seconds and then
1374 continue. When sent from a standalone vgdb, if this is the last
1375 command, the Valgrind process will continue the execution of the
1376 guest process. The typical usage of this is to use vgdb to send a
1377 "no-op" command to a Valgrind gdbserver so as to continue the
1378 execution of the guest process.
1383 <para><varname>v.kill</varname> requests the gdbserver to kill
1384 the process. This can be used from a standalone vgdb to properly
1385 kill a Valgrind process which is currently expecting a vgdb
1390 <para><varname>v.set vgdb-error <errornr></varname>
1391 dynamically changes the value of the
1392 <option>--vgdb-error</option> argument. A
1393 typical usage of this is to start with
1394 <option>--vgdb-error=0</option> on the
1395 command line, then set a few breakpoints, set the vgdb-error value
1396 to a huge value and continue execution.</para>
1400 <para><varname>xtmemory [<filename> default xtmemory.kcg.%p.%n]</varname>
1401 requests the tool (Memcheck, Massif, Helgrind) to produce an xtree heap memory report.
1402 See <xref linkend="manual-core.xtree"/> for
1403 a detailed explanation about execution trees. </para>
1408 <para>The following Valgrind monitor commands are useful for
1409 investigating the behaviour of Valgrind or its gdbserver in case of
1410 problems or bugs.</para>
1415 <para><varname>v.do expensive_sanity_check_general</varname>
1416 executes various sanity checks. In particular, the sanity of the
1417 Valgrind heap is verified. This can be useful if you suspect that
1418 your program and/or Valgrind has a bug corrupting Valgrind data
1419 structure. It can also be used when a Valgrind tool
1420 reports a client error to the connected GDB, in order to verify
1421 the sanity of Valgrind before continuing the execution.
1426 <para><varname>v.info gdbserver_status</varname> shows the
1427 gdbserver status. In case of problems (e.g. of communications),
1428 this shows the values of some relevant Valgrind gdbserver internal
1429 variables. Note that the variables related to breakpoints and
1430 watchpoints (e.g. the number of breakpoint addresses and the number of
1431 watchpoints) will be zero, as GDB by default removes all
1432 watchpoints and breakpoints when execution stops, and re-inserts
1433 them when resuming the execution of the debugged process. You can
1434 change this GDB behaviour by using the GDB command
1435 <computeroutput>set breakpoint always-inserted on</computeroutput>.
1440 <para><varname>v.info memory [aspacemgr]</varname> shows the statistics of
1441 Valgrind's internal heap management. If
1442 option <option>--profile-heap=yes</option> was given, detailed
1443 statistics will be output. With the optional argument
1444 <computeroutput>aspacemgr</computeroutput>. the segment list maintained
1445 by valgrind address space manager will be output. Note that
1446 this list of segments is always output on the Valgrind log.
1451 <para><varname>v.info exectxt</varname> shows information about
1452 the "executable contexts" (i.e. the stack traces) recorded by
1453 Valgrind. For some programs, Valgrind can record a very high
1454 number of such stack traces, causing a high memory usage. This
1455 monitor command shows all the recorded stack traces, followed by
1456 some statistics. This can be used to analyse the reason for having
1457 a big number of stack traces. Typically, you will use this command
1458 if <varname>v.info memory</varname> has shown significant memory
1459 usage by the "exectxt" arena.
1464 <para><varname>v.info scheduler</varname> shows various
1465 information about threads. First, it outputs the host stack trace,
1466 i.e. the Valgrind code being executed. Then, for each thread, it
1467 outputs the thread state. For non terminated threads, the state is
1468 followed by the guest (client) stack trace. Finally, for each
1469 active thread or for each terminated thread slot not yet re-used,
1470 it shows the max usage of the valgrind stack.</para>
1471 <para>Showing the client stack traces allows to compare the stack
1472 traces produced by the Valgrind unwinder with the stack traces
1473 produced by GDB+Valgrind gdbserver. Pay attention that GDB and
1474 Valgrind scheduler status have their own thread numbering
1475 scheme. To make the link between the GDB thread number and the
1476 corresponding Valgrind scheduler thread number, use the GDB
1477 command <computeroutput>info threads</computeroutput>. The output
1478 of this command shows the GDB thread number and the valgrind
1479 'tid'. The 'tid' is the thread number output
1480 by <computeroutput>v.info scheduler</computeroutput>. When using
1481 the callgrind tool, the callgrind monitor command
1482 <computeroutput>status</computeroutput> outputs internal callgrind
1483 information about the stack/call graph it maintains.
1488 <para><varname>v.info stats</varname> shows various valgrind core and
1489 tool statistics. With this, Valgrind and tool statistics can
1490 be examined while running, even without option <option>--stats=yes</option>.
1495 <para><varname>v.info unwind <addr> [<len>]</varname> shows
1496 the CFI unwind debug info for the address range [addr, addr+len-1].
1497 The default value of <len> is 1, giving the unwind information
1498 for the instruction at <addr>.
1503 <para><varname>v.set debuglog <intvalue></varname> sets the
1504 Valgrind debug log level to <intvalue>. This allows to
1505 dynamically change the log level of Valgrind e.g. when a problem
1510 <para><varname>v.set hostvisibility [yes*|no]</varname> The value
1511 "yes" indicates to gdbserver that GDB can look at the Valgrind
1512 'host' (internal) status/memory. "no" disables this access.
1513 When hostvisibility is activated, GDB can e.g. look at Valgrind
1514 global variables. As an example, to examine a Valgrind global
1515 variable of the memcheck tool on an x86, do the following setup:</para>
1518 (gdb) monitor v.set hostvisibility yes
1519 (gdb) add-symbol-file /path/to/tool/executable/file/memcheck-x86-linux 0x58000000
1520 add symbol table from file "/path/to/tool/executable/file/memcheck-x86-linux" at
1521 .text_addr = 0x58000000
1523 Reading symbols from /path/to/tool/executable/file/memcheck-x86-linux...done.
1527 <para>After that, variables defined in memcheck-x86-linux can be accessed, e.g.</para>
1530 (gdb) p /x vgPlain_threads[1].os_state
1531 $3 = {lwpid = 0x4688, threadgroup = 0x4688, parent = 0x0,
1532 valgrind_stack_base = 0x62e78000, valgrind_stack_init_SP = 0x62f79fe0,
1533 exitcode = 0x0, fatalsig = 0x0}
1535 $5 = {iropt_verbosity = 0, iropt_level = 2,
1536 iropt_register_updates = VexRegUpdUnwindregsAtMemAccess,
1537 iropt_unroll_thresh = 120, guest_max_insns = 60, guest_chase_thresh = 10,
1538 guest_chase_cond = 0 '\000'}
1544 <para><varname>v.translate <address>
1545 [<traceflags>]</varname> shows the translation of the block
1546 containing <computeroutput>address</computeroutput> with the given
1547 trace flags. The <computeroutput>traceflags</computeroutput> value
1548 bit patterns have similar meaning to Valgrind's
1549 <option>--trace-flags</option> option. It can be given
1550 in hexadecimal (e.g. 0x20) or decimal (e.g. 32) or in binary 1s
1551 and 0s bit (e.g. 0b00100000). The default value of the traceflags
1552 is 0b00100000, corresponding to "show after instrumentation".
1553 The output of this command always goes to the Valgrind
1555 <para>The additional bit flag 0b100000000 (bit 8)
1556 has no equivalent in the <option>--trace-flags</option> option.
1557 It enables tracing of the gdbserver specific instrumentation. Note
1558 that this bit 8 can only enable the addition of gdbserver
1559 instrumentation in the trace. Setting it to 0 will not
1560 disable the tracing of the gdbserver instrumentation if it is
1561 active for some other reason, for example because there is a breakpoint at
1562 this address or because gdbserver is in single stepping
1576 <sect1 id="manual-core-adv.wrapping" xreflabel="Function Wrapping">
1577 <title>Function wrapping</title>
1580 Valgrind allows calls to some specified functions to be intercepted and
1581 rerouted to a different, user-supplied function. This can do whatever it
1582 likes, typically examining the arguments, calling onwards to the original,
1583 and possibly examining the result. Any number of functions may be
1587 Function wrapping is useful for instrumenting an API in some way. For
1588 example, Helgrind wraps functions in the POSIX pthreads API so it can know
1589 about thread status changes, and the core is able to wrap
1590 functions in the MPI (message-passing) API so it can know
1591 of memory status changes associated with message arrival/departure.
1592 Such information is usually passed to Valgrind by using client
1593 requests in the wrapper functions, although the exact mechanism may vary.
1596 <sect2 id="manual-core-adv.wrapping.example" xreflabel="A Simple Example">
1597 <title>A Simple Example</title>
1599 <para>Supposing we want to wrap some function</para>
1601 <programlisting><![CDATA[
1602 int foo ( int x, int y ) { return x + y; }]]></programlisting>
1604 <para>A wrapper is a function of identical type, but with a special name
1605 which identifies it as the wrapper for <computeroutput>foo</computeroutput>.
1606 Wrappers need to include
1607 supporting macros from <filename>valgrind.h</filename>.
1608 Here is a simple wrapper which prints the arguments and return value:</para>
1610 <programlisting><![CDATA[
1612 #include "valgrind.h"
1613 int I_WRAP_SONAME_FNNAME_ZU(NONE,foo)( int x, int y )
1617 VALGRIND_GET_ORIG_FN(fn);
1618 printf("foo's wrapper: args %d %d\n", x, y);
1619 CALL_FN_W_WW(result, fn, x,y);
1620 printf("foo's wrapper: result %d\n", result);
1623 ]]></programlisting>
1625 <para>To become active, the wrapper merely needs to be present in a text
1626 section somewhere in the same process' address space as the function
1627 it wraps, and for its ELF symbol name to be visible to Valgrind. In
1628 practice, this means either compiling to a
1629 <computeroutput>.o</computeroutput> and linking it in, or
1630 compiling to a <computeroutput>.so</computeroutput> and
1631 <computeroutput>LD_PRELOAD</computeroutput>ing it in. The latter is more
1632 convenient in that it doesn't require relinking.</para>
1634 <para>All wrappers have approximately the above form. There are three
1635 crucial macros:</para>
1637 <para><computeroutput>I_WRAP_SONAME_FNNAME_ZU</computeroutput>:
1638 this generates the real name of the wrapper.
1639 This is an encoded name which Valgrind notices when reading symbol
1640 table information. What it says is: I am the wrapper for any function
1641 named <computeroutput>foo</computeroutput> which is found in
1642 an ELF shared object with an empty
1643 ("<computeroutput>NONE</computeroutput>") soname field. The specification
1644 mechanism is powerful in
1645 that wildcards are allowed for both sonames and function names.
1646 The details are discussed below.</para>
1648 <para><computeroutput>VALGRIND_GET_ORIG_FN</computeroutput>:
1649 once in the wrapper, the first priority is
1650 to get hold of the address of the original (and any other supporting
1651 information needed). This is stored in a value of opaque
1652 type <computeroutput>OrigFn</computeroutput>.
1653 The information is acquired using
1654 <computeroutput>VALGRIND_GET_ORIG_FN</computeroutput>. It is crucial
1655 to make this macro call before calling any other wrapped function
1656 in the same thread.</para>
1658 <para><computeroutput>CALL_FN_W_WW</computeroutput>: eventually we will
1659 want to call the function being
1660 wrapped. Calling it directly does not work, since that just gets us
1661 back to the wrapper and leads to an infinite loop. Instead, the result
1663 <computeroutput>OrigFn</computeroutput> and arguments are
1664 handed to one of a family of macros of the form
1665 <computeroutput>CALL_FN_*</computeroutput>. These
1666 cause Valgrind to call the original and avoid recursion back to the
1670 <sect2 id="manual-core-adv.wrapping.specs" xreflabel="Wrapping Specifications">
1671 <title>Wrapping Specifications</title>
1673 <para>This scheme has the advantage of being self-contained. A library of
1674 wrappers can be compiled to object code in the normal way, and does
1675 not rely on an external script telling Valgrind which wrappers pertain
1676 to which originals.</para>
1678 <para>Each wrapper has a name which, in the most general case says: I am the
1679 wrapper for any function whose name matches FNPATT and whose ELF
1680 "soname" matches SOPATT. Both FNPATT and SOPATT may contain wildcards
1681 (asterisks) and other characters (spaces, dots, @, etc) which are not
1682 generally regarded as valid C identifier names.</para>
1684 <para>This flexibility is needed to write robust wrappers for POSIX pthread
1685 functions, where typically we are not completely sure of either the
1686 function name or the soname, or alternatively we want to wrap a whole
1687 set of functions at once.</para>
1689 <para>For example, <computeroutput>pthread_create</computeroutput>
1690 in GNU libpthread is usually a
1691 versioned symbol - one whose name ends in, eg,
1692 <computeroutput>@GLIBC_2.3</computeroutput>. Hence we
1693 are not sure what its real name is. We also want to cover any soname
1694 of the form <computeroutput>libpthread.so*</computeroutput>.
1695 So the header of the wrapper will be</para>
1697 <programlisting><![CDATA[
1698 int I_WRAP_SONAME_FNNAME_ZZ(libpthreadZdsoZd0,pthreadZucreateZAZa)
1701 ]]></programlisting>
1703 <para>In order to write unusual characters as valid C function names, a
1704 Z-encoding scheme is used. Names are written literally, except that
1705 a capital Z acts as an escape character, with the following encoding:</para>
1707 <programlisting><![CDATA[
1717 ZL ( # only in valgrind 3.3.0 and later
1718 ZR ) # only in valgrind 3.3.0 and later
1719 ]]></programlisting>
1721 <para>Hence <computeroutput>libpthreadZdsoZd0</computeroutput> is an
1722 encoding of the soname <computeroutput>libpthread.so.0</computeroutput>
1723 and <computeroutput>pthreadZucreateZAZa</computeroutput> is an encoding
1724 of the function name <computeroutput>pthread_create@*</computeroutput>.
1727 <para>The macro <computeroutput>I_WRAP_SONAME_FNNAME_ZZ</computeroutput>
1728 constructs a wrapper name in which
1729 both the soname (first component) and function name (second component)
1730 are Z-encoded. Encoding the function name can be tiresome and is
1731 often unnecessary, so a second macro,
1732 <computeroutput>I_WRAP_SONAME_FNNAME_ZU</computeroutput>, can be
1733 used instead. The <computeroutput>_ZU</computeroutput> variant is
1734 also useful for writing wrappers for
1735 C++ functions, in which the function name is usually already mangled
1736 using some other convention in which Z plays an important role. Having
1737 to encode a second time quickly becomes confusing.</para>
1739 <para>Since the function name field may contain wildcards, it can be
1740 anything, including just <computeroutput>*</computeroutput>.
1741 The same is true for the soname.
1742 However, some ELF objects - specifically, main executables - do not
1743 have sonames. Any object lacking a soname is treated as if its soname
1744 was <computeroutput>NONE</computeroutput>, which is why the original
1745 example above had a name
1746 <computeroutput>I_WRAP_SONAME_FNNAME_ZU(NONE,foo)</computeroutput>.</para>
1748 <para>Note that the soname of an ELF object is not the same as its
1749 file name, although it is often similar. You can find the soname of
1750 an object <computeroutput>libfoo.so</computeroutput> using the command
1751 <computeroutput>readelf -a libfoo.so | grep soname</computeroutput>.</para>
1754 <sect2 id="manual-core-adv.wrapping.semantics" xreflabel="Wrapping Semantics">
1755 <title>Wrapping Semantics</title>
1757 <para>The ability for a wrapper to replace an infinite family of functions
1758 is powerful but brings complications in situations where ELF objects
1759 appear and disappear (are dlopen'd and dlclose'd) on the fly.
1760 Valgrind tries to maintain sensible behaviour in such situations.</para>
1762 <para>For example, suppose a process has dlopened (an ELF object with
1763 soname) <filename>object1.so</filename>, which contains
1764 <computeroutput>function1</computeroutput>. It starts to use
1765 <computeroutput>function1</computeroutput> immediately.</para>
1767 <para>After a while it dlopens <filename>wrappers.so</filename>,
1768 which contains a wrapper
1769 for <computeroutput>function1</computeroutput> in (soname)
1770 <filename>object1.so</filename>. All subsequent calls to
1771 <computeroutput>function1</computeroutput> are rerouted to the wrapper.</para>
1773 <para>If <filename>wrappers.so</filename> is
1774 later dlclose'd, calls to <computeroutput>function1</computeroutput> are
1775 naturally routed back to the original.</para>
1777 <para>Alternatively, if <filename>object1.so</filename>
1778 is dlclose'd but <filename>wrappers.so</filename> remains,
1779 then the wrapper exported by <filename>wrappers.so</filename>
1780 becomes inactive, since there
1781 is no way to get to it - there is no original to call any more. However,
1782 Valgrind remembers that the wrapper is still present. If
1783 <filename>object1.so</filename> is
1784 eventually dlopen'd again, the wrapper will become active again.</para>
1786 <para>In short, valgrind inspects all code loading/unloading events to
1787 ensure that the set of currently active wrappers remains consistent.</para>
1789 <para>A second possible problem is that of conflicting wrappers. It is
1790 easily possible to load two or more wrappers, both of which claim
1791 to be wrappers for some third function. In such cases Valgrind will
1792 complain about conflicting wrappers when the second one appears, and
1793 will honour only the first one.</para>
1796 <sect2 id="manual-core-adv.wrapping.debugging" xreflabel="Debugging">
1797 <title>Debugging</title>
1799 <para>Figuring out what's going on given the dynamic nature of wrapping
1800 can be difficult. The
1801 <option>--trace-redir=yes</option> option makes
1803 by showing the complete state of the redirection subsystem after
1805 <function>mmap</function>/<function>munmap</function>
1806 event affecting code (text).</para>
1808 <para>There are two central concepts:</para>
1812 <listitem><para>A "redirection specification" is a binding of
1813 a (soname pattern, fnname pattern) pair to a code address.
1814 These bindings are created by writing functions with names
1816 <computeroutput>I_WRAP_SONAME_FNNAME_{ZZ,_ZU}</computeroutput>
1817 macros.</para></listitem>
1819 <listitem><para>An "active redirection" is a code-address to
1820 code-address binding currently in effect.</para></listitem>
1824 <para>The state of the wrapping-and-redirection subsystem comprises a set of
1825 specifications and a set of active bindings. The specifications are
1826 acquired/discarded by watching all
1827 <function>mmap</function>/<function>munmap</function>
1828 events on code (text)
1829 sections. The active binding set is (conceptually) recomputed from
1830 the specifications, and all known symbol names, following any change
1831 to the specification set.</para>
1833 <para><option>--trace-redir=yes</option> shows the contents
1834 of both sets following any such event.</para>
1836 <para><option>-v</option> prints a line of text each
1837 time an active specification is used for the first time.</para>
1839 <para>Hence for maximum debugging effectiveness you will need to use both
1842 <para>One final comment. The function-wrapping facility is closely
1843 tied to Valgrind's ability to replace (redirect) specified
1844 functions, for example to redirect calls to
1845 <function>malloc</function> to its
1846 own implementation. Indeed, a replacement function can be
1847 regarded as a wrapper function which does not call the original.
1848 However, to make the implementation more robust, the two kinds
1849 of interception (wrapping vs replacement) are treated differently.
1852 <para><option>--trace-redir=yes</option> shows
1853 specifications and bindings for both
1854 replacement and wrapper functions. To differentiate the
1855 two, replacement bindings are printed using
1856 <computeroutput>R-></computeroutput> whereas
1857 wraps are printed using <computeroutput>W-></computeroutput>.
1862 <sect2 id="manual-core-adv.wrapping.limitations-cf"
1863 xreflabel="Limitations - control flow">
1864 <title>Limitations - control flow</title>
1866 <para>For the most part, the function wrapping implementation is robust.
1867 The only important caveat is: in a wrapper, get hold of
1868 the <computeroutput>OrigFn</computeroutput> information using
1869 <computeroutput>VALGRIND_GET_ORIG_FN</computeroutput> before calling any
1870 other wrapped function. Once you have the
1871 <computeroutput>OrigFn</computeroutput>, arbitrary
1872 calls between, recursion between, and longjumps out of wrappers
1873 should work correctly. There is never any interaction between wrapped
1874 functions and merely replaced functions
1875 (eg <function>malloc</function>), so you can call
1876 <function>malloc</function> etc safely from within wrappers.
1879 <para>The above comments are true for {x86,amd64,ppc32,arm,mips32,s390}-linux.
1881 ppc64-linux function wrapping is more fragile due to the (arguably
1882 poorly designed) ppc64-linux ABI. This mandates the use of a shadow
1883 stack which tracks entries/exits of both wrapper and replacement
1884 functions. This gives two limitations: firstly, longjumping out of
1885 wrappers will rapidly lead to disaster, since the shadow stack will
1886 not get correctly cleared. Secondly, since the shadow stack has
1887 finite size, recursion between wrapper/replacement functions is only
1888 possible to a limited depth, beyond which Valgrind has to abort the
1889 run. This depth is currently 16 calls.</para>
1891 <para>For all platforms ({x86,amd64,ppc32,ppc64,arm,mips32,s390}-linux)
1893 comments apply on a per-thread basis. In other words, wrapping is
1894 thread-safe: each thread must individually observe the above
1895 restrictions, but there is no need for any kind of inter-thread
1900 <sect2 id="manual-core-adv.wrapping.limitations-sigs"
1901 xreflabel="Limitations - original function signatures">
1902 <title>Limitations - original function signatures</title>
1904 <para>As shown in the above example, to call the original you must use a
1905 macro of the form <computeroutput>CALL_FN_*</computeroutput>.
1906 For technical reasons it is impossible
1907 to create a single macro to deal with all argument types and numbers,
1908 so a family of macros covering the most common cases is supplied. In
1909 what follows, 'W' denotes a machine-word-typed value (a pointer or a
1910 C <computeroutput>long</computeroutput>),
1911 and 'v' denotes C's <computeroutput>void</computeroutput> type.
1912 The currently available macros are:</para>
1914 <programlisting><![CDATA[
1915 CALL_FN_v_v -- call an original of type void fn ( void )
1916 CALL_FN_W_v -- call an original of type long fn ( void )
1918 CALL_FN_v_W -- call an original of type void fn ( long )
1919 CALL_FN_W_W -- call an original of type long fn ( long )
1921 CALL_FN_v_WW -- call an original of type void fn ( long, long )
1922 CALL_FN_W_WW -- call an original of type long fn ( long, long )
1924 CALL_FN_v_WWW -- call an original of type void fn ( long, long, long )
1925 CALL_FN_W_WWW -- call an original of type long fn ( long, long, long )
1927 CALL_FN_W_WWWW -- call an original of type long fn ( long, long, long, long )
1928 CALL_FN_W_5W -- call an original of type long fn ( long, long, long, long, long )
1929 CALL_FN_W_6W -- call an original of type long fn ( long, long, long, long, long, long )
1932 ]]></programlisting>
1934 <para>The set of supported types can be expanded as needed. It is
1935 regrettable that this limitation exists. Function wrapping has proven
1936 difficult to implement, with a certain apparently unavoidable level of
1937 ickiness. After several implementation attempts, the present
1938 arrangement appears to be the least-worst tradeoff. At least it works
1939 reliably in the presence of dynamic linking and dynamic code
1940 loading/unloading.</para>
1942 <para>You should not attempt to wrap a function of one type signature with a
1943 wrapper of a different type signature. Such trickery will surely lead
1944 to crashes or strange behaviour. This is not a limitation
1945 of the function wrapping implementation, merely a reflection of the
1946 fact that it gives you sweeping powers to shoot yourself in the foot
1947 if you are not careful. Imagine the instant havoc you could wreak by
1948 writing a wrapper which matched any function name in any soname - in
1949 effect, one which claimed to be a wrapper for all functions in the
1953 <sect2 id="manual-core-adv.wrapping.examples" xreflabel="Examples">
1954 <title>Examples</title>
1956 <para>In the source tree,
1957 <filename>memcheck/tests/wrap[1-8].c</filename> provide a series of
1958 examples, ranging from very simple to quite advanced.</para>
1960 <para><filename>mpi/libmpiwrap.c</filename> is an example
1961 of wrapping a big, complex API (the MPI-2 interface). This file defines
1962 almost 300 different wrappers.</para>