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