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