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