created error #22
[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      lastValue;
64     time64      snapShot;       /* used to get consistant value during st/stp */
65     int         normalize;      /* value to divide total by to get seconds */
66     timerType   type;
67     sampleId    id;
68     volatile char mutex;
69     volatile char sampled;
70 };
71
72 typedef (*filterFunc)(void *cdata, parameters *params);
73
74 /*
75  * standard inst. functions.
76  *
77  */
78
79 /*
80  * return the current CPU time in usec.
81  */
82 time64 DYNINSTgetCPUtime();
83 time64 DYNINSTgetWallTime();
84
85 void DYNINSTflushTrace();
86
87 /*
88  * start a timer.
89  */
90 void DYNINSTstartTimer(tTimer *timer);
91
92 void DYNINSTstopTimer(tTimer *timer);
93
94 typedef traceStream;
95 /*
96  * timestamp and write the passed trace type, and event data to the passed
97  *   trace stream.
98  *
99  */
100 void DYNINSTgenerateTraceRecord(traceStream destination, 
101                                 short type, 
102                                 short length, 
103                                 void *eventData,
104                                 int flush);
105
106 /*
107  * Define the size of the per process data area.
108  *
109  *  This should be a power of two to reduce paging and chacing shifts.
110  */
111 #define SYN_INST_BUF_SIZE       1024*1024
112
113 #endif