Enable async mode in the target in attach_cmd.
[binutils-gdb.git] / gdb / p-valprint.c
index 8f785b71ea43333308702fd45530736a1c3b6b91..8334ab9fe8443f1a2c7f18e69417ec5e8f0949e4 100644 (file)
@@ -1,6 +1,6 @@
 /* Support for printing Pascal values for GDB, the GNU debugger.
 
-   Copyright (C) 2000-2020 Free Software Foundation, Inc.
+   Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,7 +20,7 @@
 /* This file is derived from c-valprint.c */
 
 #include "defs.h"
-#include "gdb_obstack.h"
+#include "gdbsupport/gdb_obstack.h"
 #include "symtab.h"
 #include "gdbtypes.h"
 #include "expression.h"
@@ -64,13 +64,13 @@ static const struct generic_val_print_decorations p_decorations =
 /* See p-lang.h.  */
 
 void
-pascal_value_print_inner (struct value *val, struct ui_file *stream,
-                         int recurse,
-                         const struct value_print_options *options)
+pascal_language::value_print_inner (struct value *val,
+                                   struct ui_file *stream, int recurse,
+                                   const struct value_print_options *options) const
 
 {
   struct type *type = check_typedef (value_type (val));
-  struct gdbarch *gdbarch = get_type_arch (type);
+  struct gdbarch *gdbarch = type->arch ();
   enum bfd_endian byte_order = type_byte_order (type);
   unsigned int i = 0;  /* Number of characters printed */
   unsigned len;
@@ -80,7 +80,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream,
   struct type *char_type;
   CORE_ADDR addr;
   int want_space = 0;
-  const gdb_byte *valaddr = value_contents_for_printing (val);
+  const gdb_byte *valaddr = value_contents_for_printing (val).data ();
 
   switch (type->code ())
     {
@@ -116,8 +116,8 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream,
                    len = temp_len;
                  }
 
-               LA_PRINT_STRING (stream, TYPE_TARGET_TYPE (type),
-                                valaddr, len, NULL, 0, options);
+               printstr (stream, TYPE_TARGET_TYPE (type), valaddr, len,
+                         NULL, 0, options);
                i = len;
              }
            else
@@ -200,8 +200,8 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream,
         as GDB does not recognize stabs pascal strings
         Pascal strings are mapped to records
         with lowercase names PM.  */
-      if (is_pascal_string_type (elttype, &length_pos, &length_size,
-                                &string_pos, &char_type, NULL)
+      if (pascal_is_string_type (elttype, &length_pos, &length_size,
+                                &string_pos, &char_type, NULL) > 0
          && addr != 0)
        {
          ULONGEST string_length;
@@ -255,7 +255,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream,
 
              if (wsym)
                {
-                 wtype = SYMBOL_TYPE (wsym);
+                 wtype = wsym->type ();
                }
              else
                {
@@ -306,20 +306,20 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream,
          print_address_demangle
            (options, gdbarch,
             extract_unsigned_integer
-              (valaddr + TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8,
+              (valaddr + type->field (VTBL_FNADDR_OFFSET).loc_bitpos () / 8,
                TYPE_LENGTH (type->field (VTBL_FNADDR_OFFSET).type ()),
                byte_order),
             stream, demangle);
        }
       else
        {
-         if (is_pascal_string_type (type, &length_pos, &length_size,
-                                    &string_pos, &char_type, NULL))
+         if (pascal_is_string_type (type, &length_pos, &length_size,
+                                    &string_pos, &char_type, NULL) > 0)
            {
              len = extract_unsigned_integer (valaddr + length_pos,
                                              length_size, byte_order);
-             LA_PRINT_STRING (stream, char_type, valaddr + string_pos,
-                              len, NULL, 0, options);
+             printstr (stream, char_type, valaddr + string_pos, len,
+                       NULL, 0, options);
            }
          else
            pascal_object_print_value_fields (val, stream, recurse,
@@ -402,8 +402,8 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream,
 
 \f
 void
-pascal_value_print (struct value *val, struct ui_file *stream,
-                   const struct value_print_options *options)
+pascal_language::value_print (struct value *val, struct ui_file *stream,
+                             const struct value_print_options *options) const
 {
   struct type *type = value_type (val);
   struct value_print_options opts = *options;
@@ -499,9 +499,7 @@ pascal_object_is_vtbl_member (struct type *type)
   return 0;
 }
 
-/* Mutually recursive subroutines of pascal_object_print_value and
-   pascal_value_print to print out a structure's fields:
-   pascal_object_print_value_fields and pascal_object_print_value.
+/* Helper function for print pascal objects.
 
    VAL, STREAM, RECURSE, and OPTIONS have the same meanings as in
    pascal_object_print_value and c_value_print.
@@ -538,7 +536,7 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream,
     {
       struct obstack tmp_obstack = dont_print_statmem_obstack;
       int fields_seen = 0;
-      const gdb_byte *valaddr = value_contents_for_printing (val);
+      const gdb_byte *valaddr = value_contents_for_printing (val).data ();
 
       if (dont_print_statmem == 0)
        {
@@ -576,7 +574,7 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream,
            }
          else
            {
-             wrap_here (n_spaces (2 + 2 * recurse));
+             stream->wrap_here (2 + 2 * recurse);
            }
 
          annotate_field_begin (type->field (i).type ());
@@ -585,12 +583,12 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream,
            {
              fputs_filtered ("static ", stream);
              fprintf_symbol_filtered (stream,
-                                      TYPE_FIELD_NAME (type, i),
+                                      type->field (i).name (),
                                       current_language->la_language,
                                       DMGL_PARAMS | DMGL_ANSI);
            }
          else
-           fputs_styled (TYPE_FIELD_NAME (type, i),
+           fputs_styled (type->field (i).name (),
                          variable_name_style.style (), stream);
          annotate_field_name_end ();
          fputs_filtered (" = ", stream);
@@ -608,11 +606,9 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream,
                  fputs_styled ("<optimized out or zero length>",
                                metadata_style.style (), stream);
                }
-             else if (value_bits_synthetic_pointer (val,
-                                                    TYPE_FIELD_BITPOS (type,
-                                                                       i),
-                                                    TYPE_FIELD_BITSIZE (type,
-                                                                        i)))
+             else if (value_bits_synthetic_pointer
+                        (val, type->field (i).loc_bitpos (),
+                         TYPE_FIELD_BITSIZE (type, i)))
                {
                  fputs_styled (_("<synthetic pointer>"),
                                metadata_style.style (), stream);