xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.trace/collection.c (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
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