From 46c04ea32f7f259432a68b002a13cdea86f9f902 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 13 Mar 2023 11:09:08 -0600 Subject: [PATCH] Unify arch_boolean_type and init_boolean_type This unifies arch_boolean_type and init_boolean_type by using a type allocator. Reviewed-By: Simon Marchi --- gdb/ctfread.c | 2 +- gdb/d-lang.c | 2 +- gdb/dwarf2/read.c | 2 +- gdb/f-lang.c | 8 ++++---- gdb/gdbtypes.c | 27 ++++----------------------- gdb/gdbtypes.h | 12 ++++++++---- gdb/go-lang.c | 2 +- gdb/m2-lang.c | 2 +- gdb/opencl-lang.c | 2 +- gdb/rust-lang.c | 2 +- gdb/stabsread.c | 12 ++++++------ 11 files changed, 29 insertions(+), 44 deletions(-) diff --git a/gdb/ctfread.c b/gdb/ctfread.c index 3940a4f8c67..72cd8b7cc5d 100644 --- a/gdb/ctfread.c +++ b/gdb/ctfread.c @@ -568,7 +568,7 @@ read_base_type (struct ctf_context *ccp, ctf_id_t tid) if (ischar) type = init_character_type (alloc, TARGET_CHAR_BIT, !issigned, name); else if (isbool) - type = init_boolean_type (of, gdbarch_int_bit (gdbarch), + type = init_boolean_type (alloc, gdbarch_int_bit (gdbarch), !issigned, name); else { diff --git a/gdb/d-lang.c b/gdb/d-lang.c index 8e5262d170a..a970281800a 100644 --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@ -204,7 +204,7 @@ build_d_types (struct gdbarch *gdbarch) type_allocator alloc (gdbarch); builtin_d_type->builtin_void = builtin_type (gdbarch)->builtin_void; builtin_d_type->builtin_bool - = arch_boolean_type (gdbarch, 8, 1, "bool"); + = init_boolean_type (alloc, 8, 1, "bool"); builtin_d_type->builtin_byte = init_integer_type (alloc, 8, 0, "byte"); builtin_d_type->builtin_ubyte diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index a7871a3f5e4..ba65cf67406 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -15232,7 +15232,7 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu) type = init_pointer_type (objfile, bits, name, type); break; case DW_ATE_boolean: - type = init_boolean_type (objfile, bits, 1, name); + type = init_boolean_type (alloc, bits, 1, name); break; case DW_ATE_complex_float: type = dwarf2_init_complex_target_type (cu, objfile, bits / 2, name, diff --git a/gdb/f-lang.c b/gdb/f-lang.c index cb63c3704c1..482ae68c5fa 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -1733,16 +1733,16 @@ build_fortran_types (struct gdbarch *gdbarch) = alloc.new_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT, "character"); builtin_f_type->builtin_logical_s1 - = arch_boolean_type (gdbarch, TARGET_CHAR_BIT, 1, "logical*1"); + = init_boolean_type (alloc, TARGET_CHAR_BIT, 1, "logical*1"); builtin_f_type->builtin_logical_s2 - = arch_boolean_type (gdbarch, gdbarch_short_bit (gdbarch), 1, "logical*2"); + = init_boolean_type (alloc, gdbarch_short_bit (gdbarch), 1, "logical*2"); builtin_f_type->builtin_logical - = arch_boolean_type (gdbarch, gdbarch_int_bit (gdbarch), 1, "logical*4"); + = init_boolean_type (alloc, gdbarch_int_bit (gdbarch), 1, "logical*4"); builtin_f_type->builtin_logical_s8 - = arch_boolean_type (gdbarch, gdbarch_long_long_bit (gdbarch), 1, + = init_boolean_type (alloc, gdbarch_long_long_bit (gdbarch), 1, "logical*8"); builtin_f_type->builtin_integer_s1 diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 49f88ce6026..cf2862f514c 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -3432,17 +3432,15 @@ init_character_type (type_allocator &alloc, return t; } -/* Allocate a TYPE_CODE_BOOL type structure associated with OBJFILE. - BIT is the type size in bits. If UNSIGNED_P is non-zero, set - the type's TYPE_UNSIGNED flag. NAME is the type name. */ +/* See gdbtypes.h. */ struct type * -init_boolean_type (struct objfile *objfile, +init_boolean_type (type_allocator &alloc, int bit, int unsigned_p, const char *name) { struct type *t; - t = type_allocator (objfile).new_type (TYPE_CODE_BOOL, bit, name); + t = alloc.new_type (TYPE_CODE_BOOL, bit, name); if (unsigned_p) t->set_is_unsigned (true); @@ -5748,23 +5746,6 @@ copy_type (const struct type *type) /* Helper functions to initialize architecture-specific types. */ -/* Allocate a TYPE_CODE_BOOL type structure associated with GDBARCH. - BIT is the type size in bits. If UNSIGNED_P is non-zero, set - the type's TYPE_UNSIGNED flag. NAME is the type name. */ - -struct type * -arch_boolean_type (struct gdbarch *gdbarch, - int bit, int unsigned_p, const char *name) -{ - struct type *t; - - t = type_allocator (gdbarch).new_type (TYPE_CODE_BOOL, bit, name); - if (unsigned_p) - t->set_is_unsigned (true); - - return t; -} - /* Allocate a TYPE_CODE_FLT type structure associated with GDBARCH. BIT is the type size in bits; if BIT equals -1, the size is determined by the floatformat. NAME is the type name. Set the @@ -6103,7 +6084,7 @@ create_gdbtypes_data (struct gdbarch *gdbarch) builtin_type->builtin_string = alloc.new_type (TYPE_CODE_STRING, TARGET_CHAR_BIT, "string"); builtin_type->builtin_bool - = arch_boolean_type (gdbarch, TARGET_CHAR_BIT, 1, "bool"); + = init_boolean_type (alloc, TARGET_CHAR_BIT, 1, "bool"); /* The following three are about decimal floating point types, which are 32-bits, 64-bits and 128-bits respectively. */ diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 20a547703e1..9dcd0e5f784 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -2307,8 +2307,14 @@ extern struct type *init_integer_type (type_allocator &alloc, int bit, extern struct type *init_character_type (type_allocator &alloc, int bit, int unsigned_p, const char *name); -extern struct type *init_boolean_type (struct objfile *, int, int, - const char *); + +/* Allocate a TYPE_CODE_BOOL type structure using ALLOC. BIT is the + type size in bits. If UNSIGNED_P is non-zero, set the type's + TYPE_UNSIGNED flag. NAME is the type name. */ + +extern struct type *init_boolean_type (type_allocator &alloc, int bit, + int unsigned_p, const char *name); + extern struct type *init_float_type (struct objfile *, int, const char *, const struct floatformat **, enum bfd_endian = BFD_ENDIAN_UNKNOWN); @@ -2321,8 +2327,6 @@ extern struct type *init_fixed_point_type (struct objfile *, int, int, const char *); /* Helper functions to construct architecture-owned types. */ -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 *); diff --git a/gdb/go-lang.c b/gdb/go-lang.c index 6d0d43530f8..4b6027da77d 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -488,7 +488,7 @@ build_go_types (struct gdbarch *gdbarch) builtin_go_type->builtin_char = init_character_type (alloc, 8, 1, "char"); builtin_go_type->builtin_bool - = arch_boolean_type (gdbarch, 8, 0, "bool"); + = init_boolean_type (alloc, 8, 0, "bool"); builtin_go_type->builtin_int = init_integer_type (alloc, gdbarch_int_bit (gdbarch), 0, "int"); builtin_go_type->builtin_uint diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index d2fa1a46364..03c57530878 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -294,7 +294,7 @@ build_m2_types (struct gdbarch *gdbarch) builtin_m2_type->builtin_char = init_character_type (alloc, TARGET_CHAR_BIT, 1, "CHAR"); builtin_m2_type->builtin_bool - = arch_boolean_type (gdbarch, gdbarch_int_bit (gdbarch), 1, "BOOLEAN"); + = init_boolean_type (alloc, gdbarch_int_bit (gdbarch), 1, "BOOLEAN"); return builtin_m2_type; } diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index 94f865e5ad5..9a3c6d790fc 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -933,7 +933,7 @@ public: el_type = add (arch_float_type (gdbarch, 64, "double", floatformats_ieee_double)); BUILD_OCL_VTYPES (double, el_type); - add (arch_boolean_type (gdbarch, 8, 1, "bool")); + add (init_boolean_type (alloc, 8, 1, "bool")); add (init_integer_type (alloc, 8, 1, "unsigned char")); add (init_integer_type (alloc, 16, 1, "unsigned short")); add (init_integer_type (alloc, 32, 1, "unsigned int")); diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index be0a7100f56..20292329af2 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -1596,7 +1596,7 @@ rust_language::language_arch_info (struct gdbarch *gdbarch, type_allocator alloc (gdbarch); struct type *bool_type - = add (arch_boolean_type (gdbarch, 8, 1, "bool")); + = add (init_boolean_type (alloc, 8, 1, "bool")); add (init_character_type (alloc, 32, 1, "char")); add (init_integer_type (alloc, 8, 0, "i8")); struct type *u8_type diff --git a/gdb/stabsread.c b/gdb/stabsread.c index 4c7b88f30cd..fc02c98962c 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -2144,7 +2144,7 @@ rs6000_builtin_type (int typenum, struct objfile *objfile) rettype = init_integer_type (alloc, 32, 0, "integer"); break; case 16: - rettype = init_boolean_type (objfile, 32, 1, "boolean"); + rettype = init_boolean_type (alloc, 32, 1, "boolean"); break; case 17: rettype = init_float_type (objfile, 32, "short real", @@ -2161,16 +2161,16 @@ rs6000_builtin_type (int typenum, struct objfile *objfile) rettype = init_character_type (alloc, 8, 1, "character"); break; case 21: - rettype = init_boolean_type (objfile, 8, 1, "logical*1"); + rettype = init_boolean_type (alloc, 8, 1, "logical*1"); break; case 22: - rettype = init_boolean_type (objfile, 16, 1, "logical*2"); + rettype = init_boolean_type (alloc, 16, 1, "logical*2"); break; case 23: - rettype = init_boolean_type (objfile, 32, 1, "logical*4"); + rettype = init_boolean_type (alloc, 32, 1, "logical*4"); break; case 24: - rettype = init_boolean_type (objfile, 32, 1, "logical"); + rettype = init_boolean_type (alloc, 32, 1, "logical"); break; case 25: /* Complex type consisting of two IEEE single precision values. */ @@ -3759,7 +3759,7 @@ read_sun_builtin_type (const char **pp, int typenums[2], struct objfile *objfile } if (boolean_type) - return init_boolean_type (objfile, type_bits, unsigned_type, NULL); + return init_boolean_type (alloc, type_bits, unsigned_type, NULL); else return init_integer_type (alloc, type_bits, unsigned_type, NULL); } -- 2.30.2