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