1 |
|
---|
2 | /*
|
---|
3 | ----------------------------------------------------------------
|
---|
4 |
|
---|
5 | Notice that the following BSD-style license applies to this one
|
---|
6 | file (callgrind.h) only. The rest of Valgrind is licensed under the
|
---|
7 | terms of the GNU General Public License, version 2, unless
|
---|
8 | otherwise indicated. See the COPYING file in the source
|
---|
9 | distribution for details.
|
---|
10 |
|
---|
11 | ----------------------------------------------------------------
|
---|
12 |
|
---|
13 | This file is part of callgrind, a valgrind tool for cache simulation
|
---|
14 | and call tree tracing.
|
---|
15 |
|
---|
16 | Copyright (C) 2003-2007 Josef Weidendorfer. All rights reserved.
|
---|
17 |
|
---|
18 | Redistribution and use in source and binary forms, with or without
|
---|
19 | modification, are permitted provided that the following conditions
|
---|
20 | are met:
|
---|
21 |
|
---|
22 | 1. Redistributions of source code must retain the above copyright
|
---|
23 | notice, this list of conditions and the following disclaimer.
|
---|
24 |
|
---|
25 | 2. The origin of this software must not be misrepresented; you must
|
---|
26 | not claim that you wrote the original software. If you use this
|
---|
27 | software in a product, an acknowledgment in the product
|
---|
28 | documentation would be appreciated but is not required.
|
---|
29 |
|
---|
30 | 3. Altered source versions must be plainly marked as such, and must
|
---|
31 | not be misrepresented as being the original software.
|
---|
32 |
|
---|
33 | 4. The name of the author may not be used to endorse or promote
|
---|
34 | products derived from this software without specific prior written
|
---|
35 | permission.
|
---|
36 |
|
---|
37 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
---|
38 | OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
---|
39 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
---|
40 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
---|
41 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
---|
42 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
---|
43 | GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
---|
44 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
---|
45 | WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
---|
46 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
---|
47 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
---|
48 |
|
---|
49 | ----------------------------------------------------------------
|
---|
50 |
|
---|
51 | Notice that the above BSD-style license applies to this one file
|
---|
52 | (vgprof.h) only. The entire rest of Valgrind is licensed under
|
---|
53 | the terms of the GNU General Public License, version 2. See the
|
---|
54 | COPYING file in the source distribution for details.
|
---|
55 |
|
---|
56 | ----------------------------------------------------------------
|
---|
57 | */
|
---|
58 |
|
---|
59 | #ifndef __CALLGRIND_H
|
---|
60 | #define __CALLGRIND_H
|
---|
61 |
|
---|
62 | #include "valgrind_p.h"
|
---|
63 |
|
---|
64 | /* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !!
|
---|
65 | This enum comprises an ABI exported by Valgrind to programs
|
---|
66 | which use client requests. DO NOT CHANGE THE ORDER OF THESE
|
---|
67 | ENTRIES, NOR DELETE ANY -- add new ones at the end.
|
---|
68 |
|
---|
69 | The identification ('C','T') for Callgrind has historical
|
---|
70 | reasons: it was called "Calltree" before. Besides, ('C','G') would
|
---|
71 | clash with cachegrind.
|
---|
72 | */
|
---|
73 |
|
---|
74 | typedef
|
---|
75 | enum {
|
---|
76 | VG_USERREQ__DUMP_STATS = VG_USERREQ_TOOL_BASE('C','T'),
|
---|
77 | VG_USERREQ__ZERO_STATS,
|
---|
78 | VG_USERREQ__TOGGLE_COLLECT,
|
---|
79 | VG_USERREQ__DUMP_STATS_AT,
|
---|
80 | VG_USERREQ__START_INSTRUMENTATION,
|
---|
81 | VG_USERREQ__STOP_INSTRUMENTATION
|
---|
82 | } Vg_CallgrindClientRequest;
|
---|
83 |
|
---|
84 | /* Dump current state of cost centers, and zero them afterwards */
|
---|
85 | #define CALLGRIND_DUMP_STATS \
|
---|
86 | {unsigned int _qzz_res; \
|
---|
87 | VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
|
---|
88 | VG_USERREQ__DUMP_STATS, \
|
---|
89 | 0, 0, 0, 0, 0); \
|
---|
90 | }
|
---|
91 |
|
---|
92 | /* Dump current state of cost centers, and zero them afterwards.
|
---|
93 | The argument is appended to a string stating the reason which triggered
|
---|
94 | the dump. This string is written as a description field into the
|
---|
95 | profile data dump. */
|
---|
96 | #define CALLGRIND_DUMP_STATS_AT(pos_str) \
|
---|
97 | {unsigned int _qzz_res; \
|
---|
98 | VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
|
---|
99 | VG_USERREQ__DUMP_STATS_AT, \
|
---|
100 | pos_str, 0, 0, 0, 0); \
|
---|
101 | }
|
---|
102 |
|
---|
103 | /* Zero cost centers */
|
---|
104 | #define CALLGRIND_ZERO_STATS \
|
---|
105 | {unsigned int _qzz_res; \
|
---|
106 | VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
|
---|
107 | VG_USERREQ__ZERO_STATS, \
|
---|
108 | 0, 0, 0, 0, 0); \
|
---|
109 | }
|
---|
110 |
|
---|
111 | /* Toggles collection state.
|
---|
112 | The collection state specifies whether the happening of events
|
---|
113 | should be noted or if they are to be ignored. Events are noted
|
---|
114 | by increment of counters in a cost center */
|
---|
115 | #define CALLGRIND_TOGGLE_COLLECT \
|
---|
116 | {unsigned int _qzz_res; \
|
---|
117 | VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
|
---|
118 | VG_USERREQ__TOGGLE_COLLECT, \
|
---|
119 | 0, 0, 0, 0, 0); \
|
---|
120 | }
|
---|
121 |
|
---|
122 | /* Start full callgrind instrumentation if not already switched on.
|
---|
123 | When cache simulation is done, it will flush the simulated cache;
|
---|
124 | this will lead to an artifical cache warmup phase afterwards with
|
---|
125 | cache misses which would not have happened in reality. */
|
---|
126 | #define CALLGRIND_START_INSTRUMENTATION \
|
---|
127 | {unsigned int _qzz_res; \
|
---|
128 | VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
|
---|
129 | VG_USERREQ__START_INSTRUMENTATION, \
|
---|
130 | 0, 0, 0, 0, 0); \
|
---|
131 | }
|
---|
132 |
|
---|
133 | /* Stop full callgrind instrumentation if not already switched off.
|
---|
134 | This flushes Valgrinds translation cache, and does no additional
|
---|
135 | instrumentation afterwards, which effectivly will run at the same
|
---|
136 | speed as the "none" tool (ie. at minimal slowdown).
|
---|
137 | Use this to bypass Callgrind aggregation for uninteresting code parts.
|
---|
138 | To start Callgrind in this mode to ignore the setup phase, use
|
---|
139 | the option "--instr-atstart=no". */
|
---|
140 | #define CALLGRIND_STOP_INSTRUMENTATION \
|
---|
141 | {unsigned int _qzz_res; \
|
---|
142 | VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \
|
---|
143 | VG_USERREQ__STOP_INSTRUMENTATION, \
|
---|
144 | 0, 0, 0, 0, 0); \
|
---|
145 | }
|
---|
146 |
|
---|
147 | #endif /* __CALLGRIND_H */
|
---|