callgrind.h revision b32f58018498ea2225959b0ba11c18f0c433deef
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 16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Copyright (C) 2003-2011 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