M68K Linux: Define regset structures.
[deliverable/binutils-gdb.git] / gdb / p-valprint.c
index b8434ed256fcb5685e4d74eb887714eaa2e0eee0..70eb3a8c677cb261f34df56e4caddc49e4c3be6e 100644 (file)
@@ -1,7 +1,6 @@
 /* Support for printing Pascal values for GDB, the GNU debugger.
 
-   Copyright (C) 2000-2001, 2003, 2005-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 2000-2014 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -39,6 +38,7 @@
 #include "cp-abi.h"
 #include "cp-support.h"
 #include "exceptions.h"
+#include "objfiles.h"
 \f
 
 /* Decorations for Pascal.  */
@@ -84,7 +84,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
          len = high_bound - low_bound + 1;
          elttype = check_typedef (TYPE_TARGET_TYPE (type));
          eltlen = TYPE_LENGTH (elttype);
-         if (options->prettyprint_arrays)
+         if (options->prettyformat_arrays)
            {
              print_spaces_filtered (2 + 2 * recurse, stream);
            }
@@ -222,18 +222,18 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
          /* Print vtbl's nicely.  */
          CORE_ADDR vt_address = unpack_pointer (type,
                                                 valaddr + embedded_offset);
-         struct minimal_symbol *msymbol =
+         struct bound_minimal_symbol msymbol =
            lookup_minimal_symbol_by_pc (vt_address);
 
          /* If 'symbol_print' is set, we did the work above.  */
          if (!options->symbol_print
-             && (msymbol != NULL)
-             && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
+             && (msymbol.minsym != NULL)
+             && (vt_address == BMSYMBOL_VALUE_ADDRESS (msymbol)))
            {
              if (want_space)
                fputs_filtered (" ", stream);
              fputs_filtered ("<", stream);
-             fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
+             fputs_filtered (MSYMBOL_PRINT_NAME (msymbol.minsym), stream);
              fputs_filtered (">", stream);
              want_space = 1;
            }
@@ -243,13 +243,14 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
              struct symbol *wsym = (struct symbol *) NULL;
              struct type *wtype;
              struct block *block = (struct block *) NULL;
-             int is_this_fld;
+             struct field_of_this_result is_this_fld;
 
              if (want_space)
                fputs_filtered (" ", stream);
 
-             if (msymbol != NULL)
-               wsym = lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol), block,
+             if (msymbol.minsym != NULL)
+               wsym = lookup_symbol (MSYMBOL_LINKAGE_NAME (msymbol.minsym),
+                                     block,
                                      VAR_DOMAIN, &is_this_fld);
 
              if (wsym)
@@ -263,7 +264,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
              vt_val = value_at (wtype, vt_address);
              common_val_print (vt_val, stream, recurse + 1, options,
                                current_language);
-             if (options->pretty)
+             if (options->prettyformat)
                {
                  fprintf_filtered (stream, "\n");
                  print_spaces_filtered (2 + 2 * recurse, stream);
@@ -334,7 +335,6 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
        }
       break;
 
-    case TYPE_CODE_BITSTRING:
     case TYPE_CODE_SET:
       elttype = TYPE_INDEX_TYPE (type);
       CHECK_TYPEDEF (elttype);
@@ -349,13 +349,9 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
          struct type *range = elttype;
          LONGEST low_bound, high_bound;
          int i;
-         int is_bitstring = TYPE_CODE (type) == TYPE_CODE_BITSTRING;
          int need_comma = 0;
 
-         if (is_bitstring)
-           fputs_filtered ("B'", stream);
-         else
-           fputs_filtered ("[", stream);
+         fputs_filtered ("[", stream);
 
          i = get_discrete_bounds (range, &low_bound, &high_bound);
          if (low_bound == 0 && high_bound == -1 && TYPE_LENGTH (type) > 0)
@@ -383,9 +379,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
                  i = element;
                  goto maybe_bad_bstring;
                }
-             if (is_bitstring)
-               fprintf_filtered (stream, "%d", element);
-             else if (element)
+             if (element)
                {
                  if (need_comma)
                    fputs_filtered (", ", stream);
@@ -409,10 +403,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
                }
            }
        done:
-         if (is_bitstring)
-           fputs_filtered ("'", stream);
-         else
-           fputs_filtered ("]", stream);
+         fputs_filtered ("]", stream);
        }
       break;
 
@@ -585,7 +576,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
            fprintf_filtered (stream, ", ");
          else if (n_baseclasses > 0)
            {
-             if (options->pretty)
+             if (options->prettyformat)
                {
                  fprintf_filtered (stream, "\n");
                  print_spaces_filtered (2 + 2 * recurse, stream);
@@ -596,7 +587,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
            }
          fields_seen = 1;
 
-         if (options->pretty)
+         if (options->prettyformat)
            {
              fprintf_filtered (stream, "\n");
              print_spaces_filtered (2 + 2 * recurse, stream);
@@ -605,36 +596,17 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
            {
              wrap_here (n_spaces (2 + 2 * recurse));
            }
-         if (options->inspect_it)
-           {
-             if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
-               fputs_filtered ("\"( ptr \"", stream);
-             else
-               fputs_filtered ("\"( nodef \"", stream);
-             if (field_is_static (&TYPE_FIELD (type, i)))
-               fputs_filtered ("static ", stream);
-             fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
-                                      language_cplus,
-                                      DMGL_PARAMS | DMGL_ANSI);
-             fputs_filtered ("\" \"", stream);
-             fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
-                                      language_cplus,
-                                      DMGL_PARAMS | DMGL_ANSI);
-             fputs_filtered ("\") \"", stream);
-           }
-         else
-           {
-             annotate_field_begin (TYPE_FIELD_TYPE (type, i));
-
-             if (field_is_static (&TYPE_FIELD (type, i)))
-               fputs_filtered ("static ", stream);
-             fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
-                                      language_cplus,
-                                      DMGL_PARAMS | DMGL_ANSI);
-             annotate_field_name_end ();
-             fputs_filtered (" = ", stream);
-             annotate_field_value ();
-           }
+
+         annotate_field_begin (TYPE_FIELD_TYPE (type, i));
+
+         if (field_is_static (&TYPE_FIELD (type, i)))
+           fputs_filtered ("static ", stream);
+         fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
+                                  language_cplus,
+                                  DMGL_PARAMS | DMGL_ANSI);
+         annotate_field_name_end ();
+         fputs_filtered (" = ", stream);
+         annotate_field_value ();
 
          if (!field_is_static (&TYPE_FIELD (type, i))
              && TYPE_FIELD_PACKED (type, i))
@@ -658,7 +630,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
              else if (!value_bits_valid (val, TYPE_FIELD_BITPOS (type, i),
                                          TYPE_FIELD_BITSIZE (type, i)))
                {
-                 val_print_optimized_out (stream);
+                 val_print_optimized_out (val, stream);
                }
              else
                {
@@ -686,7 +658,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
                  v = value_field_bitfield (type, i, valaddr, offset, val);
 
                  if (v == NULL)
-                   val_print_optimized_out (stream);
+                   val_print_optimized_out (NULL, stream);
                  else
                    pascal_object_print_static_field (v, stream, recurse + 1,
                                                      options);
@@ -717,7 +689,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
          dont_print_statmem_obstack = tmp_obstack;
        }
 
-      if (options->pretty)
+      if (options->prettyformat)
        {
          fprintf_filtered (stream, "\n");
          print_spaces_filtered (2 * recurse, stream);
@@ -797,8 +769,11 @@ pascal_object_print_value (struct type *type, const gdb_byte *valaddr,
 
          if (boffset < 0 || boffset >= TYPE_LENGTH (type))
            {
-             /* FIXME (alloc): not safe is baseclass is really really big. */
-             gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
+             gdb_byte *buf;
+             struct cleanup *back_to;
+
+             buf = xmalloc (TYPE_LENGTH (baseclass));
+             back_to = make_cleanup (xfree, buf);
 
              base_valaddr = buf;
              if (target_read_memory (address + boffset, buf,
@@ -807,12 +782,13 @@ pascal_object_print_value (struct type *type, const gdb_byte *valaddr,
              address = address + boffset;
              thisoffset = 0;
              boffset = 0;
+             do_cleanups (back_to);
            }
          else
            base_valaddr = valaddr;
        }
 
-      if (options->pretty)
+      if (options->prettyformat)
        {
          fprintf_filtered (stream, "\n");
          print_spaces_filtered (2 * recurse, stream);
@@ -869,6 +845,12 @@ pascal_object_print_static_field (struct value *val,
   struct type *type = value_type (val);
   struct value_print_options opts;
 
+  if (value_entirely_optimized_out (val))
+    {
+      val_print_optimized_out (val, stream);
+      return;
+    }
+
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
     {
       CORE_ADDR *first_dont_print, addr;
This page took 0.030513 seconds and 4 git commands to generate.