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