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