mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
Add some missing arch_..._type helpers
gdbtypes provides a number of helper routines that can be called instead of using arch_type directly to create a type of a particular kind. This patch adds two additional such routines that have been missing so far, to allow creation of TYPE_CODE_DECFLOAT and TYPE_CODE_POINTER types. The patch also changes a number of places to use the new helper routines instead of calling arch_type directly. No functional change intended. gdb/ChangeLog: * gdbtypes.h (arch_decfloat_type): New prototype. (arch_pointer_type): Likewise. * gdbtypes.c (arch_decfloat_type): New function. (arch_pointer_type): Likewise. (gdbtypes_post_init): Use arch_decfloat_type. * avr-tdep.c (avr_gdbarch_init): Use arch_pointer_type. * ft32-tdep.c (ft32_gdbarch_init): Likewise. * m32c-tdep.c (make_types): Likewise. * rl78-tdep.c (rl78_gdbarch_init): Likewise. Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
This commit is contained in:
parent
ae438bc5c0
commit
88dfca6c43
@ -1,3 +1,15 @@
|
||||
2016-09-05 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* gdbtypes.h (arch_decfloat_type): New prototype.
|
||||
(arch_pointer_type): Likewise.
|
||||
* gdbtypes.c (arch_decfloat_type): New function.
|
||||
(arch_pointer_type): Likewise.
|
||||
(gdbtypes_post_init): Use arch_decfloat_type.
|
||||
* avr-tdep.c (avr_gdbarch_init): Use arch_pointer_type.
|
||||
* ft32-tdep.c (ft32_gdbarch_init): Likewise.
|
||||
* m32c-tdep.c (make_types): Likewise.
|
||||
* rl78-tdep.c (rl78_gdbarch_init): Likewise.
|
||||
|
||||
2016-09-05 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* gdbtypes.c (set_type_code): New function.
|
||||
|
@ -1466,9 +1466,8 @@ avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
be defined. */
|
||||
tdep->void_type = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
|
||||
tdep->func_void_type = make_function_type (tdep->void_type, NULL);
|
||||
tdep->pc_type = arch_type (gdbarch, TYPE_CODE_PTR, 4, NULL);
|
||||
TYPE_TARGET_TYPE (tdep->pc_type) = tdep->func_void_type;
|
||||
TYPE_UNSIGNED (tdep->pc_type) = 1;
|
||||
tdep->pc_type = arch_pointer_type (gdbarch, 4 * TARGET_CHAR_BIT, NULL,
|
||||
tdep->func_void_type);
|
||||
|
||||
set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
|
||||
set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
|
||||
|
@ -610,9 +610,8 @@ ft32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
be defined. */
|
||||
void_type = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
|
||||
func_void_type = make_function_type (void_type, NULL);
|
||||
tdep->pc_type = arch_type (gdbarch, TYPE_CODE_PTR, 4, NULL);
|
||||
TYPE_TARGET_TYPE (tdep->pc_type) = func_void_type;
|
||||
TYPE_UNSIGNED (tdep->pc_type) = 1;
|
||||
tdep->pc_type = arch_pointer_type (gdbarch, 4 * TARGET_CHAR_BIT, NULL,
|
||||
func_void_type);
|
||||
TYPE_INSTANCE_FLAGS (tdep->pc_type) |= TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
|
||||
|
||||
set_gdbarch_read_pc (gdbarch, ft32_read_pc);
|
||||
|
@ -4740,6 +4740,18 @@ arch_float_type (struct gdbarch *gdbarch,
|
||||
return t;
|
||||
}
|
||||
|
||||
/* Allocate a TYPE_CODE_DECFLOAT type structure associated with GDBARCH.
|
||||
BIT is the type size in bits. NAME is the type name. */
|
||||
|
||||
struct type *
|
||||
arch_decfloat_type (struct gdbarch *gdbarch, int bit, const char *name)
|
||||
{
|
||||
struct type *t;
|
||||
|
||||
t = arch_type (gdbarch, TYPE_CODE_DECFLOAT, bit / TARGET_CHAR_BIT, name);
|
||||
return t;
|
||||
}
|
||||
|
||||
/* Allocate a TYPE_CODE_COMPLEX type structure associated with GDBARCH.
|
||||
NAME is the type name. TARGET_TYPE is the component float type. */
|
||||
|
||||
@ -4755,6 +4767,23 @@ arch_complex_type (struct gdbarch *gdbarch,
|
||||
return t;
|
||||
}
|
||||
|
||||
/* Allocate a TYPE_CODE_PTR type structure associated with GDBARCH.
|
||||
BIT is the pointer type size in bits. NAME is the type name.
|
||||
TARGET_TYPE is the pointer target type. Always sets the pointer type's
|
||||
TYPE_UNSIGNED flag. */
|
||||
|
||||
struct type *
|
||||
arch_pointer_type (struct gdbarch *gdbarch,
|
||||
int bit, const char *name, struct type *target_type)
|
||||
{
|
||||
struct type *t;
|
||||
|
||||
t = arch_type (gdbarch, TYPE_CODE_PTR, bit / TARGET_CHAR_BIT, name);
|
||||
TYPE_TARGET_TYPE (t) = target_type;
|
||||
TYPE_UNSIGNED (t) = 1;
|
||||
return t;
|
||||
}
|
||||
|
||||
/* Allocate a TYPE_CODE_FLAGS type structure associated with GDBARCH.
|
||||
NAME is the type name. LENGTH is the size of the flag word in bytes. */
|
||||
|
||||
@ -4971,11 +5000,11 @@ gdbtypes_post_init (struct gdbarch *gdbarch)
|
||||
/* The following three are about decimal floating point types, which
|
||||
are 32-bits, 64-bits and 128-bits respectively. */
|
||||
builtin_type->builtin_decfloat
|
||||
= arch_type (gdbarch, TYPE_CODE_DECFLOAT, 32 / 8, "_Decimal32");
|
||||
= arch_decfloat_type (gdbarch, 32, "_Decimal32");
|
||||
builtin_type->builtin_decdouble
|
||||
= arch_type (gdbarch, TYPE_CODE_DECFLOAT, 64 / 8, "_Decimal64");
|
||||
= arch_decfloat_type (gdbarch, 64, "_Decimal64");
|
||||
builtin_type->builtin_declong
|
||||
= arch_type (gdbarch, TYPE_CODE_DECFLOAT, 128 / 8, "_Decimal128");
|
||||
= arch_decfloat_type (gdbarch, 128, "_Decimal128");
|
||||
|
||||
/* "True" character types. */
|
||||
builtin_type->builtin_true_char
|
||||
|
@ -1686,8 +1686,11 @@ extern struct type *arch_boolean_type (struct gdbarch *, int, int,
|
||||
const char *);
|
||||
extern struct type *arch_float_type (struct gdbarch *, int, const char *,
|
||||
const struct floatformat **);
|
||||
extern struct type *arch_decfloat_type (struct gdbarch *, int, const char *);
|
||||
extern struct type *arch_complex_type (struct gdbarch *, const char *,
|
||||
struct type *);
|
||||
extern struct type *arch_pointer_type (struct gdbarch *, int, const char *,
|
||||
struct type *);
|
||||
|
||||
/* Helper functions to construct a struct or record type. An
|
||||
initially empty type is created using arch_composite_type().
|
||||
|
@ -192,27 +192,18 @@ make_types (struct gdbarch *arch)
|
||||
this is called, so we avoid using them. */
|
||||
tdep->voyd = arch_type (arch, TYPE_CODE_VOID, 1, "void");
|
||||
tdep->ptr_voyd
|
||||
= arch_type (arch, TYPE_CODE_PTR, gdbarch_ptr_bit (arch) / TARGET_CHAR_BIT,
|
||||
NULL);
|
||||
TYPE_TARGET_TYPE (tdep->ptr_voyd) = tdep->voyd;
|
||||
TYPE_UNSIGNED (tdep->ptr_voyd) = 1;
|
||||
= arch_pointer_type (arch, gdbarch_ptr_bit (arch), NULL, tdep->voyd);
|
||||
tdep->func_voyd = lookup_function_type (tdep->voyd);
|
||||
|
||||
xsnprintf (type_name, sizeof (type_name), "%s_data_addr_t",
|
||||
gdbarch_bfd_arch_info (arch)->printable_name);
|
||||
tdep->data_addr_reg_type
|
||||
= arch_type (arch, TYPE_CODE_PTR, data_addr_reg_bits / TARGET_CHAR_BIT,
|
||||
xstrdup (type_name));
|
||||
TYPE_TARGET_TYPE (tdep->data_addr_reg_type) = tdep->voyd;
|
||||
TYPE_UNSIGNED (tdep->data_addr_reg_type) = 1;
|
||||
= arch_pointer_type (arch, data_addr_reg_bits, type_name, tdep->voyd);
|
||||
|
||||
xsnprintf (type_name, sizeof (type_name), "%s_code_addr_t",
|
||||
gdbarch_bfd_arch_info (arch)->printable_name);
|
||||
tdep->code_addr_reg_type
|
||||
= arch_type (arch, TYPE_CODE_PTR, code_addr_reg_bits / TARGET_CHAR_BIT,
|
||||
xstrdup (type_name));
|
||||
TYPE_TARGET_TYPE (tdep->code_addr_reg_type) = tdep->func_voyd;
|
||||
TYPE_UNSIGNED (tdep->code_addr_reg_type) = 1;
|
||||
= arch_pointer_type (arch, code_addr_reg_bits, type_name, tdep->func_voyd);
|
||||
|
||||
tdep->uint8 = arch_integer_type (arch, 8, 1, "uint8_t");
|
||||
tdep->uint16 = arch_integer_type (arch, 16, 1, "uint16_t");
|
||||
|
@ -1410,16 +1410,9 @@ rl78_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
tdep->rl78_int32 = arch_integer_type (gdbarch, 32, 0, "int32_t");
|
||||
|
||||
tdep->rl78_data_pointer
|
||||
= arch_type (gdbarch, TYPE_CODE_PTR, 16 / TARGET_CHAR_BIT,
|
||||
xstrdup ("rl78_data_addr_t"));
|
||||
TYPE_TARGET_TYPE (tdep->rl78_data_pointer) = tdep->rl78_void;
|
||||
TYPE_UNSIGNED (tdep->rl78_data_pointer) = 1;
|
||||
|
||||
= arch_pointer_type (gdbarch, 16, "rl78_data_addr_t", tdep->rl78_void);
|
||||
tdep->rl78_code_pointer
|
||||
= arch_type (gdbarch, TYPE_CODE_PTR, 32 / TARGET_CHAR_BIT,
|
||||
xstrdup ("rl78_code_addr_t"));
|
||||
TYPE_TARGET_TYPE (tdep->rl78_code_pointer) = tdep->rl78_void;
|
||||
TYPE_UNSIGNED (tdep->rl78_code_pointer) = 1;
|
||||
= arch_pointer_type (gdbarch, 32, "rl78_code_addr_t", tdep->rl78_void);
|
||||
|
||||
tdep->rl78_psw_type = arch_flags_type (gdbarch, "builtin_type_rl78_psw", 1);
|
||||
append_flags_type_flag (tdep->rl78_psw_type, 0, "CY");
|
||||
|
Loading…
Reference in New Issue
Block a user