added EXIT and ACK.
[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 struct _parameteters {
16     int arg1;
17     int arg2;
18     int arg3;
19     int arg4;
20     int arg5;
21     int arg6;
22     int arg7;
23     int arg8;
24     int arg9;
25     int arg10;
26     int arg11;
27     int arg12;
28     int arg13;
29     int arg14;
30     int arg15;
31 };
32
33 /* parameters to a instremented function */
34 typedef struct _parameteters parameters;
35 typedef enum { processTime, wallTime } timerType;
36
37 /* 64 bit time values */
38 typedef long long int time64;
39 struct sampleIdRec {
40     unsigned int aggregate:1;
41     unsigned int id:31;
42 };
43
44 typedef struct sampleIdRec sampleId;
45
46
47 struct intCounterRec {
48     intCounter *trigger;
49     int value;
50     sampleId id;
51 };
52
53
54 typedef struct floatCounterRec floatCounter;
55 struct floatCounterRec {
56     intCounter *trigger;
57     float value;
58     sampleId id;
59 };
60
61
62 typedef struct tTimerRec tTimer;
63 struct tTimerRec {
64     intCounter *trigger;
65     int counter;        /* must be 0 to start/stop */
66     time64      total;
67     time64      start;
68     time64      ni_start;
69     time64      snapShot;       /* used to get consistant value during st/stp */
70     timerType type;
71     int         normalize;      /* value to divide total by to get seconds */
72     sampleId id;
73     volatile int mutex;
74 };
75
76
77 /*
78  * standard inst. functions.
79  *
80  */
81
82 /*
83  * start a timer.
84  */
85 void DYNINSTstartTimer(tTimer *timer);
86
87 void DYNINSTstopTimer(tTimer *timer);
88
89 /*
90  * increment the passed counter by one.
91  *
92  */
93 void DYNINSTincremmentCounter(intCounter*);
94
95 /*
96  * decrement the passed counter by one.
97  *
98  */
99 void DYNINSTdecrementCounter(intCounter*);
100
101 /*
102  * Special purpose inst functiions that use trace type specific data.
103  *
104  */
105
106 /* add bytes field to passed counter */
107 void addBytesCounter(intCounter *data);
108
109 typedef struct {
110     void *filterData;           /* data to filter on */
111     instFunc toCall;            /* function to call if it passes filter */
112     void *callData;             /* data to pass to toCall if it is called */
113 } filterArgs;
114
115 /* check src/dest matched passed arg. */
116 void filterSrc(filterArgs, int type, void *eventData);
117 void filterDest(filterArgs, int type, void *eventData);
118
119 /* check message type field */
120 void filterMessageType(filterArgs, int type, void *eventData);
121
122 /* parse file name (using fd to fileName mapping as needed) */
123 void filterFileName(filterArgs, int type, void *eventData);
124
125 typedef traceStream;
126 /*
127  * timestamp and write the passed trace type, and event data to the passed
128  *   trace stream.
129  *
130  */
131 void DYNINSTgenerateTraceRecord(traceStream destination, 
132                                 short type, 
133                                 short length, 
134                                 void *eventData);
135
136 /*
137  * Define the size of the per process data area.
138  *
139  *  This should be a power of two to reduce paging and chacing shifts.
140  */
141 #define SYN_INST_BUF_SIZE       256*1024
142
143 #endif