Initial revision
[dyninst.git] / rtinst / src / RTfuncs.c
1 /*
2  * This file contains the implementation of runtime dynamic instrumentation
3  *   functions for a SUNOS SPARC processor.
4  *
5  * $Log: RTfuncs.c,v $
6  * Revision 1.1  1993/07/02 21:49:35  hollings
7  * Initial revision
8  *
9  *
10  */
11 #include <sys/signal.h>
12
13 #include "trace.h"
14 #include "rtinst.h"
15
16 /* This marks the end of user code in the text file. */
17 /* This is to prevent system libraries with symbols compiled into them
18  *    from adding extranious material to our inst. environment.
19  */
20 DYNINSTendUserCode()
21 {
22 }
23
24 char DYNINSTdata[SYN_INST_BUF_SIZE];
25 char DYNINSTglobalData[SYN_INST_BUF_SIZE];
26 int DYNINSTnumSampled;
27
28 void DYNINSTincrementCounter(intCounter *counter)
29 {
30     if (counter->trigger && (counter->trigger->value <= 0)) return;
31     counter->value++;
32 }
33
34 void DYNINSTdecrementCounter(intCounter *counter)
35 {
36     if (counter->trigger && (counter->trigger->value <= 0)) return;
37     counter->value--;
38 }
39
40 void DYNINSTreportCounter(intCounter *counter)
41 {
42     traceSample sample;
43
44     sample.value = counter->value;
45     sample.id = counter->id;
46
47     DYNINSTgenerateTraceRecord(0, TR_SAMPLE, sizeof(sample), &sample);
48 }
49
50 void DYNINSTsimplePrint()
51 {
52     printf("inside dynamic inst function\n");
53 }
54
55 void DYNINSTentryPrint(int arg)
56 {
57     printf("enter %d\n", arg);
58 }
59
60 void DYNINSTcallFrom(int arg)
61 {
62     printf("call from %d\n", arg);
63 }
64
65 void DYNINSTcallReturn(int arg)
66 {
67     printf("return to %d\n", arg);
68 }
69
70 void DYNINSTexitPrint(int arg)
71 {
72     printf("exit %d\n", arg);
73 }
74
75 /*
76  * This is a function that should be called when we want to sample the
77  *   timers and counters.  The code to do the sampling is added as func
78  *   entry dynamic instrumentation.
79  *
80  */
81 void DYNINSTsampleValues()
82 {
83     DYNINSTnumSampled++;
84 }
85
86 void DYNINSTalarmExpire()
87 {
88     static int inSample;
89
90     /* should use atomic test and set for this */
91     if (inSample) return;
92
93     inSample = 1;
94
95     DYNINSTsampleValues();
96
97     inSample = 0;
98 }
99