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