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