Commit | Line | Data |
---|---|---|
c906108c SS |
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]; | |
08807d5a | 29 | int globalarr2[4]; |
a0c78a73 | 30 | int globalarr3[4]; |
c906108c | 31 | |
764880b7 PA |
32 | struct global_pieces { |
33 | unsigned int a; | |
34 | unsigned int b; | |
35 | } global_pieces = | |
36 | { | |
37 | 0x12345678, 0x87654321 | |
38 | }; | |
39 | ||
c906108c SS |
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; | |
2c58c0a9 | 106 | struct localstruct {} locdefst; |
c906108c SS |
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 | |
205 | main (argc, argv, envp) | |
206 | int argc; | |
207 | char *argv[], **envp; | |
208 | { | |
209 | int i = 0; | |
210 | test_struct mystruct; | |
211 | int myarray[4]; | |
212 | ||
213 | #ifdef usestubs | |
214 | set_debug_traps (); | |
215 | breakpoint (); | |
216 | #endif | |
217 | ||
218 | begin (); | |
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; | |
229 | globalc = 71; | |
230 | globali = 72; | |
231 | globalf = 73.3; | |
232 | globald = 74.4; | |
233 | globalstruct.memberc = 81; | |
234 | globalstruct.memberi = 82; | |
235 | globalstruct.memberf = 83.3; | |
236 | globalstruct.memberd = 84.4; | |
237 | globalp = &globalstruct; | |
238 | ||
239 | for (i = 0; i < 15; i++) | |
240 | globalarr[i] = i; | |
241 | ||
08807d5a PA |
242 | for (i = 0; i < 4; i++) |
243 | globalarr2[i] = i; | |
244 | ||
a0c78a73 PA |
245 | for (i = 0; i < 4; i++) |
246 | globalarr3[3 - i] = i; | |
247 | ||
c906108c SS |
248 | mystruct.memberc = 101; |
249 | mystruct.memberi = 102; | |
250 | mystruct.memberf = 103.3; | |
251 | mystruct.memberd = 104.4; | |
252 | myarray[0] = 111; | |
253 | myarray[1] = 112; | |
254 | myarray[2] = 113; | |
255 | myarray[3] = 114; | |
256 | ||
257 | /* Call test functions, so they can be traced and data collected. */ | |
258 | i = 0; | |
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 (); | |
266 | ||
267 | /* Values of globals at end of test should be different from | |
268 | values that they had when trace data was captured. */ | |
269 | ||
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; | |
279 | ||
280 | /* Set 'em back to zero, so that the collected values will be | |
281 | distinctly different from the "realtime" (end of test) values. */ | |
282 | ||
283 | globalc = 0; | |
284 | globali = 0; | |
285 | globalf = 0; | |
286 | globald = 0; | |
287 | globalstruct.memberc = 0; | |
288 | globalstruct.memberi = 0; | |
289 | globalstruct.memberf = 0; | |
290 | globalstruct.memberd = 0; | |
291 | globalp = 0; | |
292 | for (i = 0; i < 15; i++) | |
293 | globalarr[i] = 0; | |
08807d5a PA |
294 | for (i = 0; i < 4; i++) |
295 | globalarr2[i] = 0; | |
a0c78a73 PA |
296 | for (i = 0; i < 4; i++) |
297 | globalarr3[i] = 0; | |
c906108c SS |
298 | |
299 | end (); | |
300 | return 0; | |
301 | } |