148 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			148 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   ----------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   Notice that the following BSD-style license applies to this one
							 | 
						||
| 
								 | 
							
								   file (callgrind.h) only.  The rest of Valgrind is licensed under the
							 | 
						||
| 
								 | 
							
								   terms of the GNU General Public License, version 2, unless
							 | 
						||
| 
								 | 
							
								   otherwise indicated.  See the COPYING file in the source
							 | 
						||
| 
								 | 
							
								   distribution for details.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   ----------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   This file is part of callgrind, a valgrind tool for cache simulation
							 | 
						||
| 
								 | 
							
								   and call tree tracing.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   Copyright (C) 2003-2010 Josef Weidendorfer.  All rights reserved.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   Redistribution and use in source and binary forms, with or without
							 | 
						||
| 
								 | 
							
								   modification, are permitted provided that the following conditions
							 | 
						||
| 
								 | 
							
								   are met:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   1. Redistributions of source code must retain the above copyright
							 | 
						||
| 
								 | 
							
								      notice, this list of conditions and the following disclaimer.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   2. The origin of this software must not be misrepresented; you must
							 | 
						||
| 
								 | 
							
								      not claim that you wrote the original software.  If you use this
							 | 
						||
| 
								 | 
							
								      software in a product, an acknowledgment in the product
							 | 
						||
| 
								 | 
							
								      documentation would be appreciated but is not required.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   3. Altered source versions must be plainly marked as such, and must
							 | 
						||
| 
								 | 
							
								      not be misrepresented as being the original software.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   4. The name of the author may not be used to endorse or promote
							 | 
						||
| 
								 | 
							
								      products derived from this software without specific prior written
							 | 
						||
| 
								 | 
							
								      permission.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
							 | 
						||
| 
								 | 
							
								   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
							 | 
						||
| 
								 | 
							
								   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
							 | 
						||
| 
								 | 
							
								   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
							 | 
						||
| 
								 | 
							
								   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
							 | 
						||
| 
								 | 
							
								   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
							 | 
						||
| 
								 | 
							
								   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
							 | 
						||
| 
								 | 
							
								   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
							 | 
						||
| 
								 | 
							
								   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
							 | 
						||
| 
								 | 
							
								   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
							 | 
						||
| 
								 | 
							
								   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   ----------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   Notice that the above BSD-style license applies to this one file
							 | 
						||
| 
								 | 
							
								   (callgrind.h) only.  The entire rest of Valgrind is licensed under
							 | 
						||
| 
								 | 
							
								   the terms of the GNU General Public License, version 2.  See the
							 | 
						||
| 
								 | 
							
								   COPYING file in the source distribution for details.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   ----------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __CALLGRIND_H
							 | 
						||
| 
								 | 
							
								#define __CALLGRIND_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "valgrind.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !!
							 | 
						||
| 
								 | 
							
								   This enum comprises an ABI exported by Valgrind to programs
							 | 
						||
| 
								 | 
							
								   which use client requests.  DO NOT CHANGE THE ORDER OF THESE
							 | 
						||
| 
								 | 
							
								   ENTRIES, NOR DELETE ANY -- add new ones at the end.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   The identification ('C','T') for Callgrind has historical
							 | 
						||
| 
								 | 
							
								   reasons: it was called "Calltree" before. Besides, ('C','G') would
							 | 
						||
| 
								 | 
							
								   clash with cachegrind.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef
							 | 
						||
| 
								 | 
							
								   enum {
							 | 
						||
| 
								 | 
							
								      VG_USERREQ__DUMP_STATS = VG_USERREQ_TOOL_BASE('C','T'),
							 | 
						||
| 
								 | 
							
								      VG_USERREQ__ZERO_STATS,
							 | 
						||
| 
								 | 
							
								      VG_USERREQ__TOGGLE_COLLECT,
							 | 
						||
| 
								 | 
							
								      VG_USERREQ__DUMP_STATS_AT,
							 | 
						||
| 
								 | 
							
								      VG_USERREQ__START_INSTRUMENTATION,
							 | 
						||
| 
								 | 
							
								      VG_USERREQ__STOP_INSTRUMENTATION
							 | 
						||
| 
								 | 
							
								   } Vg_CallgrindClientRequest;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Dump current state of cost centers, and zero them afterwards */
							 | 
						||
| 
								 | 
							
								#define CALLGRIND_DUMP_STATS                                            \
							 | 
						||
| 
								 | 
							
								   {unsigned int _qzz_res;                                              \
							 | 
						||
| 
								 | 
							
								    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                             \
							 | 
						||
| 
								 | 
							
								                            VG_USERREQ__DUMP_STATS,                     \
							 | 
						||
| 
								 | 
							
								                            0, 0, 0, 0, 0);                             \
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Dump current state of cost centers, and zero them afterwards.
							 | 
						||
| 
								 | 
							
								   The argument is appended to a string stating the reason which triggered
							 | 
						||
| 
								 | 
							
								   the dump. This string is written as a description field into the
							 | 
						||
| 
								 | 
							
								   profile data dump. */
							 | 
						||
| 
								 | 
							
								#define CALLGRIND_DUMP_STATS_AT(pos_str)                                \
							 | 
						||
| 
								 | 
							
								   {unsigned int _qzz_res;                                              \
							 | 
						||
| 
								 | 
							
								    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                             \
							 | 
						||
| 
								 | 
							
								                            VG_USERREQ__DUMP_STATS_AT,                  \
							 | 
						||
| 
								 | 
							
								                            pos_str, 0, 0, 0, 0);                       \
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Zero cost centers */
							 | 
						||
| 
								 | 
							
								#define CALLGRIND_ZERO_STATS                                            \
							 | 
						||
| 
								 | 
							
								   {unsigned int _qzz_res;                                              \
							 | 
						||
| 
								 | 
							
								    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                             \
							 | 
						||
| 
								 | 
							
								                            VG_USERREQ__ZERO_STATS,                     \
							 | 
						||
| 
								 | 
							
								                            0, 0, 0, 0, 0);                             \
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Toggles collection state.
							 | 
						||
| 
								 | 
							
								   The collection state specifies whether the happening of events
							 | 
						||
| 
								 | 
							
								   should be noted or if they are to be ignored. Events are noted
							 | 
						||
| 
								 | 
							
								   by increment of counters in a cost center */
							 | 
						||
| 
								 | 
							
								#define CALLGRIND_TOGGLE_COLLECT                                        \
							 | 
						||
| 
								 | 
							
								   {unsigned int _qzz_res;                                              \
							 | 
						||
| 
								 | 
							
								    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                             \
							 | 
						||
| 
								 | 
							
								                            VG_USERREQ__TOGGLE_COLLECT,                 \
							 | 
						||
| 
								 | 
							
								                            0, 0, 0, 0, 0);                             \
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Start full callgrind instrumentation if not already switched on.
							 | 
						||
| 
								 | 
							
								   When cache simulation is done, it will flush the simulated cache;
							 | 
						||
| 
								 | 
							
								   this will lead to an artifical cache warmup phase afterwards with
							 | 
						||
| 
								 | 
							
								   cache misses which would not have happened in reality. */
							 | 
						||
| 
								 | 
							
								#define CALLGRIND_START_INSTRUMENTATION                                 \
							 | 
						||
| 
								 | 
							
								   {unsigned int _qzz_res;                                              \
							 | 
						||
| 
								 | 
							
								    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                             \
							 | 
						||
| 
								 | 
							
								                            VG_USERREQ__START_INSTRUMENTATION,          \
							 | 
						||
| 
								 | 
							
								                            0, 0, 0, 0, 0);                             \
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Stop full callgrind instrumentation if not already switched off.
							 | 
						||
| 
								 | 
							
								   This flushes Valgrinds translation cache, and does no additional
							 | 
						||
| 
								 | 
							
								   instrumentation afterwards, which effectivly will run at the same
							 | 
						||
| 
								 | 
							
								   speed as the "none" tool (ie. at minimal slowdown).
							 | 
						||
| 
								 | 
							
								   Use this to bypass Callgrind aggregation for uninteresting code parts.
							 | 
						||
| 
								 | 
							
								   To start Callgrind in this mode to ignore the setup phase, use
							 | 
						||
| 
								 | 
							
								   the option "--instr-atstart=no". */
							 | 
						||
| 
								 | 
							
								#define CALLGRIND_STOP_INSTRUMENTATION                                  \
							 | 
						||
| 
								 | 
							
								   {unsigned int _qzz_res;                                              \
							 | 
						||
| 
								 | 
							
								    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                             \
							 | 
						||
| 
								 | 
							
								                            VG_USERREQ__STOP_INSTRUMENTATION,           \
							 | 
						||
| 
								 | 
							
								                            0, 0, 0, 0, 0);                             \
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* __CALLGRIND_H */
							 |