* lib/gdb.exp (build_id_debug_filename_get): Improve check for
[deliverable/binutils-gdb.git] / gdb / p-valprint.c
CommitLineData
373a8247 1/* Support for printing Pascal values for GDB, the GNU debugger.
5bcca90b 2
6aba47ca 3 Copyright (C) 2000, 2001, 2003, 2005, 2006, 2007
4f2aea11 4 Free Software Foundation, Inc.
373a8247
PM
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
373a8247
PM
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
373a8247
PM
20
21/* This file is derived from c-valprint.c */
22
23#include "defs.h"
04ea0df1 24#include "gdb_obstack.h"
373a8247
PM
25#include "symtab.h"
26#include "gdbtypes.h"
27#include "expression.h"
28#include "value.h"
29#include "command.h"
30#include "gdbcmd.h"
31#include "gdbcore.h"
32#include "demangle.h"
33#include "valprint.h"
3172dc30 34#include "typeprint.h"
373a8247
PM
35#include "language.h"
36#include "target.h"
37#include "annotate.h"
38#include "p-lang.h"
eb43544b 39#include "cp-abi.h"
d3cbe7ef 40#include "cp-support.h"
373a8247
PM
41\f
42
43
44
45/* Print data of type TYPE located at VALADDR (within GDB), which came from
46 the inferior at address ADDRESS, onto stdio stream STREAM according to
47 FORMAT (a letter or 0 for natural format). The data at VALADDR is in
48 target byte order.
49
50 If the data are a string pointer, returns the number of string characters
51 printed.
52
53 If DEREF_REF is nonzero, then dereference references, otherwise just print
54 them like pointers.
55
56 The PRETTY parameter controls prettyprinting. */
57
58
59int
fc1a4b47 60pascal_val_print (struct type *type, const gdb_byte *valaddr,
a2bd3dcd
AC
61 int embedded_offset, CORE_ADDR address,
62 struct ui_file *stream, int format, int deref_ref,
63 int recurse, enum val_prettyprint pretty)
373a8247 64{
52f0bd74 65 unsigned int i = 0; /* Number of characters printed */
373a8247
PM
66 unsigned len;
67 struct type *elttype;
68 unsigned eltlen;
5598ce11
PM
69 int length_pos, length_size, string_pos;
70 int char_size;
373a8247
PM
71 LONGEST val;
72 CORE_ADDR addr;
73
74 CHECK_TYPEDEF (type);
75 switch (TYPE_CODE (type))
76 {
77 case TYPE_CODE_ARRAY:
78 if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
79 {
80 elttype = check_typedef (TYPE_TARGET_TYPE (type));
81 eltlen = TYPE_LENGTH (elttype);
82 len = TYPE_LENGTH (type) / eltlen;
83 if (prettyprint_arrays)
84 {
85 print_spaces_filtered (2 + 2 * recurse, stream);
86 }
87 /* For an array of chars, print with string syntax. */
b20a3440
PM
88 if (eltlen == 1
89 && ((TYPE_CODE (elttype) == TYPE_CODE_INT)
373a8247
PM
90 || ((current_language->la_language == language_m2)
91 && (TYPE_CODE (elttype) == TYPE_CODE_CHAR)))
92 && (format == 0 || format == 's'))
93 {
94 /* If requested, look for the first null char and only print
95 elements up to it. */
96 if (stop_print_at_null)
97 {
98 unsigned int temp_len;
99
100 /* Look for a NULL char. */
101 for (temp_len = 0;
102 (valaddr + embedded_offset)[temp_len]
103 && temp_len < len && temp_len < print_max;
104 temp_len++);
105 len = temp_len;
106 }
107
108 LA_PRINT_STRING (stream, valaddr + embedded_offset, len, 1, 0);
109 i = len;
110 }
111 else
112 {
113 fprintf_filtered (stream, "{");
114 /* If this is a virtual function table, print the 0th
115 entry specially, and the rest of the members normally. */
116 if (pascal_object_is_vtbl_ptr_type (elttype))
117 {
118 i = 1;
119 fprintf_filtered (stream, "%d vtable entries", len - 1);
120 }
121 else
122 {
123 i = 0;
124 }
125 val_print_array_elements (type, valaddr + embedded_offset, address, stream,
126 format, deref_ref, recurse, pretty, i);
127 fprintf_filtered (stream, "}");
128 }
129 break;
130 }
131 /* Array of unspecified length: treat like pointer to first elt. */
132 addr = address;
133 goto print_unpacked_pointer;
134
135 case TYPE_CODE_PTR:
136 if (format && format != 's')
137 {
138 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
139 break;
140 }
141 if (vtblprint && pascal_object_is_vtbl_ptr_type (type))
142 {
143 /* Print the unmangled name if desired. */
144 /* Print vtable entry - we only get here if we ARE using
145 -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */
b276f1bb
AC
146 /* Extract the address, assume that it is unsigned. */
147 print_address_demangle (extract_unsigned_integer (valaddr + embedded_offset, TYPE_LENGTH (type)),
373a8247
PM
148 stream, demangle);
149 break;
150 }
151 elttype = check_typedef (TYPE_TARGET_TYPE (type));
373a8247
PM
152 {
153 addr = unpack_pointer (type, valaddr + embedded_offset);
154 print_unpacked_pointer:
155 elttype = check_typedef (TYPE_TARGET_TYPE (type));
156
157 if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
158 {
159 /* Try to print what function it points to. */
160 print_address_demangle (addr, stream, demangle);
161 /* Return value is irrelevant except for string pointers. */
162 return (0);
163 }
164
165 if (addressprint && format != 's')
166 {
b20a3440 167 fputs_filtered (paddress (addr), stream);
373a8247
PM
168 }
169
170 /* For a pointer to char or unsigned char, also print the string
171 pointed to, unless pointer is null. */
172 if (TYPE_LENGTH (elttype) == 1
173 && TYPE_CODE (elttype) == TYPE_CODE_INT
174 && (format == 0 || format == 's')
175 && addr != 0)
176 {
177 /* no wide string yet */
178 i = val_print_string (addr, -1, 1, stream);
179 }
180 /* also for pointers to pascal strings */
181 /* Note: this is Free Pascal specific:
182 as GDB does not recognize stabs pascal strings
183 Pascal strings are mapped to records
184 with lowercase names PM */
e2625b33
PM
185 if (is_pascal_string_type (elttype, &length_pos, &length_size,
186 &string_pos, &char_size, NULL)
5598ce11 187 && addr != 0)
373a8247 188 {
5598ce11
PM
189 ULONGEST string_length;
190 void *buffer;
191 buffer = xmalloc (length_size);
192 read_memory (addr + length_pos, buffer, length_size);
193 string_length = extract_unsigned_integer (buffer, length_size);
194 xfree (buffer);
195 i = val_print_string (addr + string_pos, string_length, char_size, stream);
373a8247
PM
196 }
197 else if (pascal_object_is_vtbl_member (type))
198 {
199 /* print vtbl's nicely */
200 CORE_ADDR vt_address = unpack_pointer (type, valaddr + embedded_offset);
201
202 struct minimal_symbol *msymbol =
203 lookup_minimal_symbol_by_pc (vt_address);
5598ce11
PM
204 if ((msymbol != NULL)
205 && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
373a8247
PM
206 {
207 fputs_filtered (" <", stream);
de5ad195 208 fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
373a8247
PM
209 fputs_filtered (">", stream);
210 }
211 if (vt_address && vtblprint)
212 {
6943961c 213 struct value *vt_val;
373a8247
PM
214 struct symbol *wsym = (struct symbol *) NULL;
215 struct type *wtype;
373a8247
PM
216 struct block *block = (struct block *) NULL;
217 int is_this_fld;
218
219 if (msymbol != NULL)
b20a3440 220 wsym = lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol), block,
cdef89d0 221 VAR_DOMAIN, &is_this_fld, NULL);
373a8247
PM
222
223 if (wsym)
224 {
225 wtype = SYMBOL_TYPE (wsym);
226 }
227 else
228 {
229 wtype = TYPE_TARGET_TYPE (type);
230 }
00a4c844 231 vt_val = value_at (wtype, vt_address);
806048c6
DJ
232 common_val_print (vt_val, stream, format, deref_ref,
233 recurse + 1, pretty);
373a8247
PM
234 if (pretty)
235 {
236 fprintf_filtered (stream, "\n");
237 print_spaces_filtered (2 + 2 * recurse, stream);
238 }
239 }
240 }
241
242 /* Return number of characters printed, including the terminating
243 '\0' if we reached the end. val_print_string takes care including
244 the terminating '\0' if necessary. */
245 return i;
246 }
247 break;
248
373a8247
PM
249 case TYPE_CODE_REF:
250 elttype = check_typedef (TYPE_TARGET_TYPE (type));
373a8247
PM
251 if (addressprint)
252 {
253 fprintf_filtered (stream, "@");
b276f1bb 254 /* Extract the address, assume that it is unsigned. */
b20a3440
PM
255 fputs_filtered (paddress (
256 extract_unsigned_integer (valaddr + embedded_offset,
257 gdbarch_ptr_bit (current_gdbarch) / HOST_CHAR_BIT)), stream);
373a8247
PM
258 if (deref_ref)
259 fputs_filtered (": ", stream);
260 }
261 /* De-reference the reference. */
262 if (deref_ref)
263 {
264 if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
265 {
6943961c 266 struct value *deref_val =
373a8247
PM
267 value_at
268 (TYPE_TARGET_TYPE (type),
269 unpack_pointer (lookup_pointer_type (builtin_type_void),
00a4c844 270 valaddr + embedded_offset));
806048c6
DJ
271 common_val_print (deref_val, stream, format, deref_ref,
272 recurse + 1, pretty);
373a8247
PM
273 }
274 else
275 fputs_filtered ("???", stream);
276 }
277 break;
278
279 case TYPE_CODE_UNION:
280 if (recurse && !unionprint)
281 {
282 fprintf_filtered (stream, "{...}");
283 break;
284 }
285 /* Fall through. */
286 case TYPE_CODE_STRUCT:
287 if (vtblprint && pascal_object_is_vtbl_ptr_type (type))
288 {
289 /* Print the unmangled name if desired. */
290 /* Print vtable entry - we only get here if NOT using
291 -fvtable_thunks. (Otherwise, look under TYPE_CODE_PTR.) */
b276f1bb
AC
292 /* Extract the address, assume that it is unsigned. */
293 print_address_demangle
294 (extract_unsigned_integer (valaddr + embedded_offset + TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8,
295 TYPE_LENGTH (TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET))),
296 stream, demangle);
373a8247
PM
297 }
298 else
299 {
5598ce11 300 if (is_pascal_string_type (type, &length_pos, &length_size,
e2625b33 301 &string_pos, &char_size, NULL))
373a8247 302 {
5598ce11
PM
303 len = extract_unsigned_integer (valaddr + embedded_offset + length_pos, length_size);
304 LA_PRINT_STRING (stream, valaddr + embedded_offset + string_pos, len, char_size, 0);
373a8247
PM
305 }
306 else
307 pascal_object_print_value_fields (type, valaddr + embedded_offset, address, stream, format,
308 recurse, pretty, NULL, 0);
309 }
310 break;
311
312 case TYPE_CODE_ENUM:
313 if (format)
314 {
315 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
316 break;
317 }
318 len = TYPE_NFIELDS (type);
319 val = unpack_long (type, valaddr + embedded_offset);
320 for (i = 0; i < len; i++)
321 {
322 QUIT;
323 if (val == TYPE_FIELD_BITPOS (type, i))
324 {
325 break;
326 }
327 }
328 if (i < len)
329 {
330 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
331 }
332 else
333 {
334 print_longest (stream, 'd', 0, val);
335 }
336 break;
337
4f2aea11
MK
338 case TYPE_CODE_FLAGS:
339 if (format)
340 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
341 else
342 val_print_type_code_flags (type, valaddr + embedded_offset, stream);
343 break;
344
373a8247
PM
345 case TYPE_CODE_FUNC:
346 if (format)
347 {
348 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
349 break;
350 }
351 /* FIXME, we should consider, at least for ANSI C language, eliminating
352 the distinction made between FUNCs and POINTERs to FUNCs. */
353 fprintf_filtered (stream, "{");
354 type_print (type, "", stream, -1);
355 fprintf_filtered (stream, "} ");
356 /* Try to print what function it points to, and its address. */
357 print_address_demangle (address, stream, demangle);
358 break;
359
360 case TYPE_CODE_BOOL:
361 format = format ? format : output_format;
362 if (format)
363 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
364 else
365 {
366 val = unpack_long (type, valaddr + embedded_offset);
367 if (val == 0)
368 fputs_filtered ("false", stream);
369 else if (val == 1)
370 fputs_filtered ("true", stream);
371 else
372 {
373 fputs_filtered ("true (", stream);
374 fprintf_filtered (stream, "%ld)", (long int) val);
375 }
376 }
377 break;
378
379 case TYPE_CODE_RANGE:
380 /* FIXME: create_range_type does not set the unsigned bit in a
381 range type (I think it probably should copy it from the target
382 type), so we won't print values which are too large to
383 fit in a signed integer correctly. */
384 /* FIXME: Doesn't handle ranges of enums correctly. (Can't just
385 print with the target type, though, because the size of our type
386 and the target type might differ). */
387 /* FALLTHROUGH */
388
389 case TYPE_CODE_INT:
390 format = format ? format : output_format;
391 if (format)
392 {
393 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
394 }
395 else
396 {
397 val_print_type_code_int (type, valaddr + embedded_offset, stream);
398 }
399 break;
400
401 case TYPE_CODE_CHAR:
402 format = format ? format : output_format;
403 if (format)
404 {
405 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
406 }
407 else
408 {
409 val = unpack_long (type, valaddr + embedded_offset);
410 if (TYPE_UNSIGNED (type))
411 fprintf_filtered (stream, "%u", (unsigned int) val);
412 else
413 fprintf_filtered (stream, "%d", (int) val);
414 fputs_filtered (" ", stream);
415 LA_PRINT_CHAR ((unsigned char) val, stream);
416 }
417 break;
418
419 case TYPE_CODE_FLT:
420 if (format)
421 {
422 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
423 }
424 else
425 {
426 print_floating (valaddr + embedded_offset, type, stream);
427 }
428 break;
429
430 case TYPE_CODE_BITSTRING:
431 case TYPE_CODE_SET:
432 elttype = TYPE_INDEX_TYPE (type);
433 CHECK_TYPEDEF (elttype);
74a9bb82 434 if (TYPE_STUB (elttype))
373a8247
PM
435 {
436 fprintf_filtered (stream, "<incomplete type>");
437 gdb_flush (stream);
438 break;
439 }
440 else
441 {
442 struct type *range = elttype;
443 LONGEST low_bound, high_bound;
444 int i;
445 int is_bitstring = TYPE_CODE (type) == TYPE_CODE_BITSTRING;
446 int need_comma = 0;
447
448 if (is_bitstring)
449 fputs_filtered ("B'", stream);
450 else
451 fputs_filtered ("[", stream);
452
453 i = get_discrete_bounds (range, &low_bound, &high_bound);
454 maybe_bad_bstring:
455 if (i < 0)
456 {
457 fputs_filtered ("<error value>", stream);
458 goto done;
459 }
460
461 for (i = low_bound; i <= high_bound; i++)
462 {
463 int element = value_bit_index (type, valaddr + embedded_offset, i);
464 if (element < 0)
465 {
466 i = element;
467 goto maybe_bad_bstring;
468 }
469 if (is_bitstring)
470 fprintf_filtered (stream, "%d", element);
471 else if (element)
472 {
473 if (need_comma)
474 fputs_filtered (", ", stream);
475 print_type_scalar (range, i, stream);
476 need_comma = 1;
477
478 if (i + 1 <= high_bound && value_bit_index (type, valaddr + embedded_offset, ++i))
479 {
480 int j = i;
481 fputs_filtered ("..", stream);
482 while (i + 1 <= high_bound
483 && value_bit_index (type, valaddr + embedded_offset, ++i))
484 j = i;
485 print_type_scalar (range, j, stream);
486 }
487 }
488 }
489 done:
490 if (is_bitstring)
491 fputs_filtered ("'", stream);
492 else
493 fputs_filtered ("]", stream);
494 }
495 break;
496
497 case TYPE_CODE_VOID:
498 fprintf_filtered (stream, "void");
499 break;
500
501 case TYPE_CODE_ERROR:
502 fprintf_filtered (stream, "<error type>");
503 break;
504
505 case TYPE_CODE_UNDEF:
506 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
507 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
508 and no complete type for struct foo in that file. */
509 fprintf_filtered (stream, "<incomplete type>");
510 break;
511
512 default:
8a3fe4f8 513 error (_("Invalid pascal type code %d in symbol table."), TYPE_CODE (type));
373a8247
PM
514 }
515 gdb_flush (stream);
516 return (0);
517}
518\f
519int
6943961c 520pascal_value_print (struct value *val, struct ui_file *stream, int format,
fba45db2 521 enum val_prettyprint pretty)
373a8247 522{
df407dfe 523 struct type *type = value_type (val);
373a8247
PM
524
525 /* If it is a pointer, indicate what it points to.
526
527 Print type also if it is a reference.
528
529 Object pascal: if it is a member pointer, we will take care
530 of that when we print it. */
b20a3440
PM
531 if (TYPE_CODE (type) == TYPE_CODE_PTR
532 || TYPE_CODE (type) == TYPE_CODE_REF)
373a8247
PM
533 {
534 /* Hack: remove (char *) for char strings. Their
535 type is indicated by the quoted string anyway. */
b20a3440
PM
536 if (TYPE_CODE (type) == TYPE_CODE_PTR
537 && TYPE_NAME (type) == NULL
538 && TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL
6314a349 539 && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
373a8247
PM
540 {
541 /* Print nothing */
542 }
543 else
544 {
545 fprintf_filtered (stream, "(");
546 type_print (type, "", stream, -1);
547 fprintf_filtered (stream, ") ");
548 }
549 }
806048c6 550 return common_val_print (val, stream, format, 1, 0, pretty);
373a8247
PM
551}
552
553
554/******************************************************************************
555 Inserted from cp-valprint
556******************************************************************************/
557
558extern int vtblprint; /* Controls printing of vtbl's */
559extern int objectprint; /* Controls looking up an object's derived type
560 using what we find in its vtables. */
561static int pascal_static_field_print; /* Controls printing of static fields. */
920d2a44
AC
562static void
563show_pascal_static_field_print (struct ui_file *file, int from_tty,
564 struct cmd_list_element *c, const char *value)
565{
566 fprintf_filtered (file, _("Printing of pascal static members is %s.\n"),
567 value);
568}
373a8247
PM
569
570static struct obstack dont_print_vb_obstack;
571static struct obstack dont_print_statmem_obstack;
572
806048c6 573static void pascal_object_print_static_field (struct value *,
6943961c
AC
574 struct ui_file *, int, int,
575 enum val_prettyprint);
373a8247 576
fc1a4b47 577static void pascal_object_print_value (struct type *, const gdb_byte *,
a2bd3dcd
AC
578 CORE_ADDR, struct ui_file *,
579 int, int, enum val_prettyprint,
580 struct type **);
373a8247 581
373a8247
PM
582/* It was changed to this after 2.4.5. */
583const char pascal_vtbl_ptr_name[] =
584{'_', '_', 'v', 't', 'b', 'l', '_', 'p', 't', 'r', '_', 't', 'y', 'p', 'e', 0};
585
586/* Return truth value for assertion that TYPE is of the type
587 "pointer to virtual function". */
588
589int
fba45db2 590pascal_object_is_vtbl_ptr_type (struct type *type)
373a8247
PM
591{
592 char *typename = type_name_no_tag (type);
593
594 return (typename != NULL
6314a349 595 && strcmp (typename, pascal_vtbl_ptr_name) == 0);
373a8247
PM
596}
597
598/* Return truth value for the assertion that TYPE is of the type
599 "pointer to virtual function table". */
600
601int
fba45db2 602pascal_object_is_vtbl_member (struct type *type)
373a8247
PM
603{
604 if (TYPE_CODE (type) == TYPE_CODE_PTR)
605 {
606 type = TYPE_TARGET_TYPE (type);
607 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
608 {
609 type = TYPE_TARGET_TYPE (type);
610 if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* if not using thunks */
611 || TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
612 {
613 /* Virtual functions tables are full of pointers
614 to virtual functions. */
615 return pascal_object_is_vtbl_ptr_type (type);
616 }
617 }
618 }
619 return 0;
620}
621
a2bd3dcd
AC
622/* Mutually recursive subroutines of pascal_object_print_value and
623 c_val_print to print out a structure's fields:
624 pascal_object_print_value_fields and pascal_object_print_value.
373a8247
PM
625
626 TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and PRETTY have the
627 same meanings as in pascal_object_print_value and c_val_print.
628
629 DONT_PRINT is an array of baseclass types that we
630 should not print, or zero if called from top level. */
631
632void
fc1a4b47 633pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
fba45db2
KB
634 CORE_ADDR address, struct ui_file *stream,
635 int format, int recurse,
636 enum val_prettyprint pretty,
637 struct type **dont_print_vb,
638 int dont_print_statmem)
373a8247
PM
639{
640 int i, len, n_baseclasses;
373a8247
PM
641 char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
642
643 CHECK_TYPEDEF (type);
644
645 fprintf_filtered (stream, "{");
646 len = TYPE_NFIELDS (type);
647 n_baseclasses = TYPE_N_BASECLASSES (type);
648
649 /* Print out baseclasses such that we don't print
650 duplicates of virtual baseclasses. */
651 if (n_baseclasses > 0)
652 pascal_object_print_value (type, valaddr, address, stream,
653 format, recurse + 1, pretty, dont_print_vb);
654
655 if (!len && n_baseclasses == 1)
656 fprintf_filtered (stream, "<No data fields>");
657 else
658 {
c1b6e682 659 struct obstack tmp_obstack = dont_print_statmem_obstack;
373a8247
PM
660 int fields_seen = 0;
661
662 if (dont_print_statmem == 0)
663 {
664 /* If we're at top level, carve out a completely fresh
665 chunk of the obstack and use that until this particular
666 invocation returns. */
373a8247
PM
667 obstack_finish (&dont_print_statmem_obstack);
668 }
669
670 for (i = n_baseclasses; i < len; i++)
671 {
672 /* If requested, skip printing of static fields. */
673 if (!pascal_static_field_print && TYPE_FIELD_STATIC (type, i))
674 continue;
675 if (fields_seen)
676 fprintf_filtered (stream, ", ");
677 else if (n_baseclasses > 0)
678 {
679 if (pretty)
680 {
681 fprintf_filtered (stream, "\n");
682 print_spaces_filtered (2 + 2 * recurse, stream);
683 fputs_filtered ("members of ", stream);
684 fputs_filtered (type_name_no_tag (type), stream);
685 fputs_filtered (": ", stream);
686 }
687 }
688 fields_seen = 1;
689
690 if (pretty)
691 {
692 fprintf_filtered (stream, "\n");
693 print_spaces_filtered (2 + 2 * recurse, stream);
694 }
695 else
696 {
697 wrap_here (n_spaces (2 + 2 * recurse));
698 }
699 if (inspect_it)
700 {
701 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
702 fputs_filtered ("\"( ptr \"", stream);
703 else
704 fputs_filtered ("\"( nodef \"", stream);
705 if (TYPE_FIELD_STATIC (type, i))
706 fputs_filtered ("static ", stream);
707 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
708 language_cplus,
709 DMGL_PARAMS | DMGL_ANSI);
710 fputs_filtered ("\" \"", stream);
711 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
712 language_cplus,
713 DMGL_PARAMS | DMGL_ANSI);
714 fputs_filtered ("\") \"", stream);
715 }
716 else
717 {
718 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
719
720 if (TYPE_FIELD_STATIC (type, i))
721 fputs_filtered ("static ", stream);
722 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
723 language_cplus,
724 DMGL_PARAMS | DMGL_ANSI);
725 annotate_field_name_end ();
726 fputs_filtered (" = ", stream);
727 annotate_field_value ();
728 }
729
730 if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
731 {
6943961c 732 struct value *v;
373a8247
PM
733
734 /* Bitfields require special handling, especially due to byte
735 order problems. */
736 if (TYPE_FIELD_IGNORE (type, i))
737 {
738 fputs_filtered ("<optimized out or zero length>", stream);
739 }
740 else
741 {
742 v = value_from_longest (TYPE_FIELD_TYPE (type, i),
743 unpack_field_as_long (type, valaddr, i));
744
806048c6 745 common_val_print (v, stream, format, 0, recurse + 1, pretty);
373a8247
PM
746 }
747 }
748 else
749 {
750 if (TYPE_FIELD_IGNORE (type, i))
751 {
752 fputs_filtered ("<optimized out or zero length>", stream);
753 }
754 else if (TYPE_FIELD_STATIC (type, i))
755 {
6943961c
AC
756 /* struct value *v = value_static_field (type, i); v4.17 specific */
757 struct value *v;
373a8247
PM
758 v = value_from_longest (TYPE_FIELD_TYPE (type, i),
759 unpack_field_as_long (type, valaddr, i));
760
761 if (v == NULL)
762 fputs_filtered ("<optimized out>", stream);
763 else
806048c6
DJ
764 pascal_object_print_static_field (v, stream, format,
765 recurse + 1, pretty);
373a8247
PM
766 }
767 else
768 {
769 /* val_print (TYPE_FIELD_TYPE (type, i),
770 valaddr + TYPE_FIELD_BITPOS (type, i) / 8,
771 address + TYPE_FIELD_BITPOS (type, i) / 8, 0,
772 stream, format, 0, recurse + 1, pretty); */
773 val_print (TYPE_FIELD_TYPE (type, i),
774 valaddr, TYPE_FIELD_BITPOS (type, i) / 8,
775 address + TYPE_FIELD_BITPOS (type, i) / 8,
776 stream, format, 0, recurse + 1, pretty);
777 }
778 }
779 annotate_field_end ();
780 }
781
782 if (dont_print_statmem == 0)
783 {
784 /* Free the space used to deal with the printing
785 of the members from top level. */
786 obstack_free (&dont_print_statmem_obstack, last_dont_print);
787 dont_print_statmem_obstack = tmp_obstack;
788 }
789
790 if (pretty)
791 {
792 fprintf_filtered (stream, "\n");
793 print_spaces_filtered (2 * recurse, stream);
794 }
795 }
796 fprintf_filtered (stream, "}");
797}
798
799/* Special val_print routine to avoid printing multiple copies of virtual
800 baseclasses. */
801
7080f20f 802static void
fc1a4b47 803pascal_object_print_value (struct type *type, const gdb_byte *valaddr,
a2bd3dcd
AC
804 CORE_ADDR address, struct ui_file *stream,
805 int format, int recurse,
fba45db2
KB
806 enum val_prettyprint pretty,
807 struct type **dont_print_vb)
373a8247 808{
373a8247
PM
809 struct type **last_dont_print
810 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
c1b6e682 811 struct obstack tmp_obstack = dont_print_vb_obstack;
373a8247
PM
812 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
813
814 if (dont_print_vb == 0)
815 {
816 /* If we're at top level, carve out a completely fresh
817 chunk of the obstack and use that until this particular
818 invocation returns. */
373a8247
PM
819 /* Bump up the high-water mark. Now alpha is omega. */
820 obstack_finish (&dont_print_vb_obstack);
821 }
822
823 for (i = 0; i < n_baseclasses; i++)
824 {
825 int boffset;
826 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
4a52dc15 827 char *basename = type_name_no_tag (baseclass);
fc1a4b47 828 const gdb_byte *base_valaddr;
373a8247
PM
829
830 if (BASETYPE_VIA_VIRTUAL (type, i))
831 {
832 struct type **first_dont_print
833 = (struct type **) obstack_base (&dont_print_vb_obstack);
834
835 int j = (struct type **) obstack_next_free (&dont_print_vb_obstack)
836 - first_dont_print;
837
838 while (--j >= 0)
839 if (baseclass == first_dont_print[j])
840 goto flush_it;
841
842 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
843 }
844
845 boffset = baseclass_offset (type, i, valaddr, address);
846
847 if (pretty)
848 {
849 fprintf_filtered (stream, "\n");
850 print_spaces_filtered (2 * recurse, stream);
851 }
852 fputs_filtered ("<", stream);
853 /* Not sure what the best notation is in the case where there is no
854 baseclass name. */
855
856 fputs_filtered (basename ? basename : "", stream);
857 fputs_filtered ("> = ", stream);
858
859 /* The virtual base class pointer might have been clobbered by the
860 user program. Make sure that it still points to a valid memory
861 location. */
862
863 if (boffset != -1 && (boffset < 0 || boffset >= TYPE_LENGTH (type)))
864 {
34c0bd93 865 /* FIXME (alloc): not safe is baseclass is really really big. */
fc1a4b47 866 gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
a2bd3dcd
AC
867 base_valaddr = buf;
868 if (target_read_memory (address + boffset, buf,
373a8247
PM
869 TYPE_LENGTH (baseclass)) != 0)
870 boffset = -1;
871 }
872 else
873 base_valaddr = valaddr + boffset;
874
875 if (boffset == -1)
876 fprintf_filtered (stream, "<invalid address>");
877 else
878 pascal_object_print_value_fields (baseclass, base_valaddr, address + boffset,
879 stream, format, recurse, pretty,
880 (struct type **) obstack_base (&dont_print_vb_obstack),
881 0);
882 fputs_filtered (", ", stream);
883
884 flush_it:
885 ;
886 }
887
888 if (dont_print_vb == 0)
889 {
890 /* Free the space used to deal with the printing
891 of this type from top level. */
892 obstack_free (&dont_print_vb_obstack, last_dont_print);
893 /* Reset watermark so that we can continue protecting
894 ourselves from whatever we were protecting ourselves. */
895 dont_print_vb_obstack = tmp_obstack;
896 }
897}
898
899/* Print value of a static member.
900 To avoid infinite recursion when printing a class that contains
901 a static instance of the class, we keep the addresses of all printed
902 static member classes in an obstack and refuse to print them more
903 than once.
904
806048c6 905 VAL contains the value to print, STREAM, RECURSE, and PRETTY
373a8247
PM
906 have the same meanings as in c_val_print. */
907
908static void
806048c6 909pascal_object_print_static_field (struct value *val,
fba45db2
KB
910 struct ui_file *stream, int format,
911 int recurse, enum val_prettyprint pretty)
373a8247 912{
806048c6
DJ
913 struct type *type = value_type (val);
914
373a8247
PM
915 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
916 {
917 CORE_ADDR *first_dont_print;
918 int i;
919
920 first_dont_print
921 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
922 i = (CORE_ADDR *) obstack_next_free (&dont_print_statmem_obstack)
923 - first_dont_print;
924
925 while (--i >= 0)
926 {
927 if (VALUE_ADDRESS (val) == first_dont_print[i])
928 {
929 fputs_filtered ("<same as static member of an already seen type>",
930 stream);
931 return;
932 }
933 }
934
935 obstack_grow (&dont_print_statmem_obstack, (char *) &VALUE_ADDRESS (val),
936 sizeof (CORE_ADDR));
937
938 CHECK_TYPEDEF (type);
0fd88904 939 pascal_object_print_value_fields (type, value_contents (val), VALUE_ADDRESS (val),
373a8247
PM
940 stream, format, recurse, pretty, NULL, 1);
941 return;
942 }
806048c6 943 common_val_print (val, stream, format, 0, recurse, pretty);
373a8247
PM
944}
945
b9362cc7 946extern initialize_file_ftype _initialize_pascal_valprint; /* -Wmissing-prototypes */
373a8247
PM
947
948void
fba45db2 949_initialize_pascal_valprint (void)
373a8247 950{
5bf193a2
AC
951 add_setshow_boolean_cmd ("pascal_static-members", class_support,
952 &pascal_static_field_print, _("\
953Set printing of pascal static members."), _("\
954Show printing of pascal static members."), NULL,
955 NULL,
920d2a44 956 show_pascal_static_field_print,
5bf193a2 957 &setprintlist, &showprintlist);
373a8247
PM
958 /* Turn on printing of static fields. */
959 pascal_static_field_print = 1;
960
961}
This page took 0.623171 seconds and 4 git commands to generate.