gdb: fix vfork with multiple threads
[deliverable/binutils-gdb.git] / gdb / typeprint.h
index 895eebd50ab35d8a3a44942c10528d2711111bbc..86e781378f9f54406bcf996d3ee546fdc2c53d1b 100644 (file)
@@ -1,5 +1,5 @@
 /* Language independent support for printing types for GDB, the GNU debugger.
-   Copyright (C) 1986-2018 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -26,20 +26,6 @@ struct ui_file;
 struct typedef_hash_table;
 struct ext_lang_type_printers;
 
-struct print_offset_data
-{
-  /* The offset to be applied to bitpos when PRINT_OFFSETS is true.
-     This is needed for when we are printing nested structs and want
-     to make sure that the printed offset for each field carries over
-     the offset of the outter struct.  */
-  unsigned int offset_bitpos = 0;
-
-  /* END_BITPOS is the one-past-the-end bit position of the previous
-     field (where we expect the current field to be if there is no
-     hole).  */
-  unsigned int end_bitpos = 0;
-};
-
 struct type_print_options
 {
   /* True means that no special printing flags should apply.  */
@@ -54,6 +40,9 @@ struct type_print_options
   /* True means to print offsets, a la 'pahole'.  */
   unsigned int print_offsets : 1;
 
+  /* True means to print offsets in hex, otherwise use decimal.  */
+  unsigned int print_in_hex : 1;
+
   /* The number of nested type definitions to print.  -1 == all.  */
   int print_nested_type_limit;
 
@@ -70,6 +59,59 @@ struct type_print_options
   struct ext_lang_type_printers *global_printers;
 };
 
+struct print_offset_data
+{
+  /* Indicate if the offset an d size fields should be printed in decimal
+     (default) or hexadecimal.  */
+  bool print_in_hex  = false;
+
+  /* The offset to be applied to bitpos when PRINT_OFFSETS is true.
+     This is needed for when we are printing nested structs and want
+     to make sure that the printed offset for each field carries over
+     the offset of the outter struct.  */
+  unsigned int offset_bitpos = 0;
+
+  /* END_BITPOS is the one-past-the-end bit position of the previous
+     field (where we expect the current field to be if there is no
+     hole).  */
+  unsigned int end_bitpos = 0;
+
+  /* Print information about field at index FIELD_IDX of the struct type
+     TYPE and update this object.
+
+     If the field is static, it simply prints the correct number of
+     spaces.
+
+     The output is strongly based on pahole(1).  */
+  void update (struct type *type, unsigned int field_idx,
+              struct ui_file *stream);
+
+  /* Call when all fields have been printed.  This will print
+     information about any padding that may exist.  LEVEL is the
+     desired indentation level.  */
+  void finish (struct type *type, int level, struct ui_file *stream);
+
+  /* When printing the offsets of a struct and its fields (i.e.,
+     'ptype /o'; type_print_options::print_offsets), we use this many
+     characters when printing the offset information at the beginning
+     of the line.  This is needed in order to generate the correct
+     amount of whitespaces when no offset info should be printed for a
+     certain field.  */
+  static const int indentation;
+
+  explicit print_offset_data (const struct type_print_options *flags);
+
+private:
+
+  /* Helper function for ptype/o implementation that prints
+     information about a hole, if necessary.  STREAM is where to
+     print.  BITPOS is the bitpos of the current field.  FOR_WHAT is a
+     string describing the purpose of the hole.  */
+
+  void maybe_print_hole (struct ui_file *stream, unsigned int bitpos,
+                        const char *for_what);
+};
+
 extern const struct type_print_options type_print_raw_options;
 
 /* A hash table holding typedef_field objects.  This is more
@@ -83,8 +125,6 @@ public:
   /* Create a new typedef-lookup hash table.  */
   typedef_hash_table ();
 
-  ~typedef_hash_table ();
-
   /* Copy a typedef hash.  */
   typedef_hash_table (const typedef_hash_table &);
 
@@ -111,7 +151,7 @@ private:
 
 
   /* The actual hash table.  */
-  htab_t m_table;
+  htab_up m_table;
 
   /* Storage for typedef_field objects that must be synthesized.  */
   auto_obstack m_storage;
@@ -120,8 +160,10 @@ private:
 
 void print_type_scalar (struct type * type, LONGEST, struct ui_file *);
 
-void c_type_print_varspec_suffix (struct type *, struct ui_file *, int,
-                                 int, int, const struct type_print_options *);
+/* Assuming the TYPE is a fixed point type, print its type description
+   on STREAM.  */
+
+void print_type_fixed_point (struct type *type, struct ui_file *stream);
 
 void c_type_print_args (struct type *, struct ui_file *, int, enum language,
                        const struct type_print_options *);
This page took 0.028066 seconds and 4 git commands to generate.