blob: 06c512216961e2a49d2141db5792a542203324a5 [file] [log] [blame]
sewardja5fac792007-11-25 00:55:11 +00001<?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-adv" xreflabel="Valgrind's core: advanced topics">
8<title>Using and understanding the Valgrind core: Advanced Topics</title>
9
10<para>This chapter describes advanced aspects of the Valgrind core
11services, which are mostly of interest to power users who wish to
12customise and modify Valgrind's default behaviours in certain useful
13ways. The subjects covered are:</para>
14
15<itemizedlist>
16 <listitem><para>The "Client Request" mechanism</para></listitem>
sewardj47ffedb2011-10-24 07:36:57 +000017 <listitem><para>Debugging your program using Valgrind's gdbserver
18 and GDB</para></listitem>
sewardja5fac792007-11-25 00:55:11 +000019 <listitem><para>Function Wrapping</para></listitem>
20</itemizedlist>
21
22
23
24<sect1 id="manual-core-adv.clientreq"
25 xreflabel="The Client Request mechanism">
26<title>The Client Request mechanism</title>
27
28<para>Valgrind has a trapdoor mechanism via which the client
29program can pass all manner of requests and queries to Valgrind
njna437a602009-08-04 05:24:46 +000030and the current tool. Internally, this is used extensively
31to make various things work, although that's not visible from the
32outside.</para>
sewardja5fac792007-11-25 00:55:11 +000033
34<para>For your convenience, a subset of these so-called client
35requests is provided to allow you to tell Valgrind facts about
36the behaviour of your program, and also to make queries.
njna437a602009-08-04 05:24:46 +000037In particular, your program can tell Valgrind about things that it
38otherwise would not know, leading to better results.
39</para>
sewardja5fac792007-11-25 00:55:11 +000040
41<para>Clients need to include a header file to make this work.
42Which header file depends on which client requests you use. Some
43client requests are handled by the core, and are defined in the
44header file <filename>valgrind/valgrind.h</filename>. Tool-specific
45header files are named after the tool, e.g.
njna437a602009-08-04 05:24:46 +000046<filename>valgrind/memcheck.h</filename>. Each tool-specific header file
47includes <filename>valgrind/valgrind.h</filename> so you don't need to
48include it in your client if you include a tool-specific header. All header
49files can be found in the <literal>include/valgrind</literal> directory of
50wherever Valgrind was installed.</para>
sewardja5fac792007-11-25 00:55:11 +000051
52<para>The macros in these header files have the magical property
53that they generate code in-line which Valgrind can spot.
54However, the code does nothing when not run on Valgrind, so you
55are not forced to run your program under Valgrind just because you
56use the macros in this file. Also, you are not required to link your
57program with any extra supporting libraries.</para>
58
59<para>The code added to your binary has negligible performance impact:
sewardje089f012010-10-13 21:47:29 +000060on x86, amd64, ppc32, ppc64 and ARM, the overhead is 6 simple integer
61instructions and is probably undetectable except in tight loops.
62However, if you really wish to compile out the client requests, you
63can compile with <option>-DNVALGRIND</option> (analogous to
njn7e5d4ed2009-07-30 02:57:52 +000064<option>-DNDEBUG</option>'s effect on
njna437a602009-08-04 05:24:46 +000065<function>assert</function>).
sewardja5fac792007-11-25 00:55:11 +000066</para>
67
68<para>You are encouraged to copy the <filename>valgrind/*.h</filename> headers
69into your project's include directory, so your program doesn't have a
70compile-time dependency on Valgrind being installed. The Valgrind headers,
71unlike most of the rest of the code, are under a BSD-style license so you may
72include them without worrying about license incompatibility.</para>
73
74<para>Here is a brief description of the macros available in
75<filename>valgrind.h</filename>, which work with more than one
76tool (see the tool-specific documentation for explanations of the
77tool-specific macros).</para>
78
79 <variablelist>
80
81 <varlistentry>
82 <term><command><computeroutput>RUNNING_ON_VALGRIND</computeroutput></command>:</term>
83 <listitem>
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.
87 </para>
88 </listitem>
89 </varlistentry>
90
91 <varlistentry>
92 <term><command><computeroutput>VALGRIND_DISCARD_TRANSLATIONS</computeroutput>:</command></term>
93 <listitem>
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
njna437a602009-08-04 05:24:46 +0000101 quickly is very difficult, so try not to call it often.
sewardja5fac792007-11-25 00:55:11 +0000102 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
107 once.</para>
108 <para>
109 Alternatively, for transparent self-modifying-code support,
njn7e5d4ed2009-07-30 02:57:52 +0000110 use<option>--smc-check=all</option>, or run
sewardje089f012010-10-13 21:47:29 +0000111 on ppc32/Linux, ppc64/Linux or ARM/Linux.
sewardja5fac792007-11-25 00:55:11 +0000112 </para>
113 </listitem>
114 </varlistentry>
115
116 <varlistentry>
117 <term><command><computeroutput>VALGRIND_COUNT_ERRORS</computeroutput>:</command></term>
118 <listitem>
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>
126 </listitem>
127 </varlistentry>
128
129 <varlistentry>
130 <term><command><computeroutput>VALGRIND_MALLOCLIKE_BLOCK</computeroutput>:</command></term>
131 <listitem>
132 <para>If your program manages its own memory instead of using
njna437a602009-08-04 05:24:46 +0000133 the standard <function>malloc</function> /
134 <function>new</function> /
135 <function>new[]</function>, tools that track
sewardja5fac792007-11-25 00:55:11 +0000136 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
142 it.</para>
143 </listitem>
144 </varlistentry>
145
146 <varlistentry>
147 <term><command><computeroutput>VALGRIND_FREELIKE_BLOCK</computeroutput>:</command></term>
148 <listitem>
149 <para>This should be used in conjunction with
150 <computeroutput>VALGRIND_MALLOCLIKE_BLOCK</computeroutput>.
njna437a602009-08-04 05:24:46 +0000151 Again, see <filename>valgrind.h</filename> for
sewardja5fac792007-11-25 00:55:11 +0000152 information on how to use it.</para>
153 </listitem>
154 </varlistentry>
155
156 <varlistentry>
bart91347382011-03-25 20:07:25 +0000157 <term><command><computeroutput>VALGRIND_RESIZEINPLACE_BLOCK</computeroutput>:</command></term>
158 <listitem>
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>
162 </listitem>
163 </varlistentry>
164
165 <varlistentry>
njn23fd9bc2009-08-10 01:43:20 +0000166 <term>
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>:
174 </term>
sewardja5fac792007-11-25 00:55:11 +0000175 <listitem>
njn23fd9bc2009-08-10 01:43:20 +0000176 <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>
sewardja5fac792007-11-25 00:55:11 +0000181 </listitem>
182 </varlistentry>
183
184 <varlistentry>
sewardja5fac792007-11-25 00:55:11 +0000185 <term><command><computeroutput>VALGRIND_NON_SIMD_CALL[0123]</computeroutput>:</command></term>
186 <listitem>
njna437a602009-08-04 05:24:46 +0000187 <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
193 programs.</para>
sewardja5fac792007-11-25 00:55:11 +0000194
195 <para><command>Warning:</command> Only use these if you
njn45fb4d32007-12-05 21:51:50 +0000196 <emphasis>really</emphasis> know what you are doing. They aren't
njna437a602009-08-04 05:24:46 +0000197 entirely reliable, and can cause Valgrind to crash. See
198 <filename>valgrind.h</filename> for more details.
njn45fb4d32007-12-05 21:51:50 +0000199 </para>
sewardja5fac792007-11-25 00:55:11 +0000200 </listitem>
201 </varlistentry>
202
203 <varlistentry>
204 <term><command><computeroutput>VALGRIND_PRINTF(format, ...)</computeroutput>:</command></term>
205 <listitem>
njna437a602009-08-04 05:24:46 +0000206 <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.)
bart924bb222010-08-27 10:01:32 +0000210 Output is not produced until a newline is encountered, or subsequent
njna437a602009-08-04 05:24:46 +0000211 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>
sewardja5fac792007-11-25 00:55:11 +0000214 </listitem>
215 </varlistentry>
216
217 <varlistentry>
218 <term><command><computeroutput>VALGRIND_PRINTF_BACKTRACE(format, ...)</computeroutput>:</command></term>
219 <listitem>
njna437a602009-08-04 05:24:46 +0000220 <para>Like <computeroutput>VALGRIND_PRINTF</computeroutput> (in
221 particular, the return value is identical), but prints a stack backtrace
222 immediately afterwards.</para>
sewardja5fac792007-11-25 00:55:11 +0000223 </listitem>
224 </varlistentry>
225
226 <varlistentry>
philippe583ae932013-01-20 17:46:19 +0000227 <term><command><computeroutput>VALGRIND_MONITOR_COMMAND(command)</computeroutput>:</command></term>
228 <listitem>
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 preferrable to use a specific
237 client request to have better compile time verifications of the
238 arguments.
239 </para>
240 </listitem>
241 </varlistentry>
242
243 <varlistentry>
sewardja5fac792007-11-25 00:55:11 +0000244 <term><command><computeroutput>VALGRIND_STACK_REGISTER(start, end)</computeroutput>:</command></term>
245 <listitem>
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>
philippe20465932013-03-13 22:03:31 +0000250 <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
255 reads.</para>
njna437a602009-08-04 05:24:46 +0000256
257 <para><command>Warning:</command> Unfortunately, this client request is
258 unreliable and best avoided.</para>
sewardja5fac792007-11-25 00:55:11 +0000259 </listitem>
260 </varlistentry>
261
262 <varlistentry>
263 <term><command><computeroutput>VALGRIND_STACK_DEREGISTER(id)</computeroutput>:</command></term>
264 <listitem>
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>
njna437a602009-08-04 05:24:46 +0000268
269 <para><command>Warning:</command> Unfortunately, this client request is
270 unreliable and best avoided.</para>
sewardja5fac792007-11-25 00:55:11 +0000271 </listitem>
272 </varlistentry>
273
274 <varlistentry>
275 <term><command><computeroutput>VALGRIND_STACK_CHANGE(id, start, end)</computeroutput>:</command></term>
276 <listitem>
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
281 stack growth.</para>
njna437a602009-08-04 05:24:46 +0000282
283 <para><command>Warning:</command> Unfortunately, this client request is
284 unreliable and best avoided.</para>
sewardja5fac792007-11-25 00:55:11 +0000285 </listitem>
286 </varlistentry>
287
288 </variablelist>
289
sewardja5fac792007-11-25 00:55:11 +0000290</sect1>
291
292
293
294
295
sewardj350c0fe2011-06-17 08:31:22 +0000296
philippea02e2672013-03-06 22:39:18 +0000297<!-- Referenced from both the manual and manpage -->
298<sect1 id="&vg-gdbserver-id;"
299 xreflabel="&vg-gdbserver-label;">
sewardj350c0fe2011-06-17 08:31:22 +0000300<title>Debugging your program using Valgrind gdbserver and GDB</title>
301
302<para>A program running under Valgrind is not executed directly by the
303CPU. Instead it runs on a synthetic CPU provided by Valgrind. This is
304why a debugger cannot debug your program when it runs on Valgrind.
305</para>
306<para>
307This section describes how GDB can interact with the
308Valgrind gdbserver to provide a fully debuggable program under
309Valgrind. Used in this way, GDB also provides an interactive usage of
310Valgrind core or tool functionalities, including incremental leak search
311under Memcheck and on-demand Massif snapshot production.
312</para>
313
314<sect2 id="manual-core-adv.gdbserver-simple"
315 xreflabel="gdbserver simple example">
316<title>Quick Start: debugging in 3 steps</title>
317
sewardj1568e172011-06-18 08:28:04 +0000318<para>The simplest way to get started is to run Valgrind with the
319flag <option>--vgdb-error=0</option>. Then follow the on-screen
320directions, which give you the precise commands needed to start GDB
321and connect it to your program.</para>
322
323<para>Otherwise, here's a slightly more verbose overview.</para>
324
sewardj350c0fe2011-06-17 08:31:22 +0000325<para>If you want to debug a program with GDB when using the Memcheck
sewardje81a4542011-06-25 10:05:28 +0000326tool, start Valgrind like this:
sewardj350c0fe2011-06-17 08:31:22 +0000327<screen><![CDATA[
328valgrind --vgdb=yes --vgdb-error=0 prog
329]]></screen></para>
330
sewardje81a4542011-06-25 10:05:28 +0000331<para>In another shell, start GDB:
sewardj350c0fe2011-06-17 08:31:22 +0000332<screen><![CDATA[
333gdb prog
334]]></screen></para>
335
336<para>Then give the following command to GDB:
337<screen><![CDATA[
338(gdb) target remote | vgdb
339]]></screen></para>
340
341<para>You can now debug your program e.g. by inserting a breakpoint
342and then using the GDB <computeroutput>continue</computeroutput>
343command.</para>
344
345<para>This quick start information is enough for basic usage of the
346Valgrind gdbserver. The sections below describe more advanced
347functionality provided by the combination of Valgrind and GDB. Note
348that the command line flag <option>--vgdb=yes</option> can be omitted,
349as this is the default value.
350</para>
351
352</sect2>
353
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
358running on the same machine. In this mode, GDB uses system calls to
359control and query the program being debugged. This works well, but
360only allows GDB to debug a program running on the same computer.
361</para>
362
363<para>GDB can also debug processes running on a different computer.
364To achieve this, GDB defines a protocol (that is, a set of query and
365reply packets) that facilitates fetching the value of memory or
366registers, setting breakpoints, etc. A gdbserver is an implementation
367of this "GDB remote debugging" protocol. To debug a process running
368on a remote computer, a gdbserver (sometimes called a GDB stub)
369must run at the remote computer side.
370</para>
371
372<para>The Valgrind core provides a built-in gdbserver implementation,
373which is activated using <option>--vgdb=yes</option>
374or <option>--vgdb=full</option>. This gdbserver allows the process
375running on Valgrind's synthetic CPU to be debugged remotely.
376GDB sends protocol query packets (such as "get register contents") to
377the Valgrind embedded gdbserver. The gdbserver executes the queries
378(for example, it will get the register values of the synthetic CPU)
379and gives the results back to GDB.
380</para>
381
382<para>GDB can use various kinds of channels (TCP/IP, serial line, etc)
383to communicate with the gdbserver. In the case of Valgrind's
384gdbserver, communication is done via a pipe and a small helper program
philippea02e2672013-03-06 22:39:18 +0000385called <xref linkend="&vg-vgdb-id;"/>, which acts as an
sewardj350c0fe2011-06-17 08:31:22 +0000386intermediary. If no GDB is in use, vgdb can also be
387used to send monitor commands to the Valgrind gdbserver from a shell
388command line.
389</para>
390
391</sect2>
392
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
397Valgrind, you must ensure that the Valgrind gdbserver is activated by
398specifying either <option>--vgdb=yes</option>
sewardj47ffedb2011-10-24 07:36:57 +0000399or <option>--vgdb=full</option>. A secondary command line option,
sewardj350c0fe2011-06-17 08:31:22 +0000400<option>--vgdb-error=number</option>, can be used to tell the gdbserver
401only to become active once the specified number of errors have been
philippebaf69642012-02-15 22:29:30 +0000402shown. A value of zero will therefore cause
sewardj350c0fe2011-06-17 08:31:22 +0000403the gdbserver to become active at startup, which allows you to
404insert breakpoints before starting the run. For example:
405<screen><![CDATA[
406valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prog
407]]></screen></para>
408
409<para>The Valgrind gdbserver is invoked at startup
410and indicates it is waiting for a connection from a GDB:</para>
411
412<programlisting><![CDATA[
413==2418== Memcheck, a memory error detector
414==2418== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
415==2418== Using Valgrind-3.7.0.SVN and LibVEX; rerun with -h for copyright info
416==2418== Command: ./prog
417==2418==
418==2418== (action at startup) vgdb me ...
419]]></programlisting>
420
421
422<para>GDB (in another shell) can then be connected to the Valgrind gdbserver.
423For this, GDB must be started on the program <filename>prog</filename>:
424<screen><![CDATA[
425gdb ./prog
426]]></screen></para>
427
428
429<para>You then indicate to GDB that you want to debug a remote target:
430<screen><![CDATA[
431(gdb) target remote | vgdb
432]]></screen>
433GDB then starts a vgdb relay application to communicate with the
434Valgrind embedded gdbserver:</para>
435
436<programlisting><![CDATA[
437(gdb) target remote | vgdb
438Remote debugging using | vgdb
439relaying data between gdb and process 2418
440Reading symbols from /lib/ld-linux.so.2...done.
441Reading symbols from /usr/lib/debug/lib/ld-2.11.2.so.debug...done.
442Loaded symbols for /lib/ld-linux.so.2
443[Switching to Thread 2418]
4440x001f2850 in _start () from /lib/ld-linux.so.2
445(gdb)
446]]></programlisting>
447
448<para>Note that vgdb is provided as part of the Valgrind
449distribution. You do not need to install it separately.</para>
450
451<para>If vgdb detects that there are multiple Valgrind gdbservers that
452can be connected to, it will list all such servers and their PIDs, and
453then exit. You can then reissue the GDB "target" command, but
sewardje81a4542011-06-25 10:05:28 +0000454specifying the PID of the process you want to debug:
sewardj350c0fe2011-06-17 08:31:22 +0000455</para>
456
457<programlisting><![CDATA[
458(gdb) target remote | vgdb
459Remote debugging using | vgdb
460no --pid= arg given and multiple valgrind pids found:
461use --pid=2479 for valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prog
462use --pid=2481 for valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prog
463use --pid=2483 for valgrind --vgdb=yes --vgdb-error=0 ./another_prog
464Remote communication error: Resource temporarily unavailable.
465(gdb) target remote | vgdb --pid=2479
466Remote debugging using | vgdb --pid=2479
467relaying data between gdb and process 2479
468Reading symbols from /lib/ld-linux.so.2...done.
469Reading symbols from /usr/lib/debug/lib/ld-2.11.2.so.debug...done.
470Loaded symbols for /lib/ld-linux.so.2
471[Switching to Thread 2479]
4720x001f2850 in _start () from /lib/ld-linux.so.2
473(gdb)
474]]></programlisting>
475
476<para>Once GDB is connected to the Valgrind gdbserver, it can be used
477in the same way as if you were debugging the program natively:</para>
478 <itemizedlist>
479 <listitem>
480 <para>Breakpoints can be inserted or deleted.</para>
481 </listitem>
482 <listitem>
483 <para>Variables and register values can be examined or modified.
484 </para>
485 </listitem>
486 <listitem>
487 <para>Signal handling can be configured (printing, ignoring).
488 </para>
489 </listitem>
490 <listitem>
491 <para>Execution can be controlled (continue, step, next, stepi, etc).
492 </para>
493 </listitem>
494 <listitem>
495 <para>Program execution can be interrupted using Control-C.</para>
496 </listitem>
497 </itemizedlist>
498
499<para>And so on. Refer to the GDB user manual for a complete
500description of GDB's functionality.
501</para>
502
503</sect2>
504
sewardj992d3cc2011-10-22 20:38:08 +0000505<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
509a development system (on which the Android NDK is installed) to compile your
510application. An Android target system or emulator will be used to run
511the application.
512In this setup, Valgrind and vgdb will run on the Android system,
513while GDB will run on the development system. GDB will connect
514to the vgdb running on the Android system using the Android NDK
515'adb forward' application.
516</para>
517<para> Example: on the Android system, execute the following:
518 <screen><![CDATA[
philippe8bb9e042012-05-25 22:36:01 +0000519valgrind --vgdb-error=0 --vgdb=yes prog
sewardj992d3cc2011-10-22 20:38:08 +0000520# and then in another shell, run:
521vgdb --port=1234
522]]></screen>
523</para>
524
525<para> On the development system, execute the following commands:
526<screen><![CDATA[
527adb forward tcp:1234 tcp:1234
528gdb prog
529(gdb) target remote :1234
530]]></screen>
531GDB will use a local tcp/ip connection to connect to the Android adb forwarder.
532Adb will establish a relay connection between the host system and the Android
sewardjbadefc92011-10-27 10:01:17 +0000533target system. Be sure to use the GDB delivered in the
sewardj992d3cc2011-10-22 20:38:08 +0000534Android NDK system (typically, arm-linux-androideabi-gdb), as the host
535GDB is probably not able to debug Android arm applications.
536Note that the local port nr (used by GDB) must not necessarily be equal
537to the port number used by vgdb: adb can forward tcp/ip between different
538port numbers.
539</para>
540
philippe7ee8b882011-12-27 09:03:36 +0000541<para>In the current release, the GDB server is not enabled by default
sewardjbadefc92011-10-27 10:01:17 +0000542for Android, due to problems in establishing a suitable directory in
543which Valgrind can create the necessary FIFOs (named pipes) for
544communication purposes. You can stil try to use the GDB server, but
545you will need to explicitly enable it using the flag
546<computeroutput>--vgdb=yes</computeroutput> or
547<computeroutput>--vgdb=full</computeroutput>.
548</para>
549
550<para>Additionally, you
551will need to select a temporary directory which is (a) writable
552by Valgrind, and (b) supports FIFOs. This is the main difficult
553point. Often, <computeroutput>/sdcard</computeroutput> satisfies
554requirement (a), but fails for (b) because it is a VFAT file system
555and VFAT does not support pipes. Possibilities you could try are
556<computeroutput>/data/local</computeroutput>,
557<computeroutput>/data/local/Inst</computeroutput> (if you
558installed Valgrind there), or
559<computeroutput>/data/data/name.of.my.app</computeroutput>, if you
560are running a specific application and it has its own directory of
561that form. This last possibility may have the highest probability
562of success.</para>
563
564<para>You can specify the temporary directory to use either via
565the <computeroutput>--with-tmpdir=</computeroutput> configure time
566flag, or by setting environment variable TMPDIR when running Valgrind
philippeed3ac742011-11-16 20:43:39 +0000567(on the Android device, not on the Android NDK development host).
568Another alternative is to specify the directory for the FIFOs using
569the <computeroutput>--vgdb-prefix=</computeroutput> Valgrind command
570line option.
sewardjbadefc92011-10-27 10:01:17 +0000571</para>
572
573<para>We hope to have a better story for temporary directory handling
574on Android in the future. The difficulty is that, unlike in standard
575Unixes, there is no single temporary file directory that reliably
576works across all devices and scenarios.
577</para>
578
sewardj992d3cc2011-10-22 20:38:08 +0000579</sect2>
580
sewardj350c0fe2011-06-17 08:31:22 +0000581<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>
584
585<para> The Valgrind gdbserver provides additional Valgrind-specific
philippe1de37832012-05-28 08:56:24 +0000586functionality via "monitor commands". Such monitor commands can be
philippe583ae932013-01-20 17:46:19 +0000587sent from the GDB command line or from the shell command line or
588requested by the client program using the VALGRIND_MONITOR_COMMAND
589client request. See
philippea02e2672013-03-06 22:39:18 +0000590<xref linkend="&vg-monitor-id;"/> for the
philippe583ae932013-01-20 17:46:19 +0000591list of the Valgrind core monitor commands available regardless of the
592Valgrind tool selected.
sewardj350c0fe2011-06-17 08:31:22 +0000593</para>
594
philippe1de37832012-05-28 08:56:24 +0000595<para>The following tools provide tool-specific monitor commands:
596 <itemizedlist>
597 <listitem>
598 <para><xref linkend="mc-manual.monitor-commands"/></para>
599 </listitem>
600 <listitem>
601 <para><xref linkend="cl-manual.monitor-commands"/></para>
602 </listitem>
603 <listitem>
604 <para><xref linkend="ms-manual.monitor-commands"/></para>
605 </listitem>
philippef5774342014-05-03 11:12:50 +0000606 <listitem>
607 <para><xref linkend="hg-manual.monitor-commands"/></para>
608 </listitem>
philippe1de37832012-05-28 08:56:24 +0000609 </itemizedlist>
610</para>
611
612<para>An example of a tool specific monitor command is the Memcheck monitor
sewardj30b3eca2011-06-28 08:20:39 +0000613command <computeroutput>leak_check full
sewardjc8bd1df2011-06-26 12:41:33 +0000614reachable any</computeroutput>. This requests a full reporting of the
sewardje81a4542011-06-25 10:05:28 +0000615allocated memory blocks. To have this leak check executed, use the GDB
sewardj350c0fe2011-06-17 08:31:22 +0000616command:
617<screen><![CDATA[
sewardj30b3eca2011-06-28 08:20:39 +0000618(gdb) monitor leak_check full reachable any
sewardj350c0fe2011-06-17 08:31:22 +0000619]]></screen>
620</para>
621
sewardj30b3eca2011-06-28 08:20:39 +0000622<para>GDB will send the <computeroutput>leak_check</computeroutput>
sewardj350c0fe2011-06-17 08:31:22 +0000623command to the Valgrind gdbserver. The Valgrind gdbserver will
624execute the monitor command itself, if it recognises it to be a Valgrind core
625monitor command. If it is not recognised as such, it is assumed to
626be tool-specific and is handed to the tool for execution. For example:
627</para>
628<programlisting><![CDATA[
sewardj30b3eca2011-06-28 08:20:39 +0000629(gdb) monitor leak_check full reachable any
sewardj350c0fe2011-06-17 08:31:22 +0000630==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)
633==2418==
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
640==2418==
641(gdb)
642]]></programlisting>
643
644<para>As with other GDB commands, the Valgrind gdbserver will accept
645abbreviated monitor command names and arguments, as long as the given
646abbreviation is unambiguous. For example, the above
sewardj30b3eca2011-06-28 08:20:39 +0000647<computeroutput>leak_check</computeroutput>
sewardj350c0fe2011-06-17 08:31:22 +0000648command can also be typed as:
649<screen><![CDATA[
sewardj30b3eca2011-06-28 08:20:39 +0000650(gdb) mo l f r a
sewardj350c0fe2011-06-17 08:31:22 +0000651]]></screen>
652
653The letters <computeroutput>mo</computeroutput> are recognised by GDB as being
654an abbreviation for <computeroutput>monitor</computeroutput>. So GDB sends the
sewardj30b3eca2011-06-28 08:20:39 +0000655string <computeroutput>l f r a</computeroutput> to the Valgrind
sewardj350c0fe2011-06-17 08:31:22 +0000656gdbserver. The letters provided in this string are unambiguous for the
657Valgrind gdbserver. This therefore gives the same output as the
658unabbreviated command and arguments. If the provided abbreviation is
659ambiguous, the Valgrind gdbserver will report the list of commands (or
660argument values) that can match:
661<programlisting><![CDATA[
sewardj30b3eca2011-06-28 08:20:39 +0000662(gdb) mo v. n
philippe02ea4132013-09-04 21:42:43 +0000663v. can match v.set v.info v.wait v.kill v.translate v.do
sewardj30b3eca2011-06-28 08:20:39 +0000664(gdb) mo v.i n
philippebaf69642012-02-15 22:29:30 +0000665n_errs_found 0 n_errs_shown 0 (vgdb-error 0)
sewardj350c0fe2011-06-17 08:31:22 +0000666(gdb)
667]]></programlisting>
668</para>
669
670<para>Instead of sending a monitor command from GDB, you can also send
671these from a shell command line. For example, the following command
672lines, when given in a shell, will cause the same leak search to be executed
673by the process 3145:
674<screen><![CDATA[
sewardj47ffedb2011-10-24 07:36:57 +0000675vgdb --pid=3145 leak_check full reachable any
sewardj30b3eca2011-06-28 08:20:39 +0000676vgdb --pid=3145 l f r a
sewardj350c0fe2011-06-17 08:31:22 +0000677]]></screen></para>
678
679<para>Note that the Valgrind gdbserver automatically continues the
680execution of the program after a standalone invocation of
681vgdb. Monitor commands sent from GDB do not cause the program to
682continue: the program execution is controlled explicitly using GDB
683commands such as "continue" or "next".</para>
684
685</sect2>
686
687<sect2 id="manual-core-adv.gdbserver-threads"
688 xreflabel="Valgrind gdbserver thread information">
689<title>Valgrind gdbserver thread information</title>
690
691<para>Valgrind's gdbserver enriches the output of the
692GDB <computeroutput>info threads</computeroutput> command
693with Valgrind-specific information.
694The operating system's thread number is followed
695by Valgrind's internal index for that thread ("tid") and by
696the Valgrind scheduler thread state:</para>
697
698<programlisting><![CDATA[
699(gdb) info threads
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
704(gdb)
705]]></programlisting>
706
707</sect2>
708
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>
712
713<para> When the option <option>--vgdb-shadow-registers=yes</option> is
714given, the Valgrind gdbserver will let GDB examine and/or modify
715Valgrind's shadow registers. GDB version 7.1 or later is needed for this
philippeede2d6c2012-03-14 21:27:35 +0000716to work. For x86 and amd64, GDB version 7.2 or later is needed.</para>
sewardj350c0fe2011-06-17 08:31:22 +0000717
718<para>For each CPU register, the Valgrind core maintains two
sewardje81a4542011-06-25 10:05:28 +0000719shadow register sets. These shadow registers can be accessed from
sewardj350c0fe2011-06-17 08:31:22 +0000720GDB by giving a postfix <computeroutput>s1</computeroutput>
721or <computeroutput>s2</computeroutput> for respectively the first
sewardje81a4542011-06-25 10:05:28 +0000722and second shadow register. For example, the x86 register
723<computeroutput>eax</computeroutput> and its two shadows
724can be examined using the following commands:</para>
sewardj350c0fe2011-06-17 08:31:22 +0000725
726<programlisting><![CDATA[
727(gdb) p $eax
728$1 = 0
729(gdb) p $eaxs1
730$2 = 0
731(gdb) p $eaxs2
732$3 = 0
733(gdb)
734]]></programlisting>
735
philippeede2d6c2012-03-14 21:27:35 +0000736<para>Float shadow registers are shown by GDB as unsigned integer
737values instead of float values, as it is expected that these
738shadow values are mostly used for memcheck validity bits. </para>
739
philippe419d5f22012-05-24 21:33:17 +0000740<para>Intel/amd64 AVX registers <computeroutput>ymm0</computeroutput>
741to <computeroutput>ymm15</computeroutput> have also their shadow
742registers. 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).
749Note the inconsistent notation for the names of the half registers:
750the lower part starts with an <computeroutput>x</computeroutput>,
751the upper part starts with an <computeroutput>y</computeroutput>
752and has an <computeroutput>h</computeroutput> before the shadow postfix.
753</para>
sewardjca456c72012-08-05 13:44:15 +0000754<para>The special presentation of the AVX shadow registers is due to
755the fact that GDB independently retrieves the lower and upper half of
756the <computeroutput>ymm</computeroutput> registers. GDB does not
757however know that the shadow half registers have to be shown combined.
philippe419d5f22012-05-24 21:33:17 +0000758</para>
sewardj350c0fe2011-06-17 08:31:22 +0000759</sect2>
760
761
762<sect2 id="manual-core-adv.gdbserver-limitations"
763 xreflabel="Limitations of the Valgrind gdbserver">
764<title>Limitations of the Valgrind gdbserver</title>
765
766<para>Debugging with the Valgrind gdbserver is very similar to native
767debugging. Valgrind's gdbserver implementation is quite
768complete, and so provides most of the GDB debugging functionality. There
769are however some limitations and peculiarities:</para>
770 <itemizedlist>
771 <listitem>
772 <para>Precision of "stop-at" commands.</para>
773 <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,
sewardje81a4542011-06-25 10:05:28 +0000782 re-instrumentation of the block currently being executed is not
sewardj350c0fe2011-06-17 08:31:22 +0000783 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
786 precisely.
787 </para>
788 <para>
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.
796 </para>
797 <para>
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
philippe1e433b82012-07-25 21:58:40 +0000802 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
sewardj350c0fe2011-06-17 08:31:22 +0000805 to <option>--vgdb=no</option>.
806 </para>
807 </listitem>
808
809 <listitem>
philippe5a5d6b62012-07-24 20:24:39 +0000810 <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.
philippe0c0291a2012-08-01 22:03:12 +0000814 The default value
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
818 points).
819 Disabling some optimisations using the following values will increase
philippe1e433b82012-07-25 21:58:40 +0000820 the precision of registers and flags values (a typical performance
821 impact for memcheck is given for each option).
philippe5a5d6b62012-07-24 20:24:39 +0000822 <itemizedlist>
823 <listitem>
philippe0c0291a2012-08-01 22:03:12 +0000824 <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
826 access.
philippe5a5d6b62012-07-24 20:24:39 +0000827 </listitem>
828 <listitem>
philippe0c0291a2012-08-01 22:03:12 +0000829 <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.
philippe5a5d6b62012-07-24 20:24:39 +0000831 </listitem>
832 </itemizedlist>
philippe0c0291a2012-08-01 22:03:12 +0000833 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>.
philippe0d366ad2012-03-05 22:09:20 +0000836 </para>
837 </listitem>
838
839 <listitem>
sewardj350c0fe2011-06-17 08:31:22 +0000840 <para>Hardware watchpoint support by the Valgrind
841 gdbserver.</para>
842
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.
854 </para>
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
sewardj47ffedb2011-10-24 07:36:57 +0000861 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.
sewardj350c0fe2011-06-17 08:31:22 +0000865 </para>
sewardje81a4542011-06-25 10:05:28 +0000866 <para>Memcheck implements hardware watchpoint simulation by
sewardj350c0fe2011-06-17 08:31:22 +0000867 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.
873 </para>
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
878 watched memory.
879 </para>
sewardje81a4542011-06-25 10:05:28 +0000880 <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
sewardj350c0fe2011-06-17 08:31:22 +0000883 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.
886 </para>
887 </listitem>
888
889 <listitem>
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
902add symbol table from file "/lib/libc.so.6" at
903 .text_addr = 0x4002c000
904(y or n) y
905Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
906(gdb)
907]]></programlisting>
908 </para>
909 </listitem>
910
911 <listitem>
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
sewardje81a4542011-06-25 10:05:28 +0000915 if GDB was configured and built with the "expat"
916 library. If your GDB was not configured with XML support, it
sewardj350c0fe2011-06-17 08:31:22 +0000917 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.
923 </para>
924 </listitem>
925
926 <listitem>
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
philippe0c0291a2012-08-01 22:03:12 +0000931 <option>--vex-iropt-register-updates=allregs-at-mem-access</option>
932 or <option>--vex-iropt-register-updates=allregs-at-each-insn</option>.
sewardj350c0fe2011-06-17 08:31:22 +0000933 You must also pass this option in order to get a precise stack when
934 a signal is trapped by GDB.
935 </para>
936 </listitem>
937
938 <listitem>
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.
945 </para>
946 </listitem>
947
948 <listitem>
949 <para>Execution of Inferior function calls by the Valgrind
950 gdbserver.</para>
951
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
sewardje81a4542011-06-25 10:05:28 +0000958 example, the following GDB command causes an inferior call to the
sewardj350c0fe2011-06-17 08:31:22 +0000959 libc "printf" function to be executed by the process
960 being debugged:
961 </para>
962 <programlisting><![CDATA[
963(gdb) p printf("process being debugged has pid %d\n", getpid())
964$5 = 36
965(gdb)
966]]></programlisting>
967
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
sewardj30b3eca2011-06-28 08:20:39 +0000972 use <computeroutput>v.set vgdb-error</computeroutput> to set a
sewardj350c0fe2011-06-17 08:31:22 +0000973 big value before the call, then manually reset it to its original
974 value when the call is complete.</para>
975
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>
982
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.
991 </para>
992
993 </listitem>
994
995 <listitem>
996 <para>Connecting to or interrupting a Valgrind process blocked in
997 a system call.</para>
998
999 <para>Connecting to or interrupting a Valgrind process blocked in
1000 a system call requires the "ptrace" system call to be usable.
philippe25583172013-05-09 21:29:23 +00001001 This may be disabled in your kernel for security reasons.
1002 </para>
sewardj350c0fe2011-06-17 08:31:22 +00001003
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
1012 scheduler.
1013 </para>
1014
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.
1026 </para>
1027
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.
1037 </para>
1038
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".
1045 </para>
1046
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
philippe25583172013-05-09 21:29:23 +00001050 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>
sewardj350c0fe2011-06-17 08:31:22 +00001053
sewardje81a4542011-06-25 10:05:28 +00001054 <para>Unblocking processes blocked in system calls is not
sewardj992d3cc2011-10-22 20:38:08 +00001055 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
1057 OS X or Android.
sewardj350c0fe2011-06-17 08:31:22 +00001058 </para>
1059
1060 </listitem>
1061
1062 <listitem>
1063 <para>Changing register values.</para>
sewardje81a4542011-06-25 10:05:28 +00001064 <para>The Valgrind gdbserver will only modify the values of the
sewardj350c0fe2011-06-17 08:31:22 +00001065 thread's registers when the thread is in status Runnable or
1066 Yielding. In other states (typically, WaitSys), attempts to
1067 change register values will fail. Amongst other things, this
1068 means that inferior calls are not executed for a thread which is
1069 in a system call, since the Valgrind gdbserver does not implement
1070 system call restart.
1071 </para>
1072 </listitem>
1073
1074 <listitem>
1075 <para>Unsupported GDB functionality.</para>
1076 <para>GDB provides a lot of debugging functionality and not all
1077 of it is supported. Specifically, the following are not
1078 supported: reversible debugging and tracepoints.
1079 </para>
1080 </listitem>
1081
1082 <listitem>
1083 <para>Unknown limitations or problems.</para>
1084 <para>The combination of GDB, Valgrind and the Valgrind gdbserver
1085 probably has unknown other limitations and problems. If you
1086 encounter strange or unexpected behaviour, feel free to report a
1087 bug. But first please verify that the limitation or problem is
1088 not inherent to GDB or the GDB remote protocol. You may be able
1089 to do so by checking the behaviour when using standard gdbserver
1090 part of the GDB package.
1091 </para>
1092 </listitem>
1093
1094 </itemizedlist>
1095
1096</sect2>
1097
philippea02e2672013-03-06 22:39:18 +00001098<!-- Referenced from both the manual and manpage -->
1099<sect2 id="&vg-vgdb-id;"
1100 xreflabel="&vg-vgdb-label;">
sewardj350c0fe2011-06-17 08:31:22 +00001101<title>vgdb command line options</title>
1102<para> Usage: <computeroutput>vgdb [OPTION]... [[-c] COMMAND]...</computeroutput></para>
1103
1104<para> vgdb ("Valgrind to GDB") is a small program that is used as an
sewardje81a4542011-06-25 10:05:28 +00001105intermediary between Valgrind and GDB or a shell.
1106Therefore, it has two usage modes:
sewardj350c0fe2011-06-17 08:31:22 +00001107</para>
mjw3e8d6342013-07-03 10:00:19 +00001108<!-- start of xi:include in the manpage -->
1109<orderedlist id="vgdb.desc.modes">
sewardj350c0fe2011-06-17 08:31:22 +00001110 <listitem id="manual-core-adv.vgdb-standalone" xreflabel="vgdb standalone">
1111 <para>As a standalone utility, it is used from a shell command
1112 line to send monitor commands to a process running under
1113 Valgrind. For this usage, the vgdb OPTION(s) must be followed by
1114 the monitor command to send. To send more than one command,
1115 separate them with the <option>-c</option> option.
1116 </para>
1117 </listitem>
1118
1119 <listitem id="manual-core-adv.vgdb-relay" xreflabel="vgdb relay">
1120 <para>In combination with GDB "target remote |" command, it is
1121 used as the relay application between GDB and the Valgrind
1122 gdbserver. For this usage, only OPTION(s) can be given, but no
1123 COMMAND can be given.
1124 </para>
1125 </listitem>
1126
1127</orderedlist>
mjw3e8d6342013-07-03 10:00:19 +00001128<!-- end of xi:include in the manpage -->
sewardj350c0fe2011-06-17 08:31:22 +00001129
1130<para><computeroutput>vgdb</computeroutput> accepts the following
1131options:</para>
mjw3e8d6342013-07-03 10:00:19 +00001132<!-- start of xi:include in the manpage -->
1133<variablelist id="vgdb.opts.list">
1134 <varlistentry>
1135 <term><option>--pid=&lt;number&gt;</option></term>
1136 <listitem><para>Specifies the PID of
sewardj350c0fe2011-06-17 08:31:22 +00001137 the process to which vgdb must connect to. This option is useful
1138 in case more than one Valgrind gdbserver can be connected to. If
1139 the <option>--pid</option> argument is not given and multiple
1140 Valgrind gdbserver processes are running, vgdb will report the
mjw3e8d6342013-07-03 10:00:19 +00001141 list of such processes and then exit.</para></listitem>
1142 </varlistentry>
sewardj350c0fe2011-06-17 08:31:22 +00001143
mjw3e8d6342013-07-03 10:00:19 +00001144 <varlistentry>
1145 <term><option>--vgdb-prefix</option></term>
1146 <listitem><para>Must be given to both
sewardj350c0fe2011-06-17 08:31:22 +00001147 Valgrind and vgdb if you want to change the default prefix for the
1148 FIFOs (named pipes) used for communication between the Valgrind
mjw3e8d6342013-07-03 10:00:19 +00001149 gdbserver and vgdb.</para></listitem>
1150 </varlistentry>
sewardj350c0fe2011-06-17 08:31:22 +00001151
mjw3e8d6342013-07-03 10:00:19 +00001152 <varlistentry>
1153 <term><option>--wait=&lt;number&gt;</option></term>
1154 <listitem><para>Instructs vgdb to
sewardj30b3eca2011-06-28 08:20:39 +00001155 search for available Valgrind gdbservers for the specified number
1156 of seconds. This makes it possible start a vgdb process
1157 before starting the Valgrind gdbserver with which you intend the
1158 vgdb to communicate. This option is useful when used in
1159 conjunction with a <option>--vgdb-prefix</option> that is
1160 unique to the process you want to wait for.
1161 Also, if you use the <option>--wait</option> argument in the GDB
1162 "target remote" command, you must set the GDB remotetimeout to a
1163 value bigger than the --wait argument value. See option
1164 <option>--max-invoke-ms</option> (just below)
mjw3e8d6342013-07-03 10:00:19 +00001165 for an example of setting the remotetimeout value.</para></listitem>
1166 </varlistentry>
sewardj30b3eca2011-06-28 08:20:39 +00001167
mjw3e8d6342013-07-03 10:00:19 +00001168 <varlistentry>
1169 <term><option>--max-invoke-ms=&lt;number&gt;</option></term>
1170 <listitem><para>Gives the
sewardj350c0fe2011-06-17 08:31:22 +00001171 number of milliseconds after which vgdb will force the invocation
sewardj30b3eca2011-06-28 08:20:39 +00001172 of gdbserver embedded in Valgrind. The default value is 100
1173 milliseconds. A value of 0 disables forced invocation. The forced
1174 invocation is used when vgdb is connected to a Valgrind gdbserver,
1175 and the Valgrind process has all its threads blocked in a system
1176 call.
sewardj350c0fe2011-06-17 08:31:22 +00001177 </para>
1178
1179 <para>If you specify a large value, you might need to increase the
1180 GDB "remotetimeout" value from its default value of 2 seconds.
1181 You should ensure that the timeout (in seconds) is
1182 bigger than the <option>--max-invoke-ms</option> value. For
1183 example, for <option>--max-invoke-ms=5000</option>, the following
1184 GDB command is suitable:
1185 <screen><![CDATA[
1186 (gdb) set remotetimeout 6
1187 ]]></screen>
mjw3e8d6342013-07-03 10:00:19 +00001188 </para></listitem>
1189 </varlistentry>
sewardj350c0fe2011-06-17 08:31:22 +00001190
mjw3e8d6342013-07-03 10:00:19 +00001191 <varlistentry>
1192 <term><option>--cmd-time-out=&lt;number&gt;</option></term>
1193 <listitem><para>Instructs a
sewardj30b3eca2011-06-28 08:20:39 +00001194 standalone vgdb to exit if the Valgrind gdbserver it is connected
1195 to does not process a command in the specified number of seconds.
mjw3e8d6342013-07-03 10:00:19 +00001196 The default value is to never time out.</para></listitem>
1197 </varlistentry>
sewardj30b3eca2011-06-28 08:20:39 +00001198
mjw3e8d6342013-07-03 10:00:19 +00001199 <varlistentry>
1200 <term><option>--port=&lt;portnr&gt;</option></term>
1201 <listitem><para>Instructs vgdb to
sewardj992d3cc2011-10-22 20:38:08 +00001202 use tcp/ip and listen for GDB on the specified port nr rather than
1203 to use a pipe to communicate with GDB. Using tcp/ip allows to have
1204 GDB running on one computer and debugging a Valgrind process
1205 running on another target computer.
1206 Example:
1207 <screen><![CDATA[
1208# On the target computer, start your program under valgrind using
1209valgrind --vgdb-error=0 prog
1210# and then in another shell, run:
1211vgdb --port=1234
1212]]></screen></para>
1213 <para>On the computer which hosts GDB, execute the command:
1214 <screen><![CDATA[
1215gdb prog
1216(gdb) target remote targetip:1234
1217]]></screen>
1218 where targetip is the ip address or hostname of the target computer.
mjw3e8d6342013-07-03 10:00:19 +00001219 </para></listitem>
1220 </varlistentry>
sewardj30b3eca2011-06-28 08:20:39 +00001221
mjw3e8d6342013-07-03 10:00:19 +00001222 <varlistentry>
1223 <term><option>-c</option></term>
1224 <listitem><para>To give more than one command to a
sewardj30b3eca2011-06-28 08:20:39 +00001225 standalone vgdb, separate the commands by an
1226 option <option>-c</option>. Example:
sewardj350c0fe2011-06-17 08:31:22 +00001227 <screen><![CDATA[
sewardj30b3eca2011-06-28 08:20:39 +00001228vgdb v.set log_output -c leak_check any
mjw3e8d6342013-07-03 10:00:19 +00001229]]></screen></para></listitem>
1230 </varlistentry>
sewardj350c0fe2011-06-17 08:31:22 +00001231
mjw3e8d6342013-07-03 10:00:19 +00001232 <varlistentry>
1233 <term><option>-l</option></term>
1234 <listitem><para>Instructs a standalone vgdb to report
sewardj30b3eca2011-06-28 08:20:39 +00001235 the list of the Valgrind gdbserver processes running and then
mjw3e8d6342013-07-03 10:00:19 +00001236 exit.</para></listitem>
1237 </varlistentry>
sewardj350c0fe2011-06-17 08:31:22 +00001238
mjw3e8d6342013-07-03 10:00:19 +00001239 <varlistentry>
1240 <term><option>-D</option></term>
1241 <listitem><para>Instructs a standalone vgdb to show the
sewardj30b3eca2011-06-28 08:20:39 +00001242 state of the shared memory used by the Valgrind gdbserver. vgdb
1243 will exit after having shown the Valgrind gdbserver shared memory
mjw3e8d6342013-07-03 10:00:19 +00001244 state.</para></listitem>
1245 </varlistentry>
sewardj30b3eca2011-06-28 08:20:39 +00001246
mjw3e8d6342013-07-03 10:00:19 +00001247 <varlistentry>
1248 <term><option>-d</option></term>
1249 <listitem><para>Instructs vgdb to produce debugging
sewardj30b3eca2011-06-28 08:20:39 +00001250 output. Give multiple <option>-d</option> args to increase the
1251 verbosity. When giving <option>-d</option> to a relay vgdb, you better
1252 redirect the standard error (stderr) of vgdb to a file to avoid
mjw3e8d6342013-07-03 10:00:19 +00001253 interaction between GDB and vgdb debugging output.</para></listitem>
1254 </varlistentry>
sewardj30b3eca2011-06-28 08:20:39 +00001255
mjw3e8d6342013-07-03 10:00:19 +00001256</variablelist>
1257<!-- end of xi:include in the manpage -->
1258
sewardj350c0fe2011-06-17 08:31:22 +00001259</sect2>
1260
1261
philippea02e2672013-03-06 22:39:18 +00001262<!-- Referenced from both the manual and manpage -->
1263<sect2 id="&vg-monitor-id;"
1264 xreflabel="&vg-monitor-label;">
sewardj350c0fe2011-06-17 08:31:22 +00001265<title>Valgrind monitor commands</title>
1266
philippe1de37832012-05-28 08:56:24 +00001267<para>This section describes the Valgrind monitor commands, available
1268regardless of the Valgrind tool selected. For the tool specific
1269commands, refer to <xref linkend="mc-manual.monitor-commands"/>,
1270<xref linkend="cl-manual.monitor-commands"/> and
1271<xref linkend="ms-manual.monitor-commands"/>. </para>
1272
1273<para> The monitor commands can be sent either from a shell command line, by using a
1274standalone vgdb, or from GDB, by using GDB's "monitor"
philippe583ae932013-01-20 17:46:19 +00001275command (see <xref linkend="manual-core-adv.gdbserver-commandhandling"/>).
1276They can also be launched by the client program, using the VALGRIND_MONITOR_COMMAND
1277client request.
1278</para>
sewardj350c0fe2011-06-17 08:31:22 +00001279
1280<itemizedlist>
1281 <listitem>
1282 <para><varname>help [debug]</varname> instructs Valgrind's gdbserver
1283 to give the list of all monitor commands of the Valgrind core and
1284 of the tool. The optional "debug" argument tells to also give help
1285 for the monitor commands aimed at Valgrind internals debugging.
1286 </para>
1287 </listitem>
1288
1289 <listitem>
sewardj30b3eca2011-06-28 08:20:39 +00001290 <para><varname>v.info all_errors</varname> shows all errors found
sewardj350c0fe2011-06-17 08:31:22 +00001291 so far.</para>
1292 </listitem>
1293 <listitem>
sewardj30b3eca2011-06-28 08:20:39 +00001294 <para><varname>v.info last_error</varname> shows the last error
sewardj350c0fe2011-06-17 08:31:22 +00001295 found.</para>
1296 </listitem>
1297
1298 <listitem>
philippe02ea4132013-09-04 21:42:43 +00001299 <para><varname>v.info n_errs_found [msg]</varname> shows the number of
philippebaf69642012-02-15 22:29:30 +00001300 errors found so far, the nr of errors shown so far and the current
philippe02ea4132013-09-04 21:42:43 +00001301 value of the <option>--vgdb-error</option> argument. The optional
1302 <computeroutput>msg</computeroutput> (one or more words) is appended.
1303 Typically, this can be used to insert markers in a process output
1304 file between several tests executed in sequence by a process
1305 started only once. This allows to associate the errors reported
1306 by Valgrind with the specific test that produced these errors.
1307 </para>
sewardj350c0fe2011-06-17 08:31:22 +00001308 </listitem>
1309
1310 <listitem>
philippec3360382012-10-21 14:37:14 +00001311 <para><varname>v.info open_fds</varname> shows the list of open file
1312 descriptors and details related to the file descriptor.
1313 This only works if <option>--track-fds=yes</option>
1314 was given at Valgrind startup.</para>
1315 </listitem>
1316
1317 <listitem>
sewardj30b3eca2011-06-28 08:20:39 +00001318 <para><varname>v.set {gdb_output | log_output |
sewardj350c0fe2011-06-17 08:31:22 +00001319 mixed_output}</varname> allows redirection of the Valgrind output
1320 (e.g. the errors detected by the tool). The default setting is
1321 <computeroutput>mixed_output</computeroutput>.</para>
1322
1323 <para>With <computeroutput>mixed_output</computeroutput>, the
1324 Valgrind output goes to the Valgrind log (typically stderr) while
1325 the output of the interactive GDB monitor commands (e.g.
sewardj30b3eca2011-06-28 08:20:39 +00001326 <computeroutput>v.info last_error</computeroutput>)
sewardj350c0fe2011-06-17 08:31:22 +00001327 is displayed by GDB.</para>
1328
1329 <para>With <computeroutput>gdb_output</computeroutput>, both the
sewardje81a4542011-06-25 10:05:28 +00001330 Valgrind output and the interactive GDB monitor commands output are
1331 displayed by GDB.</para>
sewardj350c0fe2011-06-17 08:31:22 +00001332
1333 <para>With <computeroutput>log_output</computeroutput>, both the
sewardje81a4542011-06-25 10:05:28 +00001334 Valgrind output and the interactive GDB monitor commands output go
sewardj350c0fe2011-06-17 08:31:22 +00001335 to the Valgrind log.</para>
1336 </listitem>
1337
1338 <listitem>
sewardj30b3eca2011-06-28 08:20:39 +00001339 <para><varname>v.wait [ms (default 0)]</varname> instructs
sewardj350c0fe2011-06-17 08:31:22 +00001340 Valgrind gdbserver to sleep "ms" milli-seconds and then
1341 continue. When sent from a standalone vgdb, if this is the last
1342 command, the Valgrind process will continue the execution of the
1343 guest process. The typical usage of this is to use vgdb to send a
1344 "no-op" command to a Valgrind gdbserver so as to continue the
sewardje81a4542011-06-25 10:05:28 +00001345 execution of the guest process.
sewardj350c0fe2011-06-17 08:31:22 +00001346 </para>
1347 </listitem>
1348
1349 <listitem>
sewardj30b3eca2011-06-28 08:20:39 +00001350 <para><varname>v.kill</varname> requests the gdbserver to kill
sewardj350c0fe2011-06-17 08:31:22 +00001351 the process. This can be used from a standalone vgdb to properly
1352 kill a Valgrind process which is currently expecting a vgdb
1353 connection.</para>
1354 </listitem>
1355
1356 <listitem>
sewardj30b3eca2011-06-28 08:20:39 +00001357 <para><varname>v.set vgdb-error &lt;errornr&gt;</varname>
sewardj350c0fe2011-06-17 08:31:22 +00001358 dynamically changes the value of the
1359 <option>--vgdb-error</option> argument. A
1360 typical usage of this is to start with
1361 <option>--vgdb-error=0</option> on the
1362 command line, then set a few breakpoints, set the vgdb-error value
1363 to a huge value and continue execution.</para>
1364 </listitem>
1365
1366</itemizedlist>
1367
1368<para>The following Valgrind monitor commands are useful for
1369investigating the behaviour of Valgrind or its gdbserver in case of
1370problems or bugs.</para>
1371
1372<itemizedlist>
1373
1374 <listitem>
philippe6ec8d632013-01-23 22:10:28 +00001375 <para><varname>v.do expensive_sanity_check_general</varname>
1376 executes various sanity checks. In particular, the sanity of the
1377 Valgrind heap is verified. This can be useful if you suspect that
1378 your program and/or Valgrind has a bug corrupting Valgrind data
1379 structure. It can also be used when a Valgrind tool
1380 reports a client error to the connected GDB, in order to verify
1381 the sanity of Valgrind before continuing the execution.
1382 </para>
1383 </listitem>
1384
1385 <listitem>
sewardj30b3eca2011-06-28 08:20:39 +00001386 <para><varname>v.info gdbserver_status</varname> shows the
sewardj350c0fe2011-06-17 08:31:22 +00001387 gdbserver status. In case of problems (e.g. of communications),
sewardj47ffedb2011-10-24 07:36:57 +00001388 this shows the values of some relevant Valgrind gdbserver internal
sewardj350c0fe2011-06-17 08:31:22 +00001389 variables. Note that the variables related to breakpoints and
1390 watchpoints (e.g. the number of breakpoint addresses and the number of
1391 watchpoints) will be zero, as GDB by default removes all
1392 watchpoints and breakpoints when execution stops, and re-inserts
1393 them when resuming the execution of the debugged process. You can
sewardje81a4542011-06-25 10:05:28 +00001394 change this GDB behaviour by using the GDB command
sewardj350c0fe2011-06-17 08:31:22 +00001395 <computeroutput>set breakpoint always-inserted on</computeroutput>.
1396 </para>
1397 </listitem>
1398
1399 <listitem>
philippe93a6a8d2012-04-27 22:59:43 +00001400 <para><varname>v.info memory [aspacemgr]</varname> shows the statistics of
sewardj350c0fe2011-06-17 08:31:22 +00001401 Valgrind's internal heap management. If
1402 option <option>--profile-heap=yes</option> was given, detailed
philippe93a6a8d2012-04-27 22:59:43 +00001403 statistics will be output. With the optional argument
1404 <computeroutput>aspacemgr</computeroutput>. the segment list maintained
1405 by valgrind address space manager will be output. Note that
1406 this list of segments is always output on the Valgrind log.
sewardj350c0fe2011-06-17 08:31:22 +00001407 </para>
1408 </listitem>
1409
1410 <listitem>
philippef3a6e932013-01-10 20:42:51 +00001411 <para><varname>v.info exectxt</varname> shows informations about
1412 the "executable contexts" (i.e. the stack traces) recorded by
1413 Valgrind. For some programs, Valgrind can record a very high
1414 number of such stack traces, causing a high memory usage. This
1415 monitor command shows all the recorded stack traces, followed by
1416 some statistics. This can be used to analyse the reason for having
1417 a big number of stack traces. Typically, you will use this command
1418 if <varname>v.info memory</varname> has shown significant memory
1419 usage by the "exectxt" arena.
1420 </para>
1421 </listitem>
1422
1423 <listitem>
philippe4f6f3362014-04-19 00:25:54 +00001424 <para><varname>v.info scheduler</varname> shows various
1425 information about threads. First, it outputs the host stack trace,
1426 i.e. the Valgrind code being executed. Then, for each thread, it
1427 outputs the thread state. For non terminated threads, the state is
1428 followed by the guest (client) stack trace. Finally, for each
1429 active thread or for each terminated thread slot not yet re-used,
1430 it shows the max usage of the valgrind stack.</para>
1431 <para>Showing the client stack traces allows to compare the stack
1432 traces produced by the Valgrind unwinder with the stack traces
1433 produced by GDB+Valgrind gdbserver. Pay attention that GDB and
1434 Valgrind scheduler status have their own thread numbering
1435 scheme. To make the link between the GDB thread number and the
1436 corresponding Valgrind scheduler thread number, use the GDB
1437 command <computeroutput>info threads</computeroutput>. The output
1438 of this command shows the GDB thread number and the valgrind
1439 'tid'. The 'tid' is the thread number output
1440 by <computeroutput>v.info scheduler</computeroutput>. When using
1441 the callgrind tool, the callgrind monitor command
sewardjd6e13d82011-10-22 20:23:30 +00001442 <computeroutput>status</computeroutput> outputs internal callgrind
1443 information about the stack/call graph it maintains.
1444 </para>
1445 </listitem>
1446
1447 <listitem>
philippe8587b542013-12-15 20:24:43 +00001448 <para><varname>v.info stats</varname> shows various valgrind core and
1449 tool statistics. With this, Valgrind and tool statistics can
1450 be examined while running, even without option <option>--stats=yes</option>.
1451 </para>
1452 </listitem>
1453
1454 <listitem>
sewardj30b3eca2011-06-28 08:20:39 +00001455 <para><varname>v.set debuglog &lt;intvalue&gt;</varname> sets the
sewardj350c0fe2011-06-17 08:31:22 +00001456 Valgrind debug log level to &lt;intvalue&gt;. This allows to
1457 dynamically change the log level of Valgrind e.g. when a problem
1458 is detected.</para>
1459 </listitem>
1460
1461 <listitem>
philippe180a7502014-04-20 13:41:10 +00001462 <para><varname>v.set hostvisibility [yes*|no]</varname> The value
1463 "yes" indicates to gdbserver that GDB can look at the Valgrind
1464 'host' (internal) status/memory. "no" disables this access.
1465 When hostvisibility is activated, GDB can e.g. look at Valgrind
1466 global variables. As an example, to examine a Valgrind global
1467 variable of the memcheck tool on an x86, do the following setup:</para>
1468
1469<screen><![CDATA[
1470(gdb) monitor v.set hostvisibility yes
1471(gdb) add-symbol-file /path/to/tool/executable/file/memcheck-x86-linux 0x38000000
1472add symbol table from file "/path/to/tool/executable/file/memcheck-x86-linux" at
1473 .text_addr = 0x38000000
1474(y or n) y
1475Reading symbols from /path/to/tool/executable/file/memcheck-x86-linux...done.
1476(gdb)
1477]]></screen>
1478
1479 <para>After that, variables defined in memcheck-x86-linux can be accessed, e.g.</para>
1480
1481<screen><![CDATA[
1482(gdb) p /x vgPlain_threads[1].os_state
1483$3 = {lwpid = 0x4688, threadgroup = 0x4688, parent = 0x0,
1484 valgrind_stack_base = 0x62e78000, valgrind_stack_init_SP = 0x62f79fe0,
1485 exitcode = 0x0, fatalsig = 0x0}
1486(gdb) p vex_control
1487$5 = {iropt_verbosity = 0, iropt_level = 2,
1488 iropt_register_updates = VexRegUpdUnwindregsAtMemAccess,
1489 iropt_unroll_thresh = 120, guest_max_insns = 60, guest_chase_thresh = 10,
1490 guest_chase_cond = 0 '\000'}
1491(gdb)
1492]]></screen>
1493 </listitem>
1494
1495 <listitem>
sewardj30b3eca2011-06-28 08:20:39 +00001496 <para><varname>v.translate &lt;address&gt;
sewardj350c0fe2011-06-17 08:31:22 +00001497 [&lt;traceflags&gt;]</varname> shows the translation of the block
1498 containing <computeroutput>address</computeroutput> with the given
1499 trace flags. The <computeroutput>traceflags</computeroutput> value
sewardje81a4542011-06-25 10:05:28 +00001500 bit patterns have similar meaning to Valgrind's
sewardj350c0fe2011-06-17 08:31:22 +00001501 <option>--trace-flags</option> option. It can be given
1502 in hexadecimal (e.g. 0x20) or decimal (e.g. 32) or in binary 1s
1503 and 0s bit (e.g. 0b00100000). The default value of the traceflags
1504 is 0b00100000, corresponding to "show after instrumentation".
1505 The output of this command always goes to the Valgrind
1506 log.</para>
1507 <para>The additional bit flag 0b100000000 (bit 8)
1508 has no equivalent in the <option>--trace-flags</option> option.
1509 It enables tracing of the gdbserver specific instrumentation. Note
1510 that this bit 8 can only enable the addition of gdbserver
1511 instrumentation in the trace. Setting it to 0 will not
1512 disable the tracing of the gdbserver instrumentation if it is
1513 active for some other reason, for example because there is a breakpoint at
1514 this address or because gdbserver is in single stepping
1515 mode.</para>
1516 </listitem>
1517
1518</itemizedlist>
1519
1520</sect2>
1521
1522</sect1>
1523
1524
1525
1526
1527
sewardja5fac792007-11-25 00:55:11 +00001528<sect1 id="manual-core-adv.wrapping" xreflabel="Function Wrapping">
1529<title>Function wrapping</title>
1530
1531<para>
njna437a602009-08-04 05:24:46 +00001532Valgrind allows calls to some specified functions to be intercepted and
1533rerouted to a different, user-supplied function. This can do whatever it
1534likes, typically examining the arguments, calling onwards to the original,
1535and possibly examining the result. Any number of functions may be
1536wrapped.</para>
sewardja5fac792007-11-25 00:55:11 +00001537
1538<para>
1539Function wrapping is useful for instrumenting an API in some way. For
njna437a602009-08-04 05:24:46 +00001540example, Helgrind wraps functions in the POSIX pthreads API so it can know
1541about thread status changes, and the core is able to wrap
1542functions in the MPI (message-passing) API so it can know
sewardja5fac792007-11-25 00:55:11 +00001543of memory status changes associated with message arrival/departure.
1544Such information is usually passed to Valgrind by using client
njna437a602009-08-04 05:24:46 +00001545requests in the wrapper functions, although the exact mechanism may vary.
1546</para>
sewardja5fac792007-11-25 00:55:11 +00001547
1548<sect2 id="manual-core-adv.wrapping.example" xreflabel="A Simple Example">
1549<title>A Simple Example</title>
1550
1551<para>Supposing we want to wrap some function</para>
1552
1553<programlisting><![CDATA[
1554int foo ( int x, int y ) { return x + y; }]]></programlisting>
1555
1556<para>A wrapper is a function of identical type, but with a special name
1557which identifies it as the wrapper for <computeroutput>foo</computeroutput>.
1558Wrappers need to include
njna437a602009-08-04 05:24:46 +00001559supporting macros from <filename>valgrind.h</filename>.
sewardja5fac792007-11-25 00:55:11 +00001560Here is a simple wrapper which prints the arguments and return value:</para>
1561
1562<programlisting><![CDATA[
1563#include <stdio.h>
1564#include "valgrind.h"
1565int I_WRAP_SONAME_FNNAME_ZU(NONE,foo)( int x, int y )
1566{
1567 int result;
1568 OrigFn fn;
1569 VALGRIND_GET_ORIG_FN(fn);
1570 printf("foo's wrapper: args %d %d\n", x, y);
1571 CALL_FN_W_WW(result, fn, x,y);
1572 printf("foo's wrapper: result %d\n", result);
1573 return result;
1574}
1575]]></programlisting>
1576
1577<para>To become active, the wrapper merely needs to be present in a text
1578section somewhere in the same process' address space as the function
1579it wraps, and for its ELF symbol name to be visible to Valgrind. In
1580practice, this means either compiling to a
1581<computeroutput>.o</computeroutput> and linking it in, or
1582compiling to a <computeroutput>.so</computeroutput> and
1583<computeroutput>LD_PRELOAD</computeroutput>ing it in. The latter is more
1584convenient in that it doesn't require relinking.</para>
1585
1586<para>All wrappers have approximately the above form. There are three
1587crucial macros:</para>
1588
1589<para><computeroutput>I_WRAP_SONAME_FNNAME_ZU</computeroutput>:
1590this generates the real name of the wrapper.
1591This is an encoded name which Valgrind notices when reading symbol
1592table information. What it says is: I am the wrapper for any function
1593named <computeroutput>foo</computeroutput> which is found in
1594an ELF shared object with an empty
1595("<computeroutput>NONE</computeroutput>") soname field. The specification
1596mechanism is powerful in
1597that wildcards are allowed for both sonames and function names.
1598The details are discussed below.</para>
1599
1600<para><computeroutput>VALGRIND_GET_ORIG_FN</computeroutput>:
mjw2be51222013-04-05 13:19:12 +00001601once in the wrapper, the first priority is
sewardja5fac792007-11-25 00:55:11 +00001602to get hold of the address of the original (and any other supporting
1603information needed). This is stored in a value of opaque
1604type <computeroutput>OrigFn</computeroutput>.
1605The information is acquired using
1606<computeroutput>VALGRIND_GET_ORIG_FN</computeroutput>. It is crucial
1607to make this macro call before calling any other wrapped function
1608in the same thread.</para>
1609
1610<para><computeroutput>CALL_FN_W_WW</computeroutput>: eventually we will
1611want to call the function being
1612wrapped. Calling it directly does not work, since that just gets us
njna437a602009-08-04 05:24:46 +00001613back to the wrapper and leads to an infinite loop. Instead, the result
1614lvalue,
sewardja5fac792007-11-25 00:55:11 +00001615<computeroutput>OrigFn</computeroutput> and arguments are
1616handed to one of a family of macros of the form
1617<computeroutput>CALL_FN_*</computeroutput>. These
1618cause Valgrind to call the original and avoid recursion back to the
1619wrapper.</para>
1620</sect2>
1621
1622<sect2 id="manual-core-adv.wrapping.specs" xreflabel="Wrapping Specifications">
1623<title>Wrapping Specifications</title>
1624
1625<para>This scheme has the advantage of being self-contained. A library of
1626wrappers can be compiled to object code in the normal way, and does
1627not rely on an external script telling Valgrind which wrappers pertain
1628to which originals.</para>
1629
1630<para>Each wrapper has a name which, in the most general case says: I am the
1631wrapper for any function whose name matches FNPATT and whose ELF
1632"soname" matches SOPATT. Both FNPATT and SOPATT may contain wildcards
1633(asterisks) and other characters (spaces, dots, @, etc) which are not
1634generally regarded as valid C identifier names.</para>
1635
1636<para>This flexibility is needed to write robust wrappers for POSIX pthread
1637functions, where typically we are not completely sure of either the
1638function name or the soname, or alternatively we want to wrap a whole
1639set of functions at once.</para>
1640
1641<para>For example, <computeroutput>pthread_create</computeroutput>
1642in GNU libpthread is usually a
1643versioned symbol - one whose name ends in, eg,
1644<computeroutput>@GLIBC_2.3</computeroutput>. Hence we
1645are not sure what its real name is. We also want to cover any soname
1646of the form <computeroutput>libpthread.so*</computeroutput>.
1647So the header of the wrapper will be</para>
1648
1649<programlisting><![CDATA[
1650int I_WRAP_SONAME_FNNAME_ZZ(libpthreadZdsoZd0,pthreadZucreateZAZa)
1651 ( ... formals ... )
1652 { ... body ... }
1653]]></programlisting>
1654
1655<para>In order to write unusual characters as valid C function names, a
1656Z-encoding scheme is used. Names are written literally, except that
1657a capital Z acts as an escape character, with the following encoding:</para>
1658
1659<programlisting><![CDATA[
1660 Za encodes *
1661 Zp +
1662 Zc :
1663 Zd .
1664 Zu _
1665 Zh -
1666 Zs (space)
1667 ZA @
1668 ZZ Z
1669 ZL ( # only in valgrind 3.3.0 and later
1670 ZR ) # only in valgrind 3.3.0 and later
1671]]></programlisting>
1672
1673<para>Hence <computeroutput>libpthreadZdsoZd0</computeroutput> is an
1674encoding of the soname <computeroutput>libpthread.so.0</computeroutput>
1675and <computeroutput>pthreadZucreateZAZa</computeroutput> is an encoding
1676of the function name <computeroutput>pthread_create@*</computeroutput>.
1677</para>
1678
1679<para>The macro <computeroutput>I_WRAP_SONAME_FNNAME_ZZ</computeroutput>
1680constructs a wrapper name in which
1681both the soname (first component) and function name (second component)
1682are Z-encoded. Encoding the function name can be tiresome and is
1683often unnecessary, so a second macro,
1684<computeroutput>I_WRAP_SONAME_FNNAME_ZU</computeroutput>, can be
1685used instead. The <computeroutput>_ZU</computeroutput> variant is
1686also useful for writing wrappers for
1687C++ functions, in which the function name is usually already mangled
1688using some other convention in which Z plays an important role. Having
1689to encode a second time quickly becomes confusing.</para>
1690
1691<para>Since the function name field may contain wildcards, it can be
1692anything, including just <computeroutput>*</computeroutput>.
1693The same is true for the soname.
1694However, some ELF objects - specifically, main executables - do not
1695have sonames. Any object lacking a soname is treated as if its soname
1696was <computeroutput>NONE</computeroutput>, which is why the original
1697example above had a name
1698<computeroutput>I_WRAP_SONAME_FNNAME_ZU(NONE,foo)</computeroutput>.</para>
1699
1700<para>Note that the soname of an ELF object is not the same as its
1701file name, although it is often similar. You can find the soname of
1702an object <computeroutput>libfoo.so</computeroutput> using the command
1703<computeroutput>readelf -a libfoo.so | grep soname</computeroutput>.</para>
1704</sect2>
1705
1706<sect2 id="manual-core-adv.wrapping.semantics" xreflabel="Wrapping Semantics">
1707<title>Wrapping Semantics</title>
1708
1709<para>The ability for a wrapper to replace an infinite family of functions
1710is powerful but brings complications in situations where ELF objects
1711appear and disappear (are dlopen'd and dlclose'd) on the fly.
1712Valgrind tries to maintain sensible behaviour in such situations.</para>
1713
1714<para>For example, suppose a process has dlopened (an ELF object with
njna437a602009-08-04 05:24:46 +00001715soname) <filename>object1.so</filename>, which contains
sewardja5fac792007-11-25 00:55:11 +00001716<computeroutput>function1</computeroutput>. It starts to use
1717<computeroutput>function1</computeroutput> immediately.</para>
1718
njna437a602009-08-04 05:24:46 +00001719<para>After a while it dlopens <filename>wrappers.so</filename>,
sewardja5fac792007-11-25 00:55:11 +00001720which contains a wrapper
1721for <computeroutput>function1</computeroutput> in (soname)
njna437a602009-08-04 05:24:46 +00001722<filename>object1.so</filename>. All subsequent calls to
sewardja5fac792007-11-25 00:55:11 +00001723<computeroutput>function1</computeroutput> are rerouted to the wrapper.</para>
1724
njna437a602009-08-04 05:24:46 +00001725<para>If <filename>wrappers.so</filename> is
sewardja5fac792007-11-25 00:55:11 +00001726later dlclose'd, calls to <computeroutput>function1</computeroutput> are
1727naturally routed back to the original.</para>
1728
njna437a602009-08-04 05:24:46 +00001729<para>Alternatively, if <filename>object1.so</filename>
1730is dlclose'd but <filename>wrappers.so</filename> remains,
1731then the wrapper exported by <filename>wrappers.so</filename>
sewardja5fac792007-11-25 00:55:11 +00001732becomes inactive, since there
1733is no way to get to it - there is no original to call any more. However,
1734Valgrind remembers that the wrapper is still present. If
njna437a602009-08-04 05:24:46 +00001735<filename>object1.so</filename> is
sewardja5fac792007-11-25 00:55:11 +00001736eventually dlopen'd again, the wrapper will become active again.</para>
1737
1738<para>In short, valgrind inspects all code loading/unloading events to
1739ensure that the set of currently active wrappers remains consistent.</para>
1740
1741<para>A second possible problem is that of conflicting wrappers. It is
1742easily possible to load two or more wrappers, both of which claim
1743to be wrappers for some third function. In such cases Valgrind will
1744complain about conflicting wrappers when the second one appears, and
1745will honour only the first one.</para>
1746</sect2>
1747
1748<sect2 id="manual-core-adv.wrapping.debugging" xreflabel="Debugging">
1749<title>Debugging</title>
1750
1751<para>Figuring out what's going on given the dynamic nature of wrapping
1752can be difficult. The
njnf4b47582009-08-10 01:15:30 +00001753<option>--trace-redir=yes</option> option makes
sewardja5fac792007-11-25 00:55:11 +00001754this possible
1755by showing the complete state of the redirection subsystem after
1756every
njna437a602009-08-04 05:24:46 +00001757<function>mmap</function>/<function>munmap</function>
sewardja5fac792007-11-25 00:55:11 +00001758event affecting code (text).</para>
1759
1760<para>There are two central concepts:</para>
1761
1762<itemizedlist>
1763
1764 <listitem><para>A "redirection specification" is a binding of
1765 a (soname pattern, fnname pattern) pair to a code address.
1766 These bindings are created by writing functions with names
1767 made with the
1768 <computeroutput>I_WRAP_SONAME_FNNAME_{ZZ,_ZU}</computeroutput>
1769 macros.</para></listitem>
1770
njna437a602009-08-04 05:24:46 +00001771 <listitem><para>An "active redirection" is a code-address to
sewardja5fac792007-11-25 00:55:11 +00001772 code-address binding currently in effect.</para></listitem>
1773
1774</itemizedlist>
1775
1776<para>The state of the wrapping-and-redirection subsystem comprises a set of
1777specifications and a set of active bindings. The specifications are
1778acquired/discarded by watching all
njna437a602009-08-04 05:24:46 +00001779<function>mmap</function>/<function>munmap</function>
sewardja5fac792007-11-25 00:55:11 +00001780events on code (text)
1781sections. The active binding set is (conceptually) recomputed from
1782the specifications, and all known symbol names, following any change
1783to the specification set.</para>
1784
njn7e5d4ed2009-07-30 02:57:52 +00001785<para><option>--trace-redir=yes</option> shows the contents
sewardja5fac792007-11-25 00:55:11 +00001786of both sets following any such event.</para>
1787
njn7e5d4ed2009-07-30 02:57:52 +00001788<para><option>-v</option> prints a line of text each
sewardja5fac792007-11-25 00:55:11 +00001789time an active specification is used for the first time.</para>
1790
1791<para>Hence for maximum debugging effectiveness you will need to use both
njnf4b47582009-08-10 01:15:30 +00001792options.</para>
sewardja5fac792007-11-25 00:55:11 +00001793
1794<para>One final comment. The function-wrapping facility is closely
1795tied to Valgrind's ability to replace (redirect) specified
1796functions, for example to redirect calls to
njna437a602009-08-04 05:24:46 +00001797<function>malloc</function> to its
sewardja5fac792007-11-25 00:55:11 +00001798own implementation. Indeed, a replacement function can be
1799regarded as a wrapper function which does not call the original.
1800However, to make the implementation more robust, the two kinds
1801of interception (wrapping vs replacement) are treated differently.
1802</para>
1803
njn7e5d4ed2009-07-30 02:57:52 +00001804<para><option>--trace-redir=yes</option> shows
sewardja5fac792007-11-25 00:55:11 +00001805specifications and bindings for both
1806replacement and wrapper functions. To differentiate the
1807two, replacement bindings are printed using
1808<computeroutput>R-></computeroutput> whereas
1809wraps are printed using <computeroutput>W-></computeroutput>.
1810</para>
1811</sect2>
1812
1813
1814<sect2 id="manual-core-adv.wrapping.limitations-cf"
1815 xreflabel="Limitations - control flow">
1816<title>Limitations - control flow</title>
1817
1818<para>For the most part, the function wrapping implementation is robust.
1819The only important caveat is: in a wrapper, get hold of
1820the <computeroutput>OrigFn</computeroutput> information using
1821<computeroutput>VALGRIND_GET_ORIG_FN</computeroutput> before calling any
1822other wrapped function. Once you have the
1823<computeroutput>OrigFn</computeroutput>, arbitrary
1824calls between, recursion between, and longjumps out of wrappers
1825should work correctly. There is never any interaction between wrapped
1826functions and merely replaced functions
njna437a602009-08-04 05:24:46 +00001827(eg <function>malloc</function>), so you can call
1828<function>malloc</function> etc safely from within wrappers.
sewardja5fac792007-11-25 00:55:11 +00001829</para>
1830
sewardjca456c72012-08-05 13:44:15 +00001831<para>The above comments are true for {x86,amd64,ppc32,arm,mips32,s390}-linux.
1832On
sewardja5fac792007-11-25 00:55:11 +00001833ppc64-linux function wrapping is more fragile due to the (arguably
1834poorly designed) ppc64-linux ABI. This mandates the use of a shadow
1835stack which tracks entries/exits of both wrapper and replacement
1836functions. This gives two limitations: firstly, longjumping out of
1837wrappers will rapidly lead to disaster, since the shadow stack will
1838not get correctly cleared. Secondly, since the shadow stack has
1839finite size, recursion between wrapper/replacement functions is only
1840possible to a limited depth, beyond which Valgrind has to abort the
1841run. This depth is currently 16 calls.</para>
1842
sewardjca456c72012-08-05 13:44:15 +00001843<para>For all platforms ({x86,amd64,ppc32,ppc64,arm,mips32,s390}-linux)
1844all the above
sewardja5fac792007-11-25 00:55:11 +00001845comments apply on a per-thread basis. In other words, wrapping is
1846thread-safe: each thread must individually observe the above
1847restrictions, but there is no need for any kind of inter-thread
1848cooperation.</para>
1849</sect2>
1850
1851
1852<sect2 id="manual-core-adv.wrapping.limitations-sigs"
1853 xreflabel="Limitations - original function signatures">
1854<title>Limitations - original function signatures</title>
1855
1856<para>As shown in the above example, to call the original you must use a
1857macro of the form <computeroutput>CALL_FN_*</computeroutput>.
1858For technical reasons it is impossible
1859to create a single macro to deal with all argument types and numbers,
1860so a family of macros covering the most common cases is supplied. In
1861what follows, 'W' denotes a machine-word-typed value (a pointer or a
1862C <computeroutput>long</computeroutput>),
1863and 'v' denotes C's <computeroutput>void</computeroutput> type.
1864The currently available macros are:</para>
1865
1866<programlisting><![CDATA[
njna437a602009-08-04 05:24:46 +00001867CALL_FN_v_v -- call an original of type void fn ( void )
1868CALL_FN_W_v -- call an original of type long fn ( void )
sewardja5fac792007-11-25 00:55:11 +00001869
njna437a602009-08-04 05:24:46 +00001870CALL_FN_v_W -- call an original of type void fn ( long )
1871CALL_FN_W_W -- call an original of type long fn ( long )
sewardja5fac792007-11-25 00:55:11 +00001872
njna437a602009-08-04 05:24:46 +00001873CALL_FN_v_WW -- call an original of type void fn ( long, long )
1874CALL_FN_W_WW -- call an original of type long fn ( long, long )
sewardja5fac792007-11-25 00:55:11 +00001875
njna437a602009-08-04 05:24:46 +00001876CALL_FN_v_WWW -- call an original of type void fn ( long, long, long )
1877CALL_FN_W_WWW -- call an original of type long fn ( long, long, long )
sewardja5fac792007-11-25 00:55:11 +00001878
njna437a602009-08-04 05:24:46 +00001879CALL_FN_W_WWWW -- call an original of type long fn ( long, long, long, long )
1880CALL_FN_W_5W -- call an original of type long fn ( long, long, long, long, long )
1881CALL_FN_W_6W -- call an original of type long fn ( long, long, long, long, long, long )
sewardja5fac792007-11-25 00:55:11 +00001882and so on, up to
1883CALL_FN_W_12W
1884]]></programlisting>
1885
1886<para>The set of supported types can be expanded as needed. It is
1887regrettable that this limitation exists. Function wrapping has proven
1888difficult to implement, with a certain apparently unavoidable level of
njna437a602009-08-04 05:24:46 +00001889ickiness. After several implementation attempts, the present
sewardja5fac792007-11-25 00:55:11 +00001890arrangement appears to be the least-worst tradeoff. At least it works
1891reliably in the presence of dynamic linking and dynamic code
1892loading/unloading.</para>
1893
1894<para>You should not attempt to wrap a function of one type signature with a
1895wrapper of a different type signature. Such trickery will surely lead
njna437a602009-08-04 05:24:46 +00001896to crashes or strange behaviour. This is not a limitation
sewardja5fac792007-11-25 00:55:11 +00001897of the function wrapping implementation, merely a reflection of the
1898fact that it gives you sweeping powers to shoot yourself in the foot
1899if you are not careful. Imagine the instant havoc you could wreak by
1900writing a wrapper which matched any function name in any soname - in
1901effect, one which claimed to be a wrapper for all functions in the
1902process.</para>
1903</sect2>
1904
1905<sect2 id="manual-core-adv.wrapping.examples" xreflabel="Examples">
1906<title>Examples</title>
1907
1908<para>In the source tree,
njna437a602009-08-04 05:24:46 +00001909<filename>memcheck/tests/wrap[1-8].c</filename> provide a series of
sewardja5fac792007-11-25 00:55:11 +00001910examples, ranging from very simple to quite advanced.</para>
1911
njna437a602009-08-04 05:24:46 +00001912<para><filename>mpi/libmpiwrap.c</filename> is an example
sewardja5fac792007-11-25 00:55:11 +00001913of wrapping a big, complex API (the MPI-2 interface). This file defines
1914almost 300 different wrappers.</para>
1915</sect2>
1916
1917</sect1>
1918
1919
1920
1921
1922</chapter>