diff options
author | Tom Tromey <tromey@adacore.com> | 2020-09-17 14:11:38 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2020-09-17 14:28:06 -0600 |
commit | c1e1314d00fda5625f1a87b915fd83a61c253993 (patch) | |
tree | 62affcd614124eec0c51db5223b0ea7f797a17d1 /gdb/mips-tdep.c | |
parent | 0363df3db7d3f5edd3a349ab7720eca83f460545 (diff) | |
download | fsf-binutils-gdb-c1e1314d00fda5625f1a87b915fd83a61c253993.zip fsf-binutils-gdb-c1e1314d00fda5625f1a87b915fd83a61c253993.tar.gz fsf-binutils-gdb-c1e1314d00fda5625f1a87b915fd83a61c253993.tar.bz2 |
Change management of tdesc_arch_data
While working on something else, I noticed that tdesc_data_cleanup
took a void* parameter. Looking more into this, I found that
tdesc_use_registers expected a transfer of ownership.
I think it's better to express this sort of thing via the type system,
when possible. This patch changes tdesc_data_alloc to return a unique
pointer, changes tdesc_use_registers to accept an rvalue reference,
and then adapts all the users.
Note that a deleter structure is introduced to avoid having to move
tdesc_arch_data to the header file.
2020-09-17 Tom Tromey <tromey@adacore.com>
* tic6x-tdep.c (tic6x_gdbarch_init): Update.
* target-descriptions.h (struct tdesc_arch_data_deleter): New.
(tdesc_arch_data_up): New typedef.
(tdesc_use_registers, tdesc_data_alloc): Update.
(tdesc_data_cleanup): Don't declare.
* target-descriptions.c (tdesc_data_alloc): Return a
tdesc_arch_data_up.
(tdesc_arch_data_deleter::operator()): Rename from
tdesc_data_cleanup. Change argument type.
(tdesc_use_registers): Change early_data to an rvalue reference.
(tdesc_use_registers): Don't use delete.
* sparc-tdep.c (sparc32_gdbarch_init): Update.
* s390-tdep.c (s390_gdbarch_init): Update.
* rx-tdep.c (rx_gdbarch_init): Update.
* rs6000-tdep.c (rs6000_gdbarch_init): Update.
* riscv-tdep.c (riscv_gdbarch_init): Update.
* or1k-tdep.c (or1k_gdbarch_init): Update.
* nios2-tdep.c (nios2_gdbarch_init): Update.
* nds32-tdep.c (nds32_gdbarch_init): Update.
* mips-tdep.c (mips_gdbarch_init): Update.
* microblaze-tdep.c (microblaze_gdbarch_init): Update.
* m68k-tdep.c (m68k_gdbarch_init): Update.
* i386-tdep.c (i386_gdbarch_init): Update.
* arm-tdep.c (arm_gdbarch_init): Update.
* arc-tdep.c (arc_tdesc_init): Update.
(arc_gdbarch_init): Update.
* aarch64-tdep.c (aarch64_gdbarch_init): Update.
Diffstat (limited to 'gdb/mips-tdep.c')
-rw-r--r-- | gdb/mips-tdep.c | 74 |
1 files changed, 27 insertions, 47 deletions
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 48ee822..b4ed734 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -8047,7 +8047,7 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) enum mips_abi mips_abi, found_abi, wanted_abi; int i, num_regs; enum mips_fpu_type fpu_type; - struct tdesc_arch_data *tdesc_data = NULL; + tdesc_arch_data_up tdesc_data; int elf_fpu_type = Val_GNU_MIPS_ABI_FP_ANY; const char * const *reg_names; struct mips_regnum mips_regnum, *regnum; @@ -8310,73 +8310,58 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) valid_p = 1; for (i = MIPS_ZERO_REGNUM; i <= MIPS_RA_REGNUM; i++) - valid_p &= tdesc_numbered_register (feature, tdesc_data, i, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i, mips_gprs[i]); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), mips_regnum.lo, "lo"); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), mips_regnum.hi, "hi"); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), mips_regnum.pc, "pc"); if (!valid_p) - { - tdesc_data_cleanup (tdesc_data); - return NULL; - } + return NULL; feature = tdesc_find_feature (info.target_desc, "org.gnu.gdb.mips.cp0"); if (feature == NULL) - { - tdesc_data_cleanup (tdesc_data); - return NULL; - } + return NULL; valid_p = 1; - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), mips_regnum.badvaddr, "badvaddr"); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), MIPS_PS_REGNUM, "status"); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), mips_regnum.cause, "cause"); if (!valid_p) - { - tdesc_data_cleanup (tdesc_data); - return NULL; - } + return NULL; /* FIXME drow/2007-05-17: The FPU should be optional. The MIPS backend is not prepared for that, though. */ feature = tdesc_find_feature (info.target_desc, "org.gnu.gdb.mips.fpu"); if (feature == NULL) - { - tdesc_data_cleanup (tdesc_data); - return NULL; - } + return NULL; valid_p = 1; for (i = 0; i < 32; i++) - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i + mips_regnum.fp0, mips_fprs[i]); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), mips_regnum.fp_control_status, "fcsr"); valid_p - &= tdesc_numbered_register (feature, tdesc_data, + &= tdesc_numbered_register (feature, tdesc_data.get (), mips_regnum.fp_implementation_revision, "fir"); if (!valid_p) - { - tdesc_data_cleanup (tdesc_data); - return NULL; - } + return NULL; num_regs = mips_regnum.fp_implementation_revision + 1; @@ -8389,27 +8374,24 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) { i = 0; valid_p = 1; - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), dspacc + i++, "hi1"); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), dspacc + i++, "lo1"); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), dspacc + i++, "hi2"); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), dspacc + i++, "lo2"); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), dspacc + i++, "hi3"); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), dspacc + i++, "lo3"); - valid_p &= tdesc_numbered_register (feature, tdesc_data, + valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), dspctl, "dspctl"); if (!valid_p) - { - tdesc_data_cleanup (tdesc_data); - return NULL; - } + return NULL; mips_regnum.dspacc = dspacc; mips_regnum.dspctl = dspctl; @@ -8445,8 +8427,6 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) if (MIPS_FPU_TYPE (arches->gdbarch) != fpu_type) continue; - if (tdesc_data != NULL) - tdesc_data_cleanup (tdesc_data); return arches->gdbarch; } @@ -8743,7 +8723,7 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) mips_register_g_packet_guesses (gdbarch); /* Hook in OS ABI-specific overrides, if they have been registered. */ - info.tdesc_data = tdesc_data; + info.tdesc_data = tdesc_data.get (); gdbarch_init_osabi (info, gdbarch); /* The hook may have adjusted num_regs, fetch the final value and @@ -8764,10 +8744,10 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) frame_base_append_sniffer (gdbarch, mips_micro_frame_base_sniffer); frame_base_append_sniffer (gdbarch, mips_insn32_frame_base_sniffer); - if (tdesc_data) + if (tdesc_data != nullptr) { set_tdesc_pseudo_register_type (gdbarch, mips_pseudo_register_type); - tdesc_use_registers (gdbarch, info.target_desc, tdesc_data); + tdesc_use_registers (gdbarch, info.target_desc, std::move (tdesc_data)); /* Override the normal target description methods to handle our dual real and pseudo registers. */ |