/* 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.
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. */
/* 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;
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
/* Create a new typedef-lookup hash table. */
typedef_hash_table ();
- ~typedef_hash_table ();
-
/* Copy a typedef hash. */
typedef_hash_table (const typedef_hash_table &);
/* 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;
void print_type_scalar (struct type * type, LONGEST, struct ui_file *);
+/* 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 *);