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