From 2a12c336b9d55189780846324eda98c66d543de7 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Mon, 23 Nov 2020 21:47:40 -0500 Subject: [PATCH] gdbtypes.h: Get rid of the TYPE_FIXED_POINT_INFO macro This is one step further towards the removal of all these macros. gdb/ChangeLog: * gdbtypes.h (struct type) : New methods. (INIT_FIXED_POINT_SPECIFIC): Adjust. (TYPE_FIXED_POINT_INFO): Delete macro. (allocate_fixed_point_type_info): Change return type to void. * gdbtypes.c (copy_type_recursive): Replace the use of TYPE_FIXED_POINT_INFO by a call to the fixed_point_info method. (fixed_point_scaling_factor): Likewise. (allocate_fixed_point_type_info): Change return type to void. Adjust implementation accordingly. * dwarf2/read.c (finish_fixed_point_type): Replace the use of TYPE_FIXED_POINT_INFO by a call to the fixed_point_info method. --- gdb/ChangeLog | 15 +++++++++++++++ gdb/dwarf2/read.c | 4 ++-- gdb/gdbtypes.c | 16 ++++++++-------- gdb/gdbtypes.h | 29 +++++++++++++++++++++++------ 4 files changed, 48 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3cf45821d6d..5e34c7ef440 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,18 @@ +2020-11-24 Joel Brobecker + + * gdbtypes.h (struct type) : + New methods. + (INIT_FIXED_POINT_SPECIFIC): Adjust. + (TYPE_FIXED_POINT_INFO): Delete macro. + (allocate_fixed_point_type_info): Change return type to void. + * gdbtypes.c (copy_type_recursive): Replace the use of + TYPE_FIXED_POINT_INFO by a call to the fixed_point_info method. + (fixed_point_scaling_factor): Likewise. + (allocate_fixed_point_type_info): Change return type to void. + Adjust implementation accordingly. + * dwarf2/read.c (finish_fixed_point_type): Replace the use of + TYPE_FIXED_POINT_INFO by a call to the fixed_point_info method. + 2020-11-24 Joel Brobecker * gmp-utils.h (gdb_mpz::read): Change buf and len parameters diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index f8797537108..601a5719436 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -18162,7 +18162,7 @@ get_dwarf2_unsigned_rational_constant (struct die_info *die, } /* Assuming DIE corresponds to a fixed point type, finish the creation - of the corresponding TYPE by setting its TYPE_FIXED_POINT_INFO. + of the corresponding TYPE by setting its type-specific data. CU is the DIE's CU. */ static void @@ -18232,7 +18232,7 @@ finish_fixed_point_type (struct type *type, struct die_info *die, sect_offset_str (die->sect_off)); } - gdb_mpq &scaling_factor = TYPE_FIXED_POINT_INFO (type)->scaling_factor; + gdb_mpq &scaling_factor = type->fixed_point_info ().scaling_factor; gdb_mpz tmp_z (scale_num); mpz_set (mpq_numref (scaling_factor.val), tmp_z.val); diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 3879eebd894..f0d9c24fa34 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -5503,8 +5503,8 @@ copy_type_recursive (struct objfile *objfile, break; case TYPE_SPECIFIC_FIXED_POINT: INIT_FIXED_POINT_SPECIFIC (new_type); - TYPE_FIXED_POINT_INFO (new_type)->scaling_factor - = TYPE_FIXED_POINT_INFO (type)->scaling_factor; + new_type->fixed_point_info ().scaling_factor + = type->fixed_point_info ().scaling_factor; break; case TYPE_SPECIFIC_INT: TYPE_SPECIFIC_FIELD (new_type) = TYPE_SPECIFIC_INT; @@ -5826,11 +5826,11 @@ static const struct objfile_key /* See gdbtypes.h. */ -fixed_point_type_info * +void allocate_fixed_point_type_info (struct type *type) { std::unique_ptr up (new fixed_point_type_info); - fixed_point_type_info *result; + fixed_point_type_info *info; if (TYPE_OBJFILE_OWNED (type)) { @@ -5838,17 +5838,17 @@ allocate_fixed_point_type_info (struct type *type) = fixed_point_objfile_key.get (TYPE_OBJFILE (type)); if (storage == nullptr) storage = fixed_point_objfile_key.emplace (TYPE_OBJFILE (type)); - result = up.get (); + info = up.get (); storage->push_back (std::move (up)); } else { /* We just leak the memory, because that's what we do generally for non-objfile-attached types. */ - result = up.release (); + info = up.release (); } - return result; + type->set_fixed_point_info (info); } /* See gdbtypes.h. */ @@ -5883,7 +5883,7 @@ fixed_point_scaling_factor (struct type *type) { type = fixed_point_type_base_type (type); - return TYPE_FIXED_POINT_INFO (type)->scaling_factor; + return type->fixed_point_info ().scaling_factor; } diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 2b6f599f4c7..c9d23437cd4 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1194,6 +1194,27 @@ struct type this->main_type->m_flag_endianity_not_default = endianity_is_not_default; } + /* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, return a reference + to this type's fixed_point_info. */ + + struct fixed_point_type_info &fixed_point_info () const + { + gdb_assert (this->code () == TYPE_CODE_FIXED_POINT); + gdb_assert (this->main_type->type_specific.fixed_point_info != nullptr); + + return *this->main_type->type_specific.fixed_point_info; + } + + /* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, set this type's + fixed_point_info to INFO. */ + + void set_fixed_point_info (struct fixed_point_type_info *info) const + { + gdb_assert (this->code () == TYPE_CODE_FIXED_POINT); + + this->main_type->type_specific.fixed_point_info = info; + } + /* * Return the dynamic property of the requested KIND from this type's list of dynamic properties. */ dynamic_prop *dyn_prop (dynamic_prop_node_kind kind) const; @@ -1747,7 +1768,7 @@ extern void allocate_gnat_aux_type (struct type *); handled. */ #define INIT_FIXED_POINT_SPECIFIC(type) \ (TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FIXED_POINT, \ - TYPE_FIXED_POINT_INFO (type) = allocate_fixed_point_type_info (type)) + allocate_fixed_point_type_info (type)) #define TYPE_MAIN_TYPE(thistype) (thistype)->main_type #define TYPE_TARGET_TYPE(thistype) TYPE_MAIN_TYPE(thistype)->target_type @@ -1845,9 +1866,6 @@ extern void set_type_vptr_basetype (struct type *, struct type *); (TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \ : B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (index))) -#define TYPE_FIXED_POINT_INFO(thistype) \ - (TYPE_MAIN_TYPE(thistype)->type_specific.fixed_point_info) - #define FIELD_NAME(thisfld) ((thisfld).name) #define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind) #define FIELD_BITPOS_LVAL(thisfld) ((thisfld).loc.bitpos) @@ -2582,8 +2600,7 @@ extern const gdb_mpq &fixed_point_scaling_factor (struct type *type); /* Allocate a fixed-point type info for TYPE. This should only be called by INIT_FIXED_POINT_SPECIFIC. */ -extern fixed_point_type_info *allocate_fixed_point_type_info - (struct type *type); +extern void allocate_fixed_point_type_info (struct type *type); /* * When the type includes explicit byte ordering, return that. Otherwise, the byte ordering from gdbarch_byte_order for -- 2.30.2