From c1e1314d00fda5625f1a87b915fd83a61c253993 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 17 Sep 2020 14:11:38 -0600 Subject: 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 * 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. --- gdb/sparc-tdep.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'gdb/sparc-tdep.c') diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c index e3401fe..e9636cd 100644 --- a/gdb/sparc-tdep.c +++ b/gdb/sparc-tdep.c @@ -1898,35 +1898,32 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) if (tdesc_has_registers (tdesc)) { - struct tdesc_arch_data *tdesc_data = tdesc_data_alloc (); + tdesc_arch_data_up tdesc_data = tdesc_data_alloc (); /* Validate that the descriptor provides the mandatory registers and allocate their numbers. */ - valid_p &= validate_tdesc_registers (tdesc, tdesc_data, + valid_p &= validate_tdesc_registers (tdesc, tdesc_data.get (), "org.gnu.gdb.sparc.cpu", sparc_core_register_names, ARRAY_SIZE (sparc_core_register_names), SPARC_G0_REGNUM); - valid_p &= validate_tdesc_registers (tdesc, tdesc_data, + valid_p &= validate_tdesc_registers (tdesc, tdesc_data.get (), "org.gnu.gdb.sparc.fpu", tdep->fpu_register_names, tdep->fpu_registers_num, SPARC_F0_REGNUM); - valid_p &= validate_tdesc_registers (tdesc, tdesc_data, + valid_p &= validate_tdesc_registers (tdesc, tdesc_data.get (), "org.gnu.gdb.sparc.cp0", tdep->cp0_register_names, tdep->cp0_registers_num, SPARC_F0_REGNUM + tdep->fpu_registers_num); if (!valid_p) - { - tdesc_data_cleanup (tdesc_data); - return NULL; - } + return NULL; /* Target description may have changed. */ - info.tdesc_data = tdesc_data; - tdesc_use_registers (gdbarch, tdesc, tdesc_data); + info.tdesc_data = tdesc_data.get (); + tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data)); } /* If we have register sets, enable the generic core file support. */ -- cgit v1.1