2 * Test program for trace collection
9 typedef struct TEST_STRUCT {
16 typedef int test_array [4];
19 * Global variables to be collected
26 test_struct globalstruct;
32 struct global_pieces {
37 0x12345678, 0x87654321
41 * Additional globals used in arithmetic tests
44 signed char c0, c1, c2, c3, c4, c5, c6, c7,
45 c8, c9, c10, c11, c12, c13, c14, c15, cminus;
46 signed short s0, s1, s2, s3, s4, s5, s6, s7,
47 s8, s9, s10, s11, s12, s13, s14, s15, sminus;
48 signed long l0, l1, l2, l3, l4, l5, l6, l7,
49 l8, l9, l10, l11, l12, l13, l14, l15, lminus;
56 static void begin () /* called before anything else */
60 static void end () /* called after everything else */
64 /* Test collecting args. */
65 int args_test_func (argc, argi, argf, argd, argstruct, argarray)
70 test_struct argstruct;
75 i = (int) argc + argi + argf + argd + argstruct.memberi + argarray[1];
80 /* Test collecting struct args. */
81 int argstruct_test_func (argstruct)
82 test_struct argstruct;
84 return (int) argstruct.memberc + argstruct.memberi +
85 argstruct.memberf + argstruct.memberd;
88 /* Test collecting array args. */
89 int argarray_test_func (argarray)
92 return (int) argarray[0] + argarray[1] + argarray[2] + argarray[3];
97 int local_test_func () /* test collecting locals */
106 struct localstruct {} locdefst;
110 locst.memberf = 17.7;
111 locst.memberd = 18.8;
117 i = /* Set_Tracepoint_Here */
118 (int) locc + loci + locf + locd + locst.memberi + locar[1];
123 int reglocal_test_func () /* test collecting register locals */
125 register char locc = 11;
126 register int loci = 12;
127 register float locf = 13.3;
128 register double locd = 14.4;
129 register test_struct locst;
130 register int locar[4];
135 locst.memberf = 17.7;
136 locst.memberd = 18.8;
142 i = /* Set_Tracepoint_Here */
143 (int) locc + loci + locf + locd + locst.memberi + locar[1];
148 int statlocal_test_func () /* test collecting static locals */
154 static test_struct locst;
164 locst.memberf = 17.7;
165 locst.memberd = 18.8;
171 i = /* Set_Tracepoint_Here */
172 (int) locc + loci + locf + locd + locst.memberi + locar[1];
174 /* Set static locals back to zero so collected values are clearly special. */
192 int globals_test_func ()
196 i += globalc + globali + globalf + globald;
197 i += globalstruct.memberc + globalstruct.memberi;
198 i += globalstruct.memberf + globalstruct.memberd;
201 return i; /* Set_Tracepoint_Here */
205 main (argc, argv, envp)
207 char *argv[], **envp;
210 test_struct mystruct;
219 /* Assign collectable values to global variables. */
220 l0 = s0 = c0 = 0; l1 = s1 = c1 = 1;
221 l2 = s2 = c2 = 2; l3 = s3 = c3 = 3;
222 l4 = s4 = c4 = 4; l5 = s5 = c5 = 5;
223 l6 = s6 = c6 = 6; l7 = s7 = c7 = 7;
224 l8 = s8 = c8 = 8; l9 = s9 = c9 = 9;
225 l10 = s10 = c10 = 10; l11 = s11 = c11 = 11;
226 l12 = s12 = c12 = 12; l13 = s13 = c13 = 13;
227 l14 = s14 = c14 = 14; l15 = s15 = c15 = 15;
228 lminus = sminus = cminus = -2;
233 globalstruct.memberc = 81;
234 globalstruct.memberi = 82;
235 globalstruct.memberf = 83.3;
236 globalstruct.memberd = 84.4;
237 globalp = &globalstruct;
239 for (i = 0; i < 15; i++)
242 for (i = 0; i < 4; i++)
245 for (i = 0; i < 4; i++)
246 globalarr3[3 - i] = i;
248 mystruct.memberc = 101;
249 mystruct.memberi = 102;
250 mystruct.memberf = 103.3;
251 mystruct.memberd = 104.4;
257 /* Call test functions, so they can be traced and data collected. */
259 i += args_test_func (1, 2, 3.3, 4.4, mystruct, myarray);
260 i += argstruct_test_func (mystruct);
261 i += argarray_test_func (myarray);
262 i += local_test_func ();
263 i += reglocal_test_func ();
264 i += statlocal_test_func ();
265 i += globals_test_func ();
267 /* Values of globals at end of test should be different from
268 values that they had when trace data was captured. */
270 l0 = s0 = c0 = 0; l1 = s1 = c1 = 0;
271 l2 = s2 = c2 = 0; l3 = s3 = c3 = 0;
272 l4 = s4 = c4 = 0; l5 = s5 = c5 = 0;
273 l6 = s6 = c6 = 0; l7 = s7 = c7 = 0;
274 l8 = s8 = c8 = 0; l9 = s9 = c9 = 0;
275 l10 = s10 = c10 = 0; l11 = s11 = c11 = 0;
276 l12 = s12 = c12 = 0; l13 = s13 = c13 = 0;
277 l14 = s14 = c14 = 0; l15 = s15 = c15 = 0;
278 lminus = sminus = cminus = 0;
280 /* Set 'em back to zero, so that the collected values will be
281 distinctly different from the "realtime" (end of test) values. */
287 globalstruct.memberc = 0;
288 globalstruct.memberi = 0;
289 globalstruct.memberf = 0;
290 globalstruct.memberd = 0;
292 for (i = 0; i < 15; i++)
294 for (i = 0; i < 4; i++)
296 for (i = 0; i < 4; i++)