1 /* Copyright 1999-2013 Free Software Foundation, Inc.
3 This file is part of GDB.
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.
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.
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/>. */
21 struct _simple_struct {
23 unsigned int unsigned_integer;
25 signed char signed_character;
30 typedef struct _simple_struct simpleton;
32 simpleton global_simple;
39 typedef enum foo efoo;
47 typedef struct _struct_decl {
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);
77 int (*func) (int, char *);
87 struct _struct_n_pointer {
90 struct _struct_n_pointer *ptrs[3];
91 struct _struct_n_pointer *next;
112 void do_locals_tests (void);
113 void do_block_tests (void);
114 void subroutine1 (int, long *);
116 void do_children_tests (void);
117 void do_special_tests (void);
126 int array[] = {1,2,3};
127 int array2[] = {4,5,6};
128 int *array_ptr = array;
135 char lcharacter[2] = { 0, 0 };
136 char *lpcharacter = 0;
142 double *lpdouble = 0;
143 struct _simple_struct lsimple = { 0 };
144 struct _simple_struct *lpsimple = 0;
145 void (*func) (void) = 0;
147 /* Simple assignments */
149 lpinteger = &linteger;
151 lpcharacter = lcharacter;
156 ldouble = 2.718281828459045;
158 lsimple.integer = 1234;
159 lsimple.unsigned_integer = 255;
160 lsimple.character = 'a';
161 lsimple.signed_character = 21;
162 lsimple.char_ptr = lcharacter;
171 ldouble = 5.498548281828172;
172 lsimple.integer = 255;
173 lsimple.unsigned_integer = 4321;
174 lsimple.character = 'b';
175 lsimple.signed_character = 0;
177 subroutine1 (linteger, &llong);
186 subroutine1 (int i, long *l)
188 global_simple.integer = i + 3;
217 do_children_tests (void)
220 struct _struct_n_pointer *psnp;
221 struct _struct_n_pointer snp0, snp1, snp2;
222 char a0[2] = {}, *a1, **a2, ***a3;
223 char b0[2] = {}, *b1, **b2, ***b3;
224 char c0[2] = {}, *c1, **c2, ***c3;
225 long z0, *z1, **z2, ***z3;
226 long y0, *y1, **y2, ***y3;
227 long x0, *x1, **x2, ***x3;
231 /* Avoid pointing into NULL, as that is editable on some
234 int *dummy_ptr = &dummy;
236 struct _struct_decl struct_declarations = { 0, 0, NULL, 0, &dummy_ptr };
237 weird = &struct_declarations;
239 struct_declarations.integer = 123;
240 weird->char_ptr = "hello";
243 struct_declarations.int_ptr_ptr = &foo;
244 weird->long_array[0] = 1234;
245 struct_declarations.long_array[1] = 2345;
246 weird->long_array[2] = 3456;
247 struct_declarations.long_array[3] = 4567;
248 weird->long_array[4] = 5678;
249 struct_declarations.long_array[5] = 6789;
250 weird->long_array[6] = 7890;
251 struct_declarations.long_array[7] = 8901;
252 weird->long_array[8] = 9012;
253 struct_declarations.long_array[9] = 1234;
255 weird->func_ptr = nothing;
257 /* Struct/pointer/array tests */
284 snp0.ptrs[0] = &snp0;
285 snp0.ptrs[1] = &snp1;
286 snp0.ptrs[2] = &snp2;
290 snp1.ptrs[0] = &snp0;
291 snp1.ptrs[1] = &snp1;
292 snp1.ptrs[2] = &snp2;
296 snp2.ptrs[0] = &snp0;
297 snp2.ptrs[1] = &snp1;
298 snp2.ptrs[2] = &snp2;
311 do_special_tests (void)
319 struct _simple_struct s;
326 enum { A, B, C } anone;
340 void do_frozen_tests ()
342 /*: BEGIN: frozen :*/
353 mi_create_varobj V1 v1 "create varobj for v1"
354 mi_create_varobj V2 v2 "create varobj for v2"
356 mi_list_varobj_children "V1" {
357 {"V1.i" "i" "0" "int"}
358 {"V1.nested" "nested" "2" "struct {...}"}
359 } "list children of v1"
361 mi_list_varobj_children "V1.nested" {
362 {"V1.nested.j" "j" "0" "int"}
363 {"V1.nested.k" "k" "0" "int"}
364 } "list children of v1.nested"
366 mi_check_varobj_value V1.i 1 "check V1.i: 1"
367 mi_check_varobj_value V1.nested.j 2 "check V1.nested.j: 2"
368 mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3"
369 mi_check_varobj_value V2 4 "check V2: 4"
373 mi_varobj_update * {V2} "update varobjs: V2 changed"
378 mi_varobj_update * {} "update varobjs: nothing changed"
379 mi_check_varobj_value V2 5 "check V2: 5"
380 mi_varobj_update V2 {V2} "update V2 explicitly"
381 mi_check_varobj_value V2 6 "check V2: 6"
388 mi_varobj_update * {} "update varobjs: nothing changed"
389 mi_check_varobj_value V1.i 1 "check V1.i: 1"
390 mi_check_varobj_value V1.nested.j 2 "check V1.nested.j: 2"
391 mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3"
392 # Check that explicit update for elements of structures
395 mi_varobj_update V1.nested.j {V1.nested.j} "update V1.nested.j"
396 mi_check_varobj_value V1.i 1 "check V1.i: 1"
397 mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8"
398 mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3"
399 # Update v1.nested, check that children is updated.
400 mi_varobj_update V1.nested {V1.nested.k} "update V1.nested"
401 mi_check_varobj_value V1.i 1 "check V1.i: 1"
402 mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8"
403 mi_check_varobj_value V1.nested.k 9 "check V1.nested.k: 9"
405 mi_varobj_update V1.i {V1.i} "update V1.i"
406 mi_check_varobj_value V1.i 7 "check V1.i: 7"
412 # Check that unfreeze itself does not updates the values.
414 mi_check_varobj_value V1.i 7 "check V1.i: 7"
415 mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8"
416 mi_check_varobj_value V1.nested.k 9 "check V1.nested.k: 9"
417 mi_varobj_update V1 {V1.i V1.nested.j V1.nested.k} "update V1"
418 mi_check_varobj_value V1.i 10 "check V1.i: 10"
419 mi_check_varobj_value V1.nested.j 11 "check V1.nested.j: 11"
420 mi_check_varobj_value V1.nested.k 12 "check V1.nested.k: 12"
426 void do_at_tests_callee ()
428 /* This is a test of wrong DWARF data being assigned to expression.
429 The DWARF location expression is bound to symbol when expression
430 is parsed. So, if we create floating varobj in one function,
431 and then try to reevaluate it in other frame without reparsing
432 the expression, we will access local variables using DWARF
433 location expression from the original frame, and are likely
434 to grab wrong symbol. To reliably reproduce this bug, we need
435 to wrap our variable with a bunch of buffers, so that those
436 buffers are accessed instead of the real one. */
444 i++; /* breakpoint inside callee */
451 /*: BEGIN: floating :*/
455 mi_create_floating_varobj F i "create floating varobj"
459 mi_varobj_update F {F} "update F (1)"
460 mi_check_varobj_value F 11 "check F (1)"
466 mi_varobj_update_with_type_change F "double" "0" "update F (2)"
467 mi_check_varobj_value F 15 "check F (2)"
474 mi_gdb_test "-var-update --all-values F" {.*value="19".*} "update F (--all-values)"
480 mi_varobj_update_with_type_change F "int" "0" "update F (3)"
481 mi_check_varobj_value F 13 "check F (3)"
484 do_at_tests_callee ();
486 /*: END: floating :*/
489 /* Some header appear to define uint already, so apply some
490 uglification. Note that without uglification, the compile
491 does not fail, rather, we don't test what we want because
492 something else calls check_typedef on 'uint' already. */
493 typedef unsigned int uint_for_mi_testing;
497 uint_for_mi_testing sharable : 4;
500 /* Accessing a value of a bitfield whose type is a typed used to
501 result in division by zero. See:
503 http://sourceware.org/bugzilla/show_bug.cgi?id=10884
505 This tests for this bug. */
507 void do_bitfield_tests ()
509 /*: BEGIN: bitfield :*/
510 struct Data d = {0, 3};
512 mi_create_varobj V d "create varobj for Data"
513 mi_list_varobj_children "V" {
514 {"V.alloc" "alloc" "0" "int"}
515 {"V.sharable" "sharable" "0" "uint_for_mi_testing"}
516 } "list children of Data"
517 mi_check_varobj_value V.sharable 3 "access bitfield"
520 /*: END: bitfield :*/
524 do_anonymous_type_tests (void)
526 struct anonymous *anon;
527 struct anonymous **ptr;
541 anon = malloc (sizeof (struct anonymous));
544 anon->c = (char *) 3;
547 anon->h = (const char **) 6;
548 anon->simple = (simpleton ***) 7;
552 return; /* anonymous type tests breakpoint */
556 main (int argc, char *argv [])
560 do_children_tests ();
564 do_bitfield_tests ();
565 do_anonymous_type_tests ();