Moved the definitions of the << operator into the class declaration to
[dyninst.git] / rtinst / h / rtinst.h
1
2 /*
3  * This file contains the standard insrumentation functions that are provied
4  *   by the instrumentation layer.
5  *
6  */
7
8 #ifndef _RTINST_H
9 #define _RTINST_H
10
11 typedef void (*instFunc)(void *cdata, int type, char *eventData);
12
13 typedef struct intCounterRec intCounter;
14
15 /* parameters to a instremented function */
16 typedef struct _parameteters parameters;
17 typedef enum { processTime, wallTime } timerType;
18
19 /* 64 bit time values */
20 typedef long long int time64;
21 typedef long long int int64;
22
23 struct sampleIdRec {
24     unsigned int aggregate:1;
25     unsigned int id:31;
26 };
27
28 struct endStatsRec {
29     int alarms;
30     int numReported;
31     float instCycles;
32     float instTime;
33     float handlerCost;
34     float totalCpuTime;
35     int samplesReported;
36     float samplingRate;
37     float totalWallTime;
38     int userTicks;
39     int instTicks;
40 };
41
42 typedef struct sampleIdRec sampleId;
43
44
45 struct intCounterRec {
46     int value;          /* this field must be first for setValue to work -jkh */
47     sampleId id;
48 };
49
50
51 typedef struct floatCounterRec floatCounter;
52 struct floatCounterRec {
53     float value;
54     sampleId id;
55 };
56
57
58 typedef struct tTimerRec tTimer;
59 struct tTimerRec {
60     int         counter;                /* must be 0 to start/stop */
61     time64      total;
62     time64      start;
63     time64      snapShot;       /* used to get consistant value during st/stp */
64     int         normalize;      /* value to divide total by to get seconds */
65     timerType   type;
66     sampleId    id;
67     volatile char mutex;
68     volatile char sampled;
69 };
70
71 typedef (*filterFunc)(void *cdata, parameters *params);
72
73 /*
74  * standard inst. functions.
75  *
76  */
77
78 /*
79  * return the current CPU time in usec.
80  */
81 time64 DYNINSTgetCPUtime();
82 time64 DYNINSTgetWallTime();
83
84 void DYNINSTflushTrace();
85
86 /*
87  * start a timer.
88  */
89 void DYNINSTstartTimer(tTimer *timer);
90
91 void DYNINSTstopTimer(tTimer *timer);
92
93 typedef traceStream;
94 /*
95  * timestamp and write the passed trace type, and event data to the passed
96  *   trace stream.
97  *
98  */
99 void DYNINSTgenerateTraceRecord(traceStream destination, 
100                                 short type, 
101                                 short length, 
102                                 void *eventData,
103                                 int flush);
104
105 /*
106  * Define the size of the per process data area.
107  *
108  *  This should be a power of two to reduce paging and chacing shifts.
109  */
110 #define SYN_INST_BUF_SIZE       1024*1024
111
112 #endif