diff options
-rw-r--r-- | gdb/ChangeLog | 15 | ||||
-rw-r--r-- | gdb/dwarf2/read.c | 4 | ||||
-rw-r--r-- | gdb/gdbtypes.c | 16 | ||||
-rw-r--r-- | gdb/gdbtypes.h | 29 |
4 files changed, 48 insertions, 16 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3cf4582..5e34c7e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,20 @@ 2020-11-24 Joel Brobecker <brobecker@adacore.com> + * gdbtypes.h (struct type) <fixed_point_info, set_fixed_point_info>: + 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 <brobecker@adacore.com> + * gmp-utils.h (gdb_mpz::read): Change buf and len parameters into one single gdb::array_view parameter. (gdb_mpz::write): Likewise. diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index f879753..601a571 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 3879eeb..f0d9c24 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<fixed_point_type_storage> /* See gdbtypes.h. */ -fixed_point_type_info * +void allocate_fixed_point_type_info (struct type *type) { std::unique_ptr<fixed_point_type_info> 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 2b6f599f..c9d2343 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 |