OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [gdb/] [testsuite/] [gdb.mi/] [var-cmd.c] - Blame information for rev 25

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 25 jlechner
/* Copyright 1999, 2004, 2007, 2008 Free Software Foundation, Inc.
2
 
3
   This file is part of GDB.
4
 
5
   This program is free software; you can redistribute it and/or modify
6
   it under the terms of the GNU General Public License as published by
7
   the Free Software Foundation; either version 3 of the License, or
8
   (at your option) any later version.
9
 
10
   This program is distributed in the hope that it will be useful,
11
   but WITHOUT ANY WARRANTY; without even the implied warranty of
12
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
   GNU General Public License for more details.
14
 
15
   You should have received a copy of the GNU General Public License
16
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
 
18
#include <stdlib.h>
19
#include <string.h>
20
 
21
struct _simple_struct {
22
  int integer;
23
  unsigned int unsigned_integer;
24
  char character;
25
  signed char signed_character;
26
  char *char_ptr;
27
  int array_of_10[10];
28
};
29
 
30
typedef struct _simple_struct simpleton;
31
 
32
simpleton global_simple;
33
 
34
enum foo {
35
  bar = 1,
36
  baz
37
};
38
 
39
typedef enum foo efoo;
40
 
41
union named_union
42
{
43
  int integer;
44
  char *char_ptr;
45
};
46
 
47
typedef struct _struct_decl {
48
  int   integer;
49
  char  character;
50
  char *char_ptr;
51
  long  long_int;
52
  int  **int_ptr_ptr;
53
  long  long_array[10];
54
 
55
  void (*func_ptr) (void);
56
  struct _struct_decl (*func_ptr_struct) (int, char *, long);
57
  struct _struct_decl *(*func_ptr_ptr) (int, char *, long);
58
  union {
59
    int   a;
60
    char *b;
61
    long  c;
62
    enum foo d;
63
  } u1;
64
 
65
  struct {
66
    union {
67
      struct {
68
        int d;
69
        char e[10];
70
        int *(*func) (void);
71
        efoo foo;
72
      } u1s1;
73
 
74
      long f;
75
      struct {
76
        char array_ptr[2];
77
        int (*func) (int, char *);
78
      } u1s2;
79
    } u2;
80
 
81
    int g;
82
    char h;
83
    long i[10];
84
  } s2;
85
} weird_struct;
86
 
87
struct _struct_n_pointer {
88
  char ****char_ptr;
89
  long ****long_ptr;
90
  struct _struct_n_pointer *ptrs[3];
91
  struct _struct_n_pointer *next;
92
};
93
 
94
void do_locals_tests (void);
95
void do_block_tests (void);
96
void subroutine1 (int, long *);
97
void nothing (void);
98
void do_children_tests (void);
99
void do_special_tests (void);
100
void incr_a (char);
101
 
102
void incr_a (char a)
103
{
104
  int b;
105
  b = a;
106
}
107
 
108
int array[] = {1,2,3};
109
int array2[] = {4,5,6};
110
int *array_ptr = array;
111
 
112
void
113
do_locals_tests ()
114
{
115
  int linteger = 0;
116
  int *lpinteger = 0;
117
  char lcharacter[2] = { 0, 0 };
118
  char *lpcharacter = 0;
119
  long llong = 0;
120
  long *lplong = 0;
121
  float lfloat = 0;
122
  float *lpfloat = 0;
123
  double ldouble = 0;
124
  double *lpdouble = 0;
125
  struct _simple_struct lsimple;
126
  struct _simple_struct *lpsimple;
127
  void (*func) (void);
128
 
129
  /* Simple assignments */
130
  linteger = 1234;
131
  lpinteger = &linteger;
132
  lcharacter[0] = 'a';
133
  lpcharacter = lcharacter;
134
  llong = 2121L;
135
  lplong = &llong;
136
  lfloat = 2.1;
137
  lpfloat = &lfloat;
138
  ldouble = 2.718281828459045;
139
  lpdouble = &ldouble;
140
  lsimple.integer = 1234;
141
  lsimple.unsigned_integer = 255;
142
  lsimple.character = 'a';
143
  lsimple.signed_character = 21;
144
  lsimple.char_ptr = lcharacter;
145
  lpsimple = &lsimple;
146
  func = nothing;
147
 
148
  /* Check pointers */
149
  linteger = 4321;
150
  lcharacter[0] = 'b';
151
  llong = 1212L;
152
  lfloat = 1.2;
153
  ldouble = 5.498548281828172;
154
  lsimple.integer = 255;
155
  lsimple.unsigned_integer = 4321;
156
  lsimple.character = 'b';
157
  lsimple.signed_character = 0;
158
 
159
  subroutine1 (linteger, &llong);
160
}
161
 
162
void
163
nothing ()
164
{
165
}
166
 
167
void
168
subroutine1 (int i, long *l)
169
{
170
  global_simple.integer = i + 3;
171
  i = 212;
172
  *l = 12;
173
}
174
 
175
void
176
do_block_tests ()
177
{
178
  int cb = 12;
179
 
180
  {
181
    int foo;
182
    foo = 123;
183
    {
184
      int foo2;
185
      foo2 = 123;
186
      {
187
        int foo;
188
        foo = 321;
189
      }
190
      foo2 = 0;
191
    }
192
    foo = 0;
193
  }
194
 
195
  cb = 21;
196
}
197
 
198
void
199
do_children_tests (void)
200
{
201
  weird_struct *weird;
202
  struct _struct_n_pointer *psnp;
203
  struct _struct_n_pointer snp0, snp1, snp2;
204
  char a0[2] = {}, *a1, **a2, ***a3;
205
  char b0[2] = {}, *b1, **b2, ***b3;
206
  char c0[2] = {}, *c1, **c2, ***c3;
207
  long z0, *z1, **z2, ***z3;
208
  long y0, *y1, **y2, ***y3;
209
  long x0, *x1, **x2, ***x3;
210
  int *foo;
211
  int bar;
212
 
213
  /* Avoid pointing into NULL, as that is editable on some
214
     systems.  */
215
  int dummy;
216
  int *dummy_ptr = &dummy;
217
 
218
  struct _struct_decl struct_declarations = { 0, 0, NULL, 0, &dummy_ptr };
219
  weird = &struct_declarations;
220
 
221
  struct_declarations.integer = 123;
222
  weird->char_ptr = "hello";
223
  bar = 2121;
224
  foo = &bar;
225
  struct_declarations.int_ptr_ptr = &foo;
226
  weird->long_array[0] = 1234;
227
  struct_declarations.long_array[1] = 2345;
228
  weird->long_array[2] = 3456;
229
  struct_declarations.long_array[3] = 4567;
230
  weird->long_array[4] = 5678;
231
  struct_declarations.long_array[5] = 6789;
232
  weird->long_array[6] = 7890;
233
  struct_declarations.long_array[7] = 8901;
234
  weird->long_array[8] = 9012;
235
  struct_declarations.long_array[9] = 1234;
236
 
237
  weird->func_ptr = nothing;
238
 
239
  /* Struct/pointer/array tests */
240
  a0[0] = '0';
241
  a1 = a0;
242
  a2 = &a1;
243
  a3 = &a2;
244
  b0[0] = '1';
245
  b1 = b0;
246
  b2 = &b1;
247
  b3 = &b2;
248
  c0[0] = '2';
249
  c1 = c0;
250
  c2 = &c1;
251
  c3 = &c2;
252
  z0 = 0xdead + 0;
253
  z1 = &z0;
254
  z2 = &z1;
255
  z3 = &z2;
256
  y0 = 0xdead + 1;
257
  y1 = &y0;
258
  y2 = &y1;
259
  y3 = &y2;
260
  x0 = 0xdead + 2;
261
  x1 = &x0;
262
  x2 = &x1;
263
  x3 = &x2;
264
  snp0.char_ptr = &a3;
265
  snp0.long_ptr = &z3;
266
  snp0.ptrs[0] = &snp0;
267
  snp0.ptrs[1] = &snp1;
268
  snp0.ptrs[2] = &snp2;
269
  snp0.next = &snp1;
270
  snp1.char_ptr = &b3;
271
  snp1.long_ptr = &y3;
272
  snp1.ptrs[0] = &snp0;
273
  snp1.ptrs[1] = &snp1;
274
  snp1.ptrs[2] = &snp2;
275
  snp1.next = &snp2;
276
  snp2.char_ptr = &c3;
277
  snp2.long_ptr = &x3;
278
  snp2.ptrs[0] = &snp0;
279
  snp2.ptrs[1] = &snp1;
280
  snp2.ptrs[2] = &snp2;
281
  snp2.next = 0x0;
282
  psnp = &snp0;
283
  snp0.char_ptr = &b3;
284
  snp1.char_ptr = &c3;
285
  snp2.char_ptr = &a3;
286
  snp0.long_ptr = &y3;
287
  snp1.long_ptr = &x3;
288
  snp2.long_ptr = &z3;
289
  {int a = 0;}
290
}
291
 
292
void
293
do_special_tests (void)
294
{
295
  union named_union u;
296
  union {
297
    int a;
298
    char b;
299
    long c;
300
  } anonu;
301
  struct _simple_struct s;
302
  struct {
303
    int a;
304
    char b;
305
    long c;
306
  } anons;
307
  enum foo e;
308
  enum { A, B, C } anone;
309
  int array[21];
310
  int a;
311
 
312
  a = 1;
313
  u.integer = a;
314
  anonu.a = a;
315
  s.integer = a;
316
  anons.a = a;
317
  e = bar;
318
  anone = A;
319
  incr_a(2);
320
}
321
 
322
void do_frozen_tests ()
323
{
324
  /*: BEGIN: frozen :*/
325
  struct {
326
    int i;
327
    struct {
328
      int j;
329
      int k;
330
    } nested;
331
  } v1 = {1, {2, 3}};
332
 
333
  int v2 = 4;
334
  /*:
335
    mi_create_varobj V1 v1 "create varobj for v1"
336
    mi_create_varobj V2 v2 "create varobj for v2"
337
 
338
    mi_list_varobj_children "V1" {
339
        {"V1.i" "i" "0" "int"}
340
        {"V1.nested" "nested" "2" "struct {...}"}
341
    } "list children of v1"
342
 
343
    mi_list_varobj_children "V1.nested" {
344
        {"V1.nested.j" "j" "0" "int"}
345
        {"V1.nested.k" "k" "0" "int"}
346
    } "list children of v1.nested"
347
 
348
    mi_check_varobj_value V1.i 1 "check V1.i: 1"
349
    mi_check_varobj_value V1.nested.j 2 "check V1.nested.j: 2"
350
    mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3"
351
    mi_check_varobj_value V2 4 "check V2: 4"
352
  :*/
353
  v2 = 5;
354
  /*:
355
    mi_varobj_update * {V2} "update varobjs: V2 changed"
356
    set_frozen V2 1
357
  :*/
358
  v2 = 6;
359
  /*:
360
    mi_varobj_update * {} "update varobjs: nothing changed"
361
    mi_check_varobj_value V2 5 "check V2: 5"
362
    mi_varobj_update V2 {V2} "update V2 explicitly"
363
    mi_check_varobj_value V2 6 "check V2: 6"
364
  :*/
365
  v1.i = 7;
366
  v1.nested.j = 8;
367
  v1.nested.k = 9;
368
  /*:
369
    set_frozen V1 1
370
    mi_varobj_update * {} "update varobjs: nothing changed"
371
    mi_check_varobj_value V1.i 1 "check V1.i: 1"
372
    mi_check_varobj_value V1.nested.j 2 "check V1.nested.j: 2"
373
    mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3"
374
    # Check that explicit update for elements of structures
375
    # works.
376
    # Update v1.j
377
    mi_varobj_update V1.nested.j {V1.nested.j} "update V1.nested.j"
378
    mi_check_varobj_value V1.i 1 "check V1.i: 1"
379
    mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8"
380
    mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3"
381
    # Update v1.nested, check that children is updated.
382
    mi_varobj_update V1.nested {V1.nested.k} "update V1.nested"
383
    mi_check_varobj_value V1.i 1 "check V1.i: 1"
384
    mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8"
385
    mi_check_varobj_value V1.nested.k 9 "check V1.nested.k: 9"
386
    # Update v1.i
387
    mi_varobj_update V1.i {V1.i} "update V1.i"
388
    mi_check_varobj_value V1.i 7 "check V1.i: 7"
389
  :*/
390
  v1.i = 10;
391
  v1.nested.j = 11;
392
  v1.nested.k = 12;
393
  /*:
394
    # Check that unfreeze itself does not updates the values.
395
    set_frozen V1 0
396
    mi_check_varobj_value V1.i 7 "check V1.i: 7"
397
    mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8"
398
    mi_check_varobj_value V1.nested.k 9 "check V1.nested.k: 9"
399
    mi_varobj_update V1 {V1.i V1.nested.j V1.nested.k} "update V1"
400
    mi_check_varobj_value V1.i 10 "check V1.i: 10"
401
    mi_check_varobj_value V1.nested.j 11 "check V1.nested.j: 11"
402
    mi_check_varobj_value V1.nested.k 12 "check V1.nested.k: 12"
403
  :*/
404
 
405
  /*: END: frozen :*/
406
}
407
 
408
int
409
main (int argc, char *argv [])
410
{
411
  do_locals_tests ();
412
  do_block_tests ();
413
  do_children_tests ();
414
  do_special_tests ();
415
  do_frozen_tests ();
416
  exit (0);
417
}
418
 
419
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.