1 /*
2  * Test program for trace collection
3  */
4 
5 /*
6  * Typedefs
7  */
8 
9 typedef struct TEST_STRUCT {
10   char   memberc;
11   int    memberi;
12   float  memberf;
13   double memberd;
14 } test_struct;
15 
16 typedef int test_array [4];
17 
18 /*
19  * Global variables to be collected
20  */
21 
22 char         globalc;
23 int          globali;
24 float        globalf;
25 double       globald;
26 test_struct  globalstruct;
27 test_struct *globalp;
28 int          globalarr[16];
29 
30 /*
31  * Additional globals used in arithmetic tests
32  */
33 
34 signed char  c0,  c1,  c2,  c3,  c4,  c5,  c6,  c7,
35              c8,  c9,  c10, c11, c12, c13, c14, c15, cminus;
36 signed short s0,  s1,  s2,  s3,  s4,  s5,  s6,  s7,
37              s8,  s9,  s10, s11, s12, s13, s14, s15, sminus;
38 signed long  l0,  l1,  l2,  l3,  l4,  l5,  l6,  l7,
39              l8,  l9,  l10, l11, l12, l13, l14, l15, lminus;
40 
41 
42 /*
43  * Test functions
44  */
45 
begin()46 static void begin ()	/* called before anything else */
47 {
48 }
49 
end()50 static void end ()	/* called after everything else */
51 {
52 }
53 
54 /* Test collecting args. */
args_test_func(argc,argi,argf,argd,argstruct,argarray)55 int args_test_func (argc, argi, argf, argd, argstruct, argarray)
56      char   argc;
57      int    argi;
58      float  argf;
59      double argd;
60      test_struct argstruct;
61      int argarray[4];
62 {
63   int i;
64 
65   i =  (int) argc + argi + argf + argd + argstruct.memberi + argarray[1];
66 
67   return i;
68 }
69 
70 /* Test collecting struct args. */
argstruct_test_func(argstruct)71 int argstruct_test_func (argstruct)
72      test_struct argstruct;
73 {
74   return (int) argstruct.memberc + argstruct.memberi +
75                  argstruct.memberf + argstruct.memberd;
76 }
77 
78 /* Test collecting array args. */
argarray_test_func(argarray)79 int argarray_test_func (argarray)
80      int argarray[4];
81 {
82   return (int) argarray[0] + argarray[1] + argarray[2] + argarray[3];
83 }
84 
85 
86 
local_test_func()87 int local_test_func ()			/* test collecting locals */
88 {
89   char        locc  = 11;
90   int         loci  = 12;
91   float       locf  = 13.3;
92   double      locd  = 14.4;
93   test_struct locst;
94   int         locar[4];
95   int         i;
96 
97   locst.memberc  = 15;
98   locst.memberi  = 16;
99   locst.memberf  = 17.7;
100   locst.memberd  = 18.8;
101   locar[0] = 121;
102   locar[1] = 122;
103   locar[2] = 123;
104   locar[3] = 124;
105 
106   i = /* Set_Tracepoint_Here */
107     (int) locc + loci + locf + locd + locst.memberi + locar[1];
108 
109   return i;
110 }
111 
reglocal_test_func()112 int reglocal_test_func ()		/* test collecting register locals */
113 {
114   register char        locc = 11;
115   register int         loci = 12;
116   register float       locf = 13.3;
117   register double      locd = 14.4;
118   register test_struct locst;
119   register int         locar[4];
120   int                  i;
121 
122   locst.memberc  = 15;
123   locst.memberi  = 16;
124   locst.memberf  = 17.7;
125   locst.memberd  = 18.8;
126   locar[0] = 121;
127   locar[1] = 122;
128   locar[2] = 123;
129   locar[3] = 124;
130 
131   i = /* Set_Tracepoint_Here */
132     (int) locc + loci + locf + locd + locst.memberi + locar[1];
133 
134   return i;
135 }
136 
statlocal_test_func()137 int statlocal_test_func ()		/* test collecting static locals */
138 {
139   static   char        locc;
140   static   int         loci;
141   static   float       locf;
142   static   double      locd;
143   static   test_struct locst;
144   static   int         locar[4];
145   int                  i;
146 
147   locc = 11;
148   loci = 12;
149   locf = 13.3;
150   locd = 14.4;
151   locst.memberc = 15;
152   locst.memberi = 16;
153   locst.memberf = 17.7;
154   locst.memberd = 18.8;
155   locar[0] = 121;
156   locar[1] = 122;
157   locar[2] = 123;
158   locar[3] = 124;
159 
160   i = /* Set_Tracepoint_Here */
161     (int) locc + loci + locf + locd + locst.memberi + locar[1];
162 
163   /* Set static locals back to zero so collected values are clearly special. */
164   locc = 0;
165   loci = 0;
166   locf = 0;
167   locd = 0;
168   locst.memberc = 0;
169   locst.memberi = 0;
170   locst.memberf = 0;
171   locst.memberd = 0;
172   locar[0] = 0;
173   locar[1] = 0;
174   locar[2] = 0;
175   locar[3] = 0;
176 
177   return i;
178 }
179 
180 
globals_test_func()181 int globals_test_func ()
182 {
183   int i = 0;
184 
185   i += globalc + globali + globalf + globald;
186   i += globalstruct.memberc + globalstruct.memberi;
187   i += globalstruct.memberf + globalstruct.memberd;
188   i += globalarr[1];
189 
190   return i;	/* Set_Tracepoint_Here */
191 }
192 
193 int
main(argc,argv,envp)194 main (argc, argv, envp)
195      int argc;
196      char *argv[], **envp;
197 {
198   int         i = 0;
199   test_struct mystruct;
200   int         myarray[4];
201 
202 #ifdef usestubs
203   set_debug_traps ();
204   breakpoint ();
205 #endif
206 
207   begin ();
208   /* Assign collectable values to global variables. */
209   l0  = s0  = c0  = 0;     l1  = s1  = c1  = 1;
210   l2  = s2  = c2  = 2;     l3  = s3  = c3  = 3;
211   l4  = s4  = c4  = 4;     l5  = s5  = c5  = 5;
212   l6  = s6  = c6  = 6;     l7  = s7  = c7  = 7;
213   l8  = s8  = c8  = 8;     l9  = s9  = c9  = 9;
214   l10 = s10 = c10 = 10;    l11 = s11 = c11 = 11;
215   l12 = s12 = c12 = 12;    l13 = s13 = c13 = 13;
216   l14 = s14 = c14 = 14;    l15 = s15 = c15 = 15;
217   lminus = sminus = cminus = -2;
218   globalc = 71;
219   globali = 72;
220   globalf = 73.3;
221   globald = 74.4;
222   globalstruct.memberc = 81;
223   globalstruct.memberi = 82;
224   globalstruct.memberf = 83.3;
225   globalstruct.memberd = 84.4;
226   globalp = &globalstruct;
227 
228   for (i = 0; i < 15; i++)
229     globalarr[i] = i;
230 
231   mystruct.memberc = 101;
232   mystruct.memberi = 102;
233   mystruct.memberf = 103.3;
234   mystruct.memberd = 104.4;
235   myarray[0] = 111;
236   myarray[1] = 112;
237   myarray[2] = 113;
238   myarray[3] = 114;
239 
240   /* Call test functions, so they can be traced and data collected.  */
241   i = 0;
242   i += args_test_func (1, 2, 3.3, 4.4, mystruct, myarray);
243   i += argstruct_test_func (mystruct);
244   i += argarray_test_func (myarray);
245   i += local_test_func ();
246   i += reglocal_test_func ();
247   i += statlocal_test_func ();
248   i += globals_test_func ();
249 
250   /* Values of globals at end of test should be different from
251      values that they had when trace data was captured.  */
252 
253   l0  = s0  = c0  = 0;     l1  = s1  = c1  = 0;
254   l2  = s2  = c2  = 0;     l3  = s3  = c3  = 0;
255   l4  = s4  = c4  = 0;     l5  = s5  = c5  = 0;
256   l6  = s6  = c6  = 0;     l7  = s7  = c7  = 0;
257   l8  = s8  = c8  = 0;     l9  = s9  = c9  = 0;
258   l10 = s10 = c10 = 0;     l11 = s11 = c11 = 0;
259   l12 = s12 = c12 = 0;     l13 = s13 = c13 = 0;
260   l14 = s14 = c14 = 0;     l15 = s15 = c15 = 0;
261   lminus = sminus = cminus = 0;
262 
263   /* Set 'em back to zero, so that the collected values will be
264      distinctly different from the "realtime" (end of test) values.  */
265 
266   globalc = 0;
267   globali = 0;
268   globalf = 0;
269   globald = 0;
270   globalstruct.memberc = 0;
271   globalstruct.memberi = 0;
272   globalstruct.memberf = 0;
273   globalstruct.memberd = 0;
274   globalp = 0;
275   for (i = 0; i < 15; i++)
276     globalarr[i] = 0;
277 
278   end ();
279   return 0;
280 }
281