force records to be word aligned.
[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 struct sampleIdRec {
22     unsigned int aggregate:1;
23     unsigned int id:31;
24 };
25
26 typedef struct sampleIdRec sampleId;
27
28
29 struct intCounterRec {
30     int value;          /* this field must be first for setValue to work -jkh */
31     sampleId id;
32 };
33
34
35 typedef struct floatCounterRec floatCounter;
36 struct floatCounterRec {
37     float value;
38     sampleId id;
39 };
40
41
42 typedef struct tTimerRec tTimer;
43 struct tTimerRec {
44     int         counter;                /* must be 0 to start/stop */
45     time64      total;
46     time64      start;
47     time64      snapShot;       /* used to get consistant value during st/stp */
48     int         normalize;      /* value to divide total by to get seconds */
49     timerType   type;
50     sampleId    id;
51     volatile char mutex;
52     volatile char sampled;
53 };
54
55 typedef (*filterFunc)(void *cdata, parameters *params);
56
57 /*
58  * standard inst. functions.
59  *
60  */
61
62 /*
63  * start a timer.
64  */
65 void DYNINSTstartTimer(tTimer *timer);
66
67 void DYNINSTstopTimer(tTimer *timer);
68
69 typedef traceStream;
70 /*
71  * timestamp and write the passed trace type, and event data to the passed
72  *   trace stream.
73  *
74  */
75 void DYNINSTgenerateTraceRecord(traceStream destination, 
76                                 short type, 
77                                 short length, 
78                                 void *eventData);
79
80 /*
81  * Define the size of the per process data area.
82  *
83  *  This should be a power of two to reduce paging and chacing shifts.
84  */
85 #define SYN_INST_BUF_SIZE       256*1024
86
87 #endif