1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- Callgrind                                                    ---*/
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*---                                                   ct_costs.h ---*/
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- (C) 2004, Josef Weidendorfer                                 ---*/
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef CT_COSTS
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define CT_COSTS
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "pub_tool_basics.h"
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define CLG_(str) VGAPPEND(vgCallgrind_,str)
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern UInt CLG_(costarray_entries);
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern UInt CLG_(costarray_chunks);
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Array of 64bit costs. This is separated from other structs
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * to support a dynamic number of costs for a cost item.
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Chunks are allocated on demand, and deallocated at program termination.
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct _CostChunk CostChunk;
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _CostChunk {
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  Int size;
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  Int used;
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  CostChunk *next, *prev;
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  ULong data[0];
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Allocate a number of 64bit cost values.
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Typically used from ct_events.c */
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownULong* CLG_(get_costarray)(Int size);
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid CLG_(free_costarrays)(void);
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /* CT_COSTS */
36