xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.mi/var-cmd.c (revision 11efff7f3ac2b3cfeff0c0cddc14294d9b3aca4f)
1*11efff7fSkettenis /* Copyright 1999, 2004 Free Software Foundation, Inc.
2*11efff7fSkettenis 
3*11efff7fSkettenis    This file is part of GDB.
4*11efff7fSkettenis 
5*11efff7fSkettenis    This program is free software; you can redistribute it and/or modify
6*11efff7fSkettenis    it under the terms of the GNU General Public License as published by
7*11efff7fSkettenis    the Free Software Foundation; either version 2 of the License, or (at
8*11efff7fSkettenis    your option) any later version.
9*11efff7fSkettenis 
10*11efff7fSkettenis    This program is distributed in the hope that it will be useful, but
11*11efff7fSkettenis    WITHOUT ANY WARRANTY; without even the implied warranty of
12*11efff7fSkettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13*11efff7fSkettenis    General Public License for more details.
14*11efff7fSkettenis 
15*11efff7fSkettenis    You should have received a copy of the GNU General Public License
16*11efff7fSkettenis    along with this program; if not, write to the Free Software
17*11efff7fSkettenis    Foundation, Inc., 59 Temple Place - Suite 330,
18*11efff7fSkettenis    Boston, MA 02111-1307, USA.  */
19*11efff7fSkettenis 
20*11efff7fSkettenis #include <stdlib.h>
21*11efff7fSkettenis 
22b725ae77Skettenis struct _simple_struct {
23b725ae77Skettenis   int integer;
24b725ae77Skettenis   unsigned int unsigned_integer;
25b725ae77Skettenis   char character;
26b725ae77Skettenis   signed char signed_character;
27b725ae77Skettenis   char *char_ptr;
28b725ae77Skettenis   int array_of_10[10];
29b725ae77Skettenis };
30b725ae77Skettenis 
31b725ae77Skettenis typedef struct _simple_struct simpleton;
32b725ae77Skettenis 
33b725ae77Skettenis simpleton global_simple;
34b725ae77Skettenis 
35b725ae77Skettenis enum foo {
36b725ae77Skettenis   bar = 1,
37b725ae77Skettenis   baz
38b725ae77Skettenis };
39b725ae77Skettenis 
40b725ae77Skettenis typedef enum foo efoo;
41b725ae77Skettenis 
42b725ae77Skettenis union named_union
43b725ae77Skettenis {
44b725ae77Skettenis   int integer;
45b725ae77Skettenis   char *char_ptr;
46b725ae77Skettenis };
47b725ae77Skettenis 
48b725ae77Skettenis typedef struct _struct_decl {
49b725ae77Skettenis   int   integer;
50b725ae77Skettenis   char  character;
51b725ae77Skettenis   char *char_ptr;
52b725ae77Skettenis   long  long_int;
53b725ae77Skettenis   int  **int_ptr_ptr;
54b725ae77Skettenis   long  long_array[10];
55b725ae77Skettenis 
56b725ae77Skettenis   void (*func_ptr) (void);
57b725ae77Skettenis   struct _struct_decl (*func_ptr_struct) (int, char *, long);
58b725ae77Skettenis   struct _struct_decl *(*func_ptr_ptr) (int, char *, long);
59b725ae77Skettenis   union {
60b725ae77Skettenis     int   a;
61b725ae77Skettenis     char *b;
62b725ae77Skettenis     long  c;
63b725ae77Skettenis     enum foo d;
64b725ae77Skettenis   } u1;
65b725ae77Skettenis 
66b725ae77Skettenis   struct {
67b725ae77Skettenis     union {
68b725ae77Skettenis       struct {
69b725ae77Skettenis         int d;
70b725ae77Skettenis         char e[10];
71b725ae77Skettenis         int *(*func) (void);
72b725ae77Skettenis         efoo foo;
73b725ae77Skettenis       } u1s1;
74b725ae77Skettenis 
75b725ae77Skettenis       long f;
76b725ae77Skettenis       struct {
77b725ae77Skettenis         char array_ptr[2];
78b725ae77Skettenis         int (*func) (int, char *);
79b725ae77Skettenis       } u1s2;
80b725ae77Skettenis     } u2;
81b725ae77Skettenis 
82b725ae77Skettenis     int g;
83b725ae77Skettenis     char h;
84b725ae77Skettenis     long i[10];
85b725ae77Skettenis   } s2;
86b725ae77Skettenis } weird_struct;
87b725ae77Skettenis 
88b725ae77Skettenis struct _struct_n_pointer {
89b725ae77Skettenis   char ****char_ptr;
90b725ae77Skettenis   long ****long_ptr;
91b725ae77Skettenis   struct _struct_n_pointer *ptrs[3];
92b725ae77Skettenis   struct _struct_n_pointer *next;
93b725ae77Skettenis };
94b725ae77Skettenis 
95b725ae77Skettenis void do_locals_tests (void);
96b725ae77Skettenis void do_block_tests (void);
97b725ae77Skettenis void subroutine1 (int, long *);
98b725ae77Skettenis void nothing (void);
99b725ae77Skettenis void do_children_tests (void);
100b725ae77Skettenis void do_special_tests (void);
101b725ae77Skettenis void incr_a (char);
102b725ae77Skettenis 
incr_a(char a)103b725ae77Skettenis void incr_a (char a)
104b725ae77Skettenis {
105b725ae77Skettenis   int b;
106b725ae77Skettenis   b = a;
107b725ae77Skettenis }
108b725ae77Skettenis 
109b725ae77Skettenis void
do_locals_tests()110b725ae77Skettenis do_locals_tests ()
111b725ae77Skettenis {
112b725ae77Skettenis   int linteger;
113b725ae77Skettenis   int *lpinteger;
114b725ae77Skettenis   char lcharacter;
115b725ae77Skettenis   char *lpcharacter;
116b725ae77Skettenis   long llong;
117b725ae77Skettenis   long *lplong;
118b725ae77Skettenis   float lfloat;
119b725ae77Skettenis   float *lpfloat;
120b725ae77Skettenis   double ldouble;
121b725ae77Skettenis   double *lpdouble;
122b725ae77Skettenis   struct _simple_struct lsimple;
123b725ae77Skettenis   struct _simple_struct *lpsimple;
124b725ae77Skettenis   void (*func) (void);
125b725ae77Skettenis 
126b725ae77Skettenis   /* Simple assignments */
127b725ae77Skettenis   linteger = 1234;
128b725ae77Skettenis   lpinteger = &linteger;
129b725ae77Skettenis   lcharacter = 'a';
130b725ae77Skettenis   lpcharacter = &lcharacter;
131b725ae77Skettenis   llong = 2121L;
132b725ae77Skettenis   lplong = &llong;
133b725ae77Skettenis   lfloat = 2.1;
134b725ae77Skettenis   lpfloat = &lfloat;
135b725ae77Skettenis   ldouble = 2.718281828459045;
136b725ae77Skettenis   lpdouble = &ldouble;
137b725ae77Skettenis   lsimple.integer = 1234;
138b725ae77Skettenis   lsimple.unsigned_integer = 255;
139b725ae77Skettenis   lsimple.character = 'a';
140b725ae77Skettenis   lsimple.signed_character = 21;
141b725ae77Skettenis   lsimple.char_ptr = &lcharacter;
142b725ae77Skettenis   lpsimple = &lsimple;
143b725ae77Skettenis   func = nothing;
144b725ae77Skettenis 
145b725ae77Skettenis   /* Check pointers */
146b725ae77Skettenis   linteger = 4321;
147b725ae77Skettenis   lcharacter = 'b';
148b725ae77Skettenis   llong = 1212L;
149b725ae77Skettenis   lfloat = 1.2;
150b725ae77Skettenis   ldouble = 5.498548281828172;
151b725ae77Skettenis   lsimple.integer = 255;
152b725ae77Skettenis   lsimple.unsigned_integer = 4321;
153b725ae77Skettenis   lsimple.character = 'b';
154b725ae77Skettenis   lsimple.signed_character = 0;
155b725ae77Skettenis 
156b725ae77Skettenis   subroutine1 (linteger, &llong);
157b725ae77Skettenis }
158b725ae77Skettenis 
159b725ae77Skettenis void
nothing()160b725ae77Skettenis nothing ()
161b725ae77Skettenis {
162b725ae77Skettenis }
163b725ae77Skettenis 
164b725ae77Skettenis void
subroutine1(int i,long * l)165b725ae77Skettenis subroutine1 (int i, long *l)
166b725ae77Skettenis {
167b725ae77Skettenis   global_simple.integer = i + 3;
168b725ae77Skettenis   i = 212;
169b725ae77Skettenis   *l = 12;
170b725ae77Skettenis }
171b725ae77Skettenis 
172b725ae77Skettenis void
do_block_tests()173b725ae77Skettenis do_block_tests ()
174b725ae77Skettenis {
175b725ae77Skettenis   int cb = 12;
176b725ae77Skettenis 
177b725ae77Skettenis   {
178b725ae77Skettenis     int foo;
179b725ae77Skettenis     foo = 123;
180b725ae77Skettenis     {
181b725ae77Skettenis       int foo2;
182b725ae77Skettenis       foo2 = 123;
183b725ae77Skettenis       {
184b725ae77Skettenis         int foo;
185b725ae77Skettenis         foo = 321;
186b725ae77Skettenis       }
187b725ae77Skettenis       foo2 = 0;
188b725ae77Skettenis     }
189b725ae77Skettenis     foo = 0;
190b725ae77Skettenis   }
191b725ae77Skettenis 
192b725ae77Skettenis   cb = 21;
193b725ae77Skettenis }
194b725ae77Skettenis 
195b725ae77Skettenis void
do_children_tests(void)196b725ae77Skettenis do_children_tests (void)
197b725ae77Skettenis {
198b725ae77Skettenis   weird_struct *weird;
199b725ae77Skettenis   struct _struct_n_pointer *psnp;
200b725ae77Skettenis   struct _struct_n_pointer snp0, snp1, snp2;
201b725ae77Skettenis   char a0, *a1, **a2, ***a3;
202b725ae77Skettenis   char b0, *b1, **b2, ***b3;
203b725ae77Skettenis   char c0, *c1, **c2, ***c3;
204b725ae77Skettenis   long z0, *z1, **z2, ***z3;
205b725ae77Skettenis   long y0, *y1, **y2, ***y3;
206b725ae77Skettenis   long x0, *x1, **x2, ***x3;
207b725ae77Skettenis   int *foo;
208b725ae77Skettenis   int bar;
209b725ae77Skettenis 
210b725ae77Skettenis   struct _struct_decl struct_declarations;
211b725ae77Skettenis   weird = &struct_declarations;
212b725ae77Skettenis 
213b725ae77Skettenis   struct_declarations.integer = 123;
214b725ae77Skettenis   weird->char_ptr = "hello";
215b725ae77Skettenis   bar = 2121;
216b725ae77Skettenis   foo = &bar;
217b725ae77Skettenis   struct_declarations.int_ptr_ptr = &foo;
218b725ae77Skettenis   weird->long_array[0] = 1234;
219b725ae77Skettenis   struct_declarations.long_array[1] = 2345;
220b725ae77Skettenis   weird->long_array[2] = 3456;
221b725ae77Skettenis   struct_declarations.long_array[3] = 4567;
222b725ae77Skettenis   weird->long_array[4] = 5678;
223b725ae77Skettenis   struct_declarations.long_array[5] = 6789;
224b725ae77Skettenis   weird->long_array[6] = 7890;
225b725ae77Skettenis   struct_declarations.long_array[7] = 8901;
226b725ae77Skettenis   weird->long_array[8] = 9012;
227b725ae77Skettenis   struct_declarations.long_array[9] = 1234;
228b725ae77Skettenis 
229b725ae77Skettenis   weird->func_ptr = nothing;
230b725ae77Skettenis 
231b725ae77Skettenis   /* Struct/pointer/array tests */
232b725ae77Skettenis   a0 = '0';
233b725ae77Skettenis   a1 = &a0;
234b725ae77Skettenis   a2 = &a1;
235b725ae77Skettenis   a3 = &a2;
236b725ae77Skettenis   b0 = '1';
237b725ae77Skettenis   b1 = &b0;
238b725ae77Skettenis   b2 = &b1;
239b725ae77Skettenis   b3 = &b2;
240b725ae77Skettenis   c0 = '2';
241b725ae77Skettenis   c1 = &c0;
242b725ae77Skettenis   c2 = &c1;
243b725ae77Skettenis   c3 = &c2;
244b725ae77Skettenis   z0 = 0xdead + 0;
245b725ae77Skettenis   z1 = &z0;
246b725ae77Skettenis   z2 = &z1;
247b725ae77Skettenis   z3 = &z2;
248b725ae77Skettenis   y0 = 0xdead + 1;
249b725ae77Skettenis   y1 = &y0;
250b725ae77Skettenis   y2 = &y1;
251b725ae77Skettenis   y3 = &y2;
252b725ae77Skettenis   x0 = 0xdead + 2;
253b725ae77Skettenis   x1 = &x0;
254b725ae77Skettenis   x2 = &x1;
255b725ae77Skettenis   x3 = &x2;
256b725ae77Skettenis   snp0.char_ptr = &a3;
257b725ae77Skettenis   snp0.long_ptr = &z3;
258b725ae77Skettenis   snp0.ptrs[0] = &snp0;
259b725ae77Skettenis   snp0.ptrs[1] = &snp1;
260b725ae77Skettenis   snp0.ptrs[2] = &snp2;
261b725ae77Skettenis   snp0.next = &snp1;
262b725ae77Skettenis   snp1.char_ptr = &b3;
263b725ae77Skettenis   snp1.long_ptr = &y3;
264b725ae77Skettenis   snp1.ptrs[0] = &snp0;
265b725ae77Skettenis   snp1.ptrs[1] = &snp1;
266b725ae77Skettenis   snp1.ptrs[2] = &snp2;
267b725ae77Skettenis   snp1.next = &snp2;
268b725ae77Skettenis   snp2.char_ptr = &c3;
269b725ae77Skettenis   snp2.long_ptr = &x3;
270b725ae77Skettenis   snp2.ptrs[0] = &snp0;
271b725ae77Skettenis   snp2.ptrs[1] = &snp1;
272b725ae77Skettenis   snp2.ptrs[2] = &snp2;
273b725ae77Skettenis   snp2.next = 0x0;
274b725ae77Skettenis   psnp = &snp0;
275b725ae77Skettenis   snp0.char_ptr = &b3;
276b725ae77Skettenis   snp1.char_ptr = &c3;
277b725ae77Skettenis   snp2.char_ptr = &a3;
278b725ae77Skettenis   snp0.long_ptr = &y3;
279b725ae77Skettenis   snp1.long_ptr = &x3;
280b725ae77Skettenis   snp2.long_ptr = &z3;
281b725ae77Skettenis }
282b725ae77Skettenis 
283b725ae77Skettenis void
do_special_tests(void)284b725ae77Skettenis do_special_tests (void)
285b725ae77Skettenis {
286b725ae77Skettenis   union named_union u;
287b725ae77Skettenis   union {
288b725ae77Skettenis     int a;
289b725ae77Skettenis     char b;
290b725ae77Skettenis     long c;
291b725ae77Skettenis   } anonu;
292b725ae77Skettenis   struct _simple_struct s;
293b725ae77Skettenis   struct {
294b725ae77Skettenis     int a;
295b725ae77Skettenis     char b;
296b725ae77Skettenis     long c;
297b725ae77Skettenis   } anons;
298b725ae77Skettenis   enum foo e;
299b725ae77Skettenis   enum { A, B, C } anone;
300b725ae77Skettenis   int array[21];
301b725ae77Skettenis   int a;
302b725ae77Skettenis 
303b725ae77Skettenis   a = 1;
304b725ae77Skettenis   incr_a(2);
305b725ae77Skettenis }
306b725ae77Skettenis 
307b725ae77Skettenis int
main(int argc,char * argv[])308b725ae77Skettenis main (int argc, char *argv [])
309b725ae77Skettenis {
310b725ae77Skettenis   do_locals_tests ();
311b725ae77Skettenis   do_block_tests ();
312b725ae77Skettenis   do_children_tests ();
313b725ae77Skettenis   do_special_tests ();
314b725ae77Skettenis   exit (0);
315b725ae77Skettenis }
316b725ae77Skettenis 
317b725ae77Skettenis 
318