aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/aarch64-tdep.c5
-rw-r--r--gdb/alpha-tdep.c7
-rw-r--r--gdb/arc-tdep.c6
-rw-r--r--gdb/arch-utils.c2
-rw-r--r--gdb/arm-tdep.c6
-rw-r--r--gdb/avr-tdep.c6
-rw-r--r--gdb/bfin-tdep.c6
-rw-r--r--gdb/bpf-tdep.c4
-rw-r--r--gdb/cris-tdep.c6
-rw-r--r--gdb/csky-tdep.c7
-rw-r--r--gdb/frv-tdep.c15
-rw-r--r--gdb/ft32-tdep.c6
-rw-r--r--gdb/gdbarch.c6
-rw-r--r--gdb/gdbarch.h5
-rw-r--r--gdb/hppa-tdep.c7
-rw-r--r--gdb/i386-tdep.c7
-rw-r--r--gdb/ia64-tdep.c7
-rw-r--r--gdb/lm32-tdep.c6
-rw-r--r--gdb/loongarch-tdep.c6
-rw-r--r--gdb/m32c-tdep.c5
-rw-r--r--gdb/m32r-tdep.c6
-rw-r--r--gdb/m68hc11-tdep.c7
-rw-r--r--gdb/m68k-tdep.c7
-rw-r--r--gdb/mep-tdep.c7
-rw-r--r--gdb/microblaze-tdep.c5
-rw-r--r--gdb/mips-tdep.c7
-rw-r--r--gdb/mn10300-tdep.c6
-rw-r--r--gdb/moxie-tdep.c6
-rw-r--r--gdb/msp430-tdep.c7
-rw-r--r--gdb/nds32-tdep.c8
-rw-r--r--gdb/nios2-tdep.c6
-rw-r--r--gdb/or1k-tdep.c7
-rw-r--r--gdb/riscv-tdep.c7
-rw-r--r--gdb/rl78-tdep.c7
-rw-r--r--gdb/rs6000-tdep.c8
-rw-r--r--gdb/rx-tdep.c7
-rw-r--r--gdb/s12z-tdep.c4
-rw-r--r--gdb/s390-tdep.c13
-rw-r--r--gdb/s390-tdep.h2
-rw-r--r--gdb/sh-tdep.c6
-rw-r--r--gdb/sparc-tdep.c6
-rw-r--r--gdb/tic6x-tdep.c6
-rw-r--r--gdb/v850-tdep.c7
-rw-r--r--gdb/xtensa-config.c4
-rw-r--r--gdb/xtensa-tdep.c10
-rw-r--r--gdb/z80-tdep.c6
46 files changed, 148 insertions, 149 deletions
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 6345cc1..b576d3b 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -3703,8 +3703,9 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* AArch64 code is always little-endian. */
info.byte_order_for_code = BFD_ENDIAN_LITTLE;
- aarch64_gdbarch_tdep *tdep = new aarch64_gdbarch_tdep;
- struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new aarch64_gdbarch_tdep));
+ aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
/* This should be low enough for everything. */
tdep->lowest_pc = 0x20;
diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c
index 3a65c8d..eaf32fe 100644
--- a/gdb/alpha-tdep.c
+++ b/gdb/alpha-tdep.c
@@ -1719,15 +1719,14 @@ alpha_software_single_step (struct regcache *regcache)
static struct gdbarch *
alpha_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
-
/* Find a candidate among extant architectures. */
arches = gdbarch_list_lookup_by_info (arches, &info);
if (arches != NULL)
return arches->gdbarch;
- alpha_gdbarch_tdep *tdep = new alpha_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new alpha_gdbarch_tdep));
+ alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
/* Lowest text address. This is used by heuristic_proc_start()
to decide when to stop looking. */
diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c
index c0cdd34..c232eb9 100644
--- a/gdb/arc-tdep.c
+++ b/gdb/arc-tdep.c
@@ -2256,11 +2256,11 @@ arc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* Allocate the ARC-private target-dependent information structure, and the
GDB target-independent information structure. */
- std::unique_ptr<arc_gdbarch_tdep> tdep_holder (new arc_gdbarch_tdep);
- arc_gdbarch_tdep *tdep = tdep_holder.get ();
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new arc_gdbarch_tdep));
+ arc_gdbarch_tdep *tdep = gdbarch_tdep<arc_gdbarch_tdep> (gdbarch);
tdep->jb_pc = -1; /* No longjmp support by default. */
tdep->has_hw_loops = arc_check_for_hw_loops (tdesc, tdesc_data.get ());
- struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep_holder.release ());
/* Data types. */
set_gdbarch_short_bit (gdbarch, 16);
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index e858760..6796812 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -1221,7 +1221,7 @@ gdbarch_tdep_1 (struct gdbarch *gdbarch)
{
if (gdbarch_debug >= 2)
gdb_printf (gdb_stdlog, "gdbarch_tdep_1 called\n");
- return gdbarch->tdep;
+ return gdbarch->tdep.get ();
}
registry<gdbarch> *
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 6eb68cc..51ec523 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -10005,7 +10005,6 @@ arm_get_pc_address_flags (frame_info_ptr frame, CORE_ADDR pc)
static struct gdbarch *
arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
struct gdbarch_list *best_arch;
enum arm_abi_kind arm_abi = arm_abi_global;
enum arm_float_model fp_model = arm_fp_model;
@@ -10549,8 +10548,9 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
if (best_arch != NULL)
return best_arch->gdbarch;
- arm_gdbarch_tdep *tdep = new arm_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new arm_gdbarch_tdep));
+ arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
/* Record additional information about the architecture we are defining.
These are gdbarch discriminators, like the OSABI. */
diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index 35f1836..fa76a3d 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -1426,7 +1426,6 @@ avr_address_class_name_to_type_flags (struct gdbarch *gdbarch,
static struct gdbarch *
avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
struct gdbarch_list *best_arch;
int call_length;
@@ -1466,8 +1465,9 @@ avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
}
/* None found, create a new architecture from the information provided. */
- avr_gdbarch_tdep *tdep = new avr_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new avr_gdbarch_tdep));
+ avr_gdbarch_tdep *tdep = gdbarch_tdep<avr_gdbarch_tdep> (gdbarch);
tdep->call_length = call_length;
diff --git a/gdb/bfin-tdep.c b/gdb/bfin-tdep.c
index c681e6c..4d84407 100644
--- a/gdb/bfin-tdep.c
+++ b/gdb/bfin-tdep.c
@@ -778,7 +778,6 @@ bfin_abi (struct gdbarch *gdbarch)
static struct gdbarch *
bfin_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
enum bfin_abi abi;
abi = BFIN_ABI_FLAT;
@@ -798,8 +797,9 @@ bfin_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return arches->gdbarch;
}
- bfin_gdbarch_tdep *tdep = new bfin_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new bfin_gdbarch_tdep));
+ bfin_gdbarch_tdep *tdep = gdbarch_tdep<bfin_gdbarch_tdep> (gdbarch);
tdep->bfin_abi = abi;
diff --git a/gdb/bpf-tdep.c b/gdb/bpf-tdep.c
index a0fc2de..97a6d75 100644
--- a/gdb/bpf-tdep.c
+++ b/gdb/bpf-tdep.c
@@ -321,8 +321,8 @@ bpf_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return arches->gdbarch;
/* Allocate space for the new architecture. */
- bpf_gdbarch_tdep *tdep = new bpf_gdbarch_tdep;
- struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new bpf_gdbarch_tdep));
/* Information about registers, etc. */
set_gdbarch_num_regs (gdbarch, BPF_NUM_REGS);
diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
index 46f26a4..edf4e74 100644
--- a/gdb/cris-tdep.c
+++ b/gdb/cris-tdep.c
@@ -3912,7 +3912,6 @@ set_cris_dwarf2_cfi (const char *ignore_args, int from_tty,
static struct gdbarch *
cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
unsigned int cris_version;
if (usr_cmd_cris_version_valid)
@@ -3948,9 +3947,10 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
}
/* No matching architecture was found. Create a new one. */
- cris_gdbarch_tdep *tdep = new cris_gdbarch_tdep;
info.byte_order = BFD_ENDIAN_LITTLE;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new cris_gdbarch_tdep));
+ cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
tdep->cris_version = usr_cmd_cris_version;
tdep->cris_mode = usr_cmd_cris_mode;
diff --git a/gdb/csky-tdep.c b/gdb/csky-tdep.c
index 82c5a60..df9520f 100644
--- a/gdb/csky-tdep.c
+++ b/gdb/csky-tdep.c
@@ -2671,7 +2671,6 @@ csky_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
static struct gdbarch *
csky_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
/* Analyze info.abfd. */
unsigned int fpu_abi = 0;
unsigned int vdsp_version = 0;
@@ -2761,8 +2760,10 @@ csky_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* None found, create a new architecture from the information
provided. */
- csky_gdbarch_tdep *tdep = new csky_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new csky_gdbarch_tdep));
+ csky_gdbarch_tdep *tdep = gdbarch_tdep<csky_gdbarch_tdep> (gdbarch);
+
tdep->fpu_abi = fpu_abi;
tdep->vdsp_version = vdsp_version;
tdep->fpu_hardfp = fpu_hardfp;
diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c
index 5e9f203..1a709b9 100644
--- a/gdb/frv-tdep.c
+++ b/gdb/frv-tdep.c
@@ -89,6 +89,8 @@ struct frv_gdbarch_tdep : gdbarch_tdep_base
const char **register_names = nullptr;
};
+using frv_gdbarch_tdep_up = std::unique_ptr<frv_gdbarch_tdep>;
+
/* Return the FR-V ABI associated with GDBARCH. */
enum frv_abi
frv_abi (struct gdbarch *gdbarch)
@@ -130,12 +132,12 @@ frv_fdpic_loadmap_addresses (struct gdbarch *gdbarch, CORE_ADDR *interp_addr,
/* Allocate a new variant structure, and set up default values for all
the fields. */
-static frv_gdbarch_tdep *
-new_variant (void)
+static frv_gdbarch_tdep_up
+new_variant ()
{
int r;
- frv_gdbarch_tdep *var = new frv_gdbarch_tdep;
+ frv_gdbarch_tdep_up var (new frv_gdbarch_tdep);
var->frv_abi = FRV_ABI_EABI;
var->num_gprs = 64;
@@ -1427,7 +1429,6 @@ static const struct frame_base frv_frame_base = {
static struct gdbarch *
frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
int elf_flags = 0;
/* Check to see if we've already built an appropriate architecture
@@ -1437,7 +1438,9 @@ frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return arches->gdbarch;
/* Select the right tdep structure for this variant. */
- frv_gdbarch_tdep *var = new_variant ();
+ gdbarch *gdbarch = gdbarch_alloc (&info, new_variant ());
+ frv_gdbarch_tdep *var = gdbarch_tdep<frv_gdbarch_tdep> (gdbarch);
+
switch (info.bfd_arch_info->mach)
{
case bfd_mach_frv:
@@ -1471,8 +1474,6 @@ frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
if (elf_flags & EF_FRV_CPU_FR450)
set_variant_scratch_registers (var);
- gdbarch = gdbarch_alloc (&info, var);
-
set_gdbarch_short_bit (gdbarch, 16);
set_gdbarch_int_bit (gdbarch, 32);
set_gdbarch_long_bit (gdbarch, 32);
diff --git a/gdb/ft32-tdep.c b/gdb/ft32-tdep.c
index c8b301e..7a69da6 100644
--- a/gdb/ft32-tdep.c
+++ b/gdb/ft32-tdep.c
@@ -558,7 +558,6 @@ static const struct frame_base ft32_frame_base =
static struct gdbarch *
ft32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
struct type *void_type;
struct type *func_void_type;
@@ -568,8 +567,9 @@ ft32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return arches->gdbarch;
/* Allocate space for the new architecture. */
- ft32_gdbarch_tdep *tdep = new ft32_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new ft32_gdbarch_tdep));
+ ft32_gdbarch_tdep *tdep = gdbarch_tdep<ft32_gdbarch_tdep> (gdbarch);
/* Create a type for PC. We can't use builtin types here, as they may not
be defined. */
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
index 41b71ae..46baca9 100644
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -45,7 +45,7 @@ struct gdbarch
const struct target_desc * target_desc;
/* target specific vector. */
- struct gdbarch_tdep_base *tdep = nullptr;
+ gdbarch_tdep_up tdep;
gdbarch_dump_tdep_ftype *dump_tdep = nullptr;
/* per-architecture data-pointers. */
@@ -263,13 +263,13 @@ struct gdbarch
struct gdbarch *
gdbarch_alloc (const struct gdbarch_info *info,
- struct gdbarch_tdep_base *tdep)
+ gdbarch_tdep_up tdep)
{
struct gdbarch *gdbarch;
gdbarch = new struct gdbarch;
- gdbarch->tdep = tdep;
+ gdbarch->tdep = std::move (tdep);
gdbarch->bfd_arch_info = info->bfd_arch_info;
gdbarch->byte_order = info->byte_order;
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
index 0ebaca4..a1167f2 100644
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -69,6 +69,8 @@ struct gdbarch_tdep_base
virtual ~gdbarch_tdep_base() = default;
};
+using gdbarch_tdep_up = std::unique_ptr<gdbarch_tdep_base>;
+
/* The architecture associated with the inferior through the
connection to the target.
@@ -292,7 +294,8 @@ extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *ar
parameters. set_gdbarch_*() functions are called to complete the
initialization of the object. */
-extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep_base *tdep);
+extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info,
+ gdbarch_tdep_up tdep);
/* Helper function. Free a partially-constructed ``struct gdbarch''.
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index aecd71f..920b872 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -2982,16 +2982,15 @@ hppa_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
static struct gdbarch *
hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
-
/* find a candidate among the list of pre-declared architectures. */
arches = gdbarch_list_lookup_by_info (arches, &info);
if (arches != NULL)
return (arches->gdbarch);
/* If none found, then allocate and initialize one. */
- hppa_gdbarch_tdep *tdep = new hppa_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new hppa_gdbarch_tdep));
+ hppa_gdbarch_tdep *tdep = gdbarch_tdep<hppa_gdbarch_tdep> (gdbarch);
/* Determine from the bfd_arch_info structure if we are dealing with
a 32 or 64 bits architecture. If the bfd_arch_info is not available,
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index dc3cbed..580664d 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -8452,7 +8452,6 @@ i386_type_align (struct gdbarch *gdbarch, struct type *type)
static struct gdbarch *
i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
const struct target_desc *tdesc;
int mm0_regnum;
int ymm0_regnum;
@@ -8465,8 +8464,9 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return arches->gdbarch;
/* Allocate space for the new architecture. Assume i386 for now. */
- i386_gdbarch_tdep *tdep = new i386_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new i386_gdbarch_tdep));
+ i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
/* General-purpose registers. */
tdep->gregset_reg_offset = NULL;
@@ -8709,7 +8709,6 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
if (!i386_validate_tdesc_p (tdep, tdesc_data.get ()))
{
- delete tdep;
gdbarch_free (gdbarch);
return NULL;
}
diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c
index 83eafa9..f446c41 100644
--- a/gdb/ia64-tdep.c
+++ b/gdb/ia64-tdep.c
@@ -3918,15 +3918,14 @@ ia64_size_of_register_frame (frame_info_ptr this_frame, ULONGEST cfm)
static struct gdbarch *
ia64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
-
/* If there is already a candidate, use it. */
arches = gdbarch_list_lookup_by_info (arches, &info);
if (arches != NULL)
return arches->gdbarch;
- ia64_gdbarch_tdep *tdep = new ia64_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new ia64_gdbarch_tdep));
+ ia64_gdbarch_tdep *tdep = gdbarch_tdep<ia64_gdbarch_tdep> (gdbarch);
tdep->size_of_register_frame = ia64_size_of_register_frame;
diff --git a/gdb/lm32-tdep.c b/gdb/lm32-tdep.c
index 55f4b51..5b69bd0 100644
--- a/gdb/lm32-tdep.c
+++ b/gdb/lm32-tdep.c
@@ -479,16 +479,14 @@ lm32_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
static struct gdbarch *
lm32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
-
/* If there is already a candidate, use it. */
arches = gdbarch_list_lookup_by_info (arches, &info);
if (arches != NULL)
return arches->gdbarch;
/* None found, create a new architecture from the information provided. */
- lm32_gdbarch_tdep *tdep = new lm32_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new lm32_gdbarch_tdep));
/* Type sizes. */
set_gdbarch_short_bit (gdbarch, 16);
diff --git a/gdb/loongarch-tdep.c b/gdb/loongarch-tdep.c
index 80520c6..10bbed3 100644
--- a/gdb/loongarch-tdep.c
+++ b/gdb/loongarch-tdep.c
@@ -1441,7 +1441,6 @@ loongarch_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
size_t regnum = 0;
struct loongarch_gdbarch_features features;
tdesc_arch_data_up tdesc_data = tdesc_data_alloc ();
- loongarch_gdbarch_tdep *tdep = new loongarch_gdbarch_tdep;
const struct target_desc *tdesc = info.target_desc;
/* Ensure we always have a target description. */
@@ -1531,7 +1530,10 @@ loongarch_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return arches->gdbarch;
/* None found, so create a new architecture from the information provided. */
- struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new loongarch_gdbarch_tdep));
+ loongarch_gdbarch_tdep *tdep = gdbarch_tdep<loongarch_gdbarch_tdep> (gdbarch);
+
tdep->abi_features = abi_features;
/* Target data types. */
diff --git a/gdb/m32c-tdep.c b/gdb/m32c-tdep.c
index b513f27..c2c3714 100644
--- a/gdb/m32c-tdep.c
+++ b/gdb/m32c-tdep.c
@@ -2587,7 +2587,6 @@ m32c_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc,
static struct gdbarch *
m32c_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
unsigned long mach = info.bfd_arch_info->mach;
/* Find a candidate among the list of architectures we've created
@@ -2597,8 +2596,8 @@ m32c_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
arches = gdbarch_list_lookup_by_info (arches->next, &info))
return arches->gdbarch;
- m32c_gdbarch_tdep *tdep = new m32c_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new m32c_gdbarch_tdep));
/* Essential types. */
make_types (gdbarch);
diff --git a/gdb/m32r-tdep.c b/gdb/m32r-tdep.c
index 3392bd3..fb1dc66 100644
--- a/gdb/m32r-tdep.c
+++ b/gdb/m32r-tdep.c
@@ -861,16 +861,14 @@ static gdbarch_init_ftype m32r_gdbarch_init;
static struct gdbarch *
m32r_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
-
/* If there is already a candidate, use it. */
arches = gdbarch_list_lookup_by_info (arches, &info);
if (arches != NULL)
return arches->gdbarch;
/* Allocate space for the new architecture. */
- m32r_gdbarch_tdep *tdep = new m32r_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new m32r_gdbarch_tdep));
set_gdbarch_wchar_bit (gdbarch, 16);
set_gdbarch_wchar_signed (gdbarch, 0);
diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c
index 8d09872..6625506 100644
--- a/gdb/m68hc11-tdep.c
+++ b/gdb/m68hc11-tdep.c
@@ -1396,7 +1396,6 @@ static struct gdbarch *
m68hc11_gdbarch_init (struct gdbarch_info info,
struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
int elf_flags;
soft_reg_initialized = 0;
@@ -1423,8 +1422,10 @@ m68hc11_gdbarch_init (struct gdbarch_info info,
}
/* Need a new architecture. Fill in a target specific vector. */
- m68gc11_gdbarch_tdep *tdep = new m68gc11_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new m68gc11_gdbarch_tdep));
+ m68gc11_gdbarch_tdep *tdep = gdbarch_tdep<m68gc11_gdbarch_tdep> (gdbarch);
+
tdep->elf_flags = elf_flags;
switch (info.bfd_arch_info->arch)
diff --git a/gdb/m68k-tdep.c b/gdb/m68k-tdep.c
index cd62d81..ae020c8 100644
--- a/gdb/m68k-tdep.c
+++ b/gdb/m68k-tdep.c
@@ -1131,7 +1131,6 @@ m68k_embedded_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
static struct gdbarch *
m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
struct gdbarch_list *best_arch;
tdesc_arch_data_up tdesc_data;
int i;
@@ -1248,8 +1247,10 @@ m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
if (best_arch != NULL)
return best_arch->gdbarch;
- m68k_gdbarch_tdep *tdep = new m68k_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new m68k_gdbarch_tdep));
+ m68k_gdbarch_tdep *tdep = gdbarch_tdep<m68k_gdbarch_tdep> (gdbarch);
+
tdep->fpregs_present = has_fp;
tdep->float_return = float_return;
tdep->flavour = flavour;
diff --git a/gdb/mep-tdep.c b/gdb/mep-tdep.c
index 0198074..2b3f642 100644
--- a/gdb/mep-tdep.c
+++ b/gdb/mep-tdep.c
@@ -2331,8 +2331,6 @@ mep_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
static struct gdbarch *
mep_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
-
/* Which me_module are we building a gdbarch object for? */
CONFIG_ATTR me_module;
@@ -2397,8 +2395,9 @@ mep_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return arches->gdbarch;
}
- mep_gdbarch_tdep *tdep = new mep_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new mep_gdbarch_tdep));
+ mep_gdbarch_tdep *tdep = gdbarch_tdep<mep_gdbarch_tdep> (gdbarch);
/* Get a CGEN CPU descriptor for this architecture. */
{
diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index 2c6fe63..723dc7c 100644
--- a/gdb/microblaze-tdep.c
+++ b/gdb/microblaze-tdep.c
@@ -637,7 +637,6 @@ microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
static struct gdbarch *
microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
tdesc_arch_data_up tdesc_data;
const struct target_desc *tdesc = info.target_desc;
@@ -683,8 +682,8 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
}
/* Allocate space for the new architecture. */
- microblaze_gdbarch_tdep *tdep = new microblaze_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new microblaze_gdbarch_tdep));
set_gdbarch_long_double_bit (gdbarch, 128);
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index 55f0881..6088587 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -8075,7 +8075,6 @@ value_of_mips_user_reg (frame_info_ptr frame, const void *baton)
static struct gdbarch *
mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
int elf_flags;
enum mips_abi mips_abi, found_abi, wanted_abi;
int i, num_regs;
@@ -8475,8 +8474,10 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
}
/* Need a new architecture. Fill in a target specific vector. */
- mips_gdbarch_tdep *tdep = new mips_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new mips_gdbarch_tdep));
+ mips_gdbarch_tdep *tdep = gdbarch_tdep<mips_gdbarch_tdep> (gdbarch);
+
tdep->elf_flags = elf_flags;
tdep->mips64_transfers_32bit_regs_p = mips64_transfers_32bit_regs_p;
tdep->found_abi = found_abi;
diff --git a/gdb/mn10300-tdep.c b/gdb/mn10300-tdep.c
index 4a2c7c4..fa43e8b 100644
--- a/gdb/mn10300-tdep.c
+++ b/gdb/mn10300-tdep.c
@@ -1332,15 +1332,15 @@ static struct gdbarch *
mn10300_gdbarch_init (struct gdbarch_info info,
struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
int num_regs;
arches = gdbarch_list_lookup_by_info (arches, &info);
if (arches != NULL)
return arches->gdbarch;
- mn10300_gdbarch_tdep *tdep = new mn10300_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new mn10300_gdbarch_tdep));
+ mn10300_gdbarch_tdep *tdep = gdbarch_tdep<mn10300_gdbarch_tdep> (gdbarch);
switch (info.bfd_arch_info->mach)
{
diff --git a/gdb/moxie-tdep.c b/gdb/moxie-tdep.c
index eff1cbc..9154d48 100644
--- a/gdb/moxie-tdep.c
+++ b/gdb/moxie-tdep.c
@@ -1049,16 +1049,14 @@ moxie_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
static struct gdbarch *
moxie_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
-
/* If there is already a candidate, use it. */
arches = gdbarch_list_lookup_by_info (arches, &info);
if (arches != NULL)
return arches->gdbarch;
/* Allocate space for the new architecture. */
- moxie_gdbarch_tdep *tdep = new moxie_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new moxie_gdbarch_tdep));
set_gdbarch_wchar_bit (gdbarch, 32);
set_gdbarch_wchar_signed (gdbarch, 0);
diff --git a/gdb/msp430-tdep.c b/gdb/msp430-tdep.c
index 1643a9e..0512990 100644
--- a/gdb/msp430-tdep.c
+++ b/gdb/msp430-tdep.c
@@ -835,7 +835,6 @@ msp430_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
static struct gdbarch *
msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
int elf_flags, isa, code_model;
/* Extract the elf_flags if available. */
@@ -917,8 +916,10 @@ msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* None found, create a new architecture from the information
provided. */
- msp430_gdbarch_tdep *tdep = new msp430_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new msp430_gdbarch_tdep));
+ msp430_gdbarch_tdep *tdep = gdbarch_tdep<msp430_gdbarch_tdep> (gdbarch);
+
tdep->elf_flags = elf_flags;
tdep->isa = isa;
tdep->code_model = code_model;
diff --git a/gdb/nds32-tdep.c b/gdb/nds32-tdep.c
index cead6e1..ede1a18 100644
--- a/gdb/nds32-tdep.c
+++ b/gdb/nds32-tdep.c
@@ -1940,7 +1940,6 @@ nds32_validate_tdesc_p (const struct target_desc *tdesc,
static struct gdbarch *
nds32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
struct gdbarch_list *best_arch;
tdesc_arch_data_up tdesc_data;
const struct target_desc *tdesc = info.target_desc;
@@ -1981,14 +1980,15 @@ nds32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return NULL;
/* Allocate space for the new architecture. */
- nds32_gdbarch_tdep *tdep = new nds32_gdbarch_tdep;
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new nds32_gdbarch_tdep));
+ nds32_gdbarch_tdep *tdep = gdbarch_tdep<nds32_gdbarch_tdep> (gdbarch);
+
tdep->fpu_freg = fpu_freg;
tdep->use_pseudo_fsrs = use_pseudo_fsrs;
tdep->fs0_regnum = -1;
tdep->elf_abi = elf_abi;
- gdbarch = gdbarch_alloc (&info, tdep);
-
set_gdbarch_wchar_bit (gdbarch, 16);
set_gdbarch_wchar_signed (gdbarch, 0);
diff --git a/gdb/nios2-tdep.c b/gdb/nios2-tdep.c
index a93ef8a..de61c9c 100644
--- a/gdb/nios2-tdep.c
+++ b/gdb/nios2-tdep.c
@@ -2274,7 +2274,6 @@ nios2_gcc_target_options (struct gdbarch *gdbarch)
static struct gdbarch *
nios2_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
int i;
tdesc_arch_data_up tdesc_data;
const struct target_desc *tdesc = info.target_desc;
@@ -2312,8 +2311,9 @@ nios2_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* None found, create a new architecture from the information
provided. */
- nios2_gdbarch_tdep *tdep = new nios2_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new nios2_gdbarch_tdep));
+ nios2_gdbarch_tdep *tdep = gdbarch_tdep<nios2_gdbarch_tdep> (gdbarch);
/* longjmp support not enabled by default. */
tdep->jb_pc = -1;
diff --git a/gdb/or1k-tdep.c b/gdb/or1k-tdep.c
index 2237723..8995456 100644
--- a/gdb/or1k-tdep.c
+++ b/gdb/or1k-tdep.c
@@ -1142,7 +1142,6 @@ static const struct frame_unwind or1k_frame_unwind = {
static struct gdbarch *
or1k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
const struct bfd_arch_info *binfo;
tdesc_arch_data_up tdesc_data;
const struct target_desc *tdesc = info.target_desc;
@@ -1157,10 +1156,12 @@ or1k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
actually know which target we are talking to, but put in some defaults
for now. */
binfo = info.bfd_arch_info;
- or1k_gdbarch_tdep *tdep = new or1k_gdbarch_tdep;
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new or1k_gdbarch_tdep));
+ or1k_gdbarch_tdep *tdep = gdbarch_tdep<or1k_gdbarch_tdep> (gdbarch);
+
tdep->bytes_per_word = binfo->bits_per_word / binfo->bits_per_byte;
tdep->bytes_per_address = binfo->bits_per_address / binfo->bits_per_byte;
- gdbarch = gdbarch_alloc (&info, tdep);
/* Target data types */
set_gdbarch_short_bit (gdbarch, 16);
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index 83c6113..6e5e8fb 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -3792,7 +3792,6 @@ static struct gdbarch *
riscv_gdbarch_init (struct gdbarch_info info,
struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
struct riscv_gdbarch_features features;
const struct target_desc *tdesc = info.target_desc;
@@ -3878,8 +3877,10 @@ riscv_gdbarch_init (struct gdbarch_info info,
return arches->gdbarch;
/* None found, so create a new architecture from the information provided. */
- riscv_gdbarch_tdep *tdep = new riscv_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new riscv_gdbarch_tdep));
+ riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
+
tdep->isa_features = features;
tdep->abi_features = abi_features;
diff --git a/gdb/rl78-tdep.c b/gdb/rl78-tdep.c
index 3dab2b8..4979e09 100644
--- a/gdb/rl78-tdep.c
+++ b/gdb/rl78-tdep.c
@@ -1375,7 +1375,6 @@ rl78_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
static struct gdbarch *
rl78_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
int elf_flags;
/* Extract the elf_flags if available. */
@@ -1403,8 +1402,10 @@ rl78_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* None found, create a new architecture from the information
provided. */
- rl78_gdbarch_tdep * tdep = new rl78_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new rl78_gdbarch_tdep));
+ rl78_gdbarch_tdep *tdep = gdbarch_tdep<rl78_gdbarch_tdep> (gdbarch);
+
tdep->elf_flags = elf_flags;
/* Initialize types. */
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index c9f5ba2..592b447 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -7471,7 +7471,6 @@ rs6000_program_breakpoint_here_p (gdbarch *gdbarch, CORE_ADDR address)
static struct gdbarch *
rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
int wordsize, from_xcoff_exec, from_elf_exec;
enum bfd_architecture arch;
unsigned long mach;
@@ -8179,15 +8178,16 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
- "set arch" trust blindly
- GDB startup useless but harmless */
- ppc_gdbarch_tdep *tdep = new ppc_gdbarch_tdep;
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new ppc_gdbarch_tdep));
+ ppc_gdbarch_tdep *tdep = gdbarch_tdep<ppc_gdbarch_tdep> (gdbarch);
+
tdep->wordsize = wordsize;
tdep->elf_abi = elf_abi;
tdep->soft_float = soft_float;
tdep->long_double_abi = long_double_abi;
tdep->vector_abi = vector_abi;
- gdbarch = gdbarch_alloc (&info, tdep);
-
tdep->ppc_gp0_regnum = PPC_R0_REGNUM;
tdep->ppc_toc_regnum = PPC_R0_REGNUM + 2;
tdep->ppc_ps_regnum = PPC_MSR_REGNUM;
diff --git a/gdb/rx-tdep.c b/gdb/rx-tdep.c
index 18d7f49..675c51c 100644
--- a/gdb/rx-tdep.c
+++ b/gdb/rx-tdep.c
@@ -944,7 +944,6 @@ rx_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
static struct gdbarch *
rx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
int elf_flags;
tdesc_arch_data_up tdesc_data;
const struct target_desc *tdesc = info.target_desc;
@@ -997,8 +996,10 @@ rx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
gdb_assert(tdesc_data != NULL);
- rx_gdbarch_tdep *tdep = new rx_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new rx_gdbarch_tdep));
+ rx_gdbarch_tdep *tdep = gdbarch_tdep<rx_gdbarch_tdep> (gdbarch);
+
tdep->elf_flags = elf_flags;
set_gdbarch_num_regs (gdbarch, RX_NUM_REGS);
diff --git a/gdb/s12z-tdep.c b/gdb/s12z-tdep.c
index 3c2434f..4781eab 100644
--- a/gdb/s12z-tdep.c
+++ b/gdb/s12z-tdep.c
@@ -616,8 +616,8 @@ show_bdccsr_command (const char *args, int from_tty)
static struct gdbarch *
s12z_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- s12z_gdbarch_tdep *tdep = new s12z_gdbarch_tdep;
- struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new s12z_gdbarch_tdep));
add_cmd ("bdccsr", class_support, show_bdccsr_command,
_("Show the current value of the microcontroller's BDCCSR."),
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index 7716525..1793399 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -6983,13 +6983,12 @@ s390_tdesc_valid (s390_gdbarch_tdep *tdep,
return true;
}
-/* Allocate and initialize new gdbarch_tdep. Caller is responsible to free
- memory after use. */
+/* Allocate and initialize new gdbarch_tdep. */
-static s390_gdbarch_tdep *
+static s390_gdbarch_tdep_up
s390_gdbarch_tdep_alloc ()
{
- s390_gdbarch_tdep *tdep = new s390_gdbarch_tdep;
+ s390_gdbarch_tdep_up tdep (new s390_gdbarch_tdep);
tdep->tdesc = NULL;
@@ -7026,8 +7025,8 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
static const char *const stap_register_indirection_suffixes[] = { ")",
NULL };
- s390_gdbarch_tdep *tdep = s390_gdbarch_tdep_alloc ();
- struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch = gdbarch_alloc (&info, s390_gdbarch_tdep_alloc ());
+ s390_gdbarch_tdep *tdep = gdbarch_tdep<s390_gdbarch_tdep> (gdbarch);
tdesc_arch_data_up tdesc_data = tdesc_data_alloc ();
info.tdesc_data = tdesc_data.get ();
@@ -7156,7 +7155,6 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* Check any target description for validity. */
if (!s390_tdesc_valid (tdep, tdesc_data.get ()))
{
- delete tdep;
gdbarch_free (gdbarch);
return NULL;
}
@@ -7189,7 +7187,6 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
if (tmp->vector_abi != tdep->vector_abi)
continue;
- delete tdep;
gdbarch_free (gdbarch);
return arches->gdbarch;
}
diff --git a/gdb/s390-tdep.h b/gdb/s390-tdep.h
index 0460e8b..7a9a353 100644
--- a/gdb/s390-tdep.h
+++ b/gdb/s390-tdep.h
@@ -67,6 +67,8 @@ struct s390_gdbarch_tdep : gdbarch_tdep_base
= nullptr;
};
+using s390_gdbarch_tdep_up = std::unique_ptr<s390_gdbarch_tdep>;
+
/* Decoding S/390 instructions. */
/* Named opcode values for the S/390 instructions we recognize. Some
diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
index 289b810..a816e6b 100644
--- a/gdb/sh-tdep.c
+++ b/gdb/sh-tdep.c
@@ -2195,8 +2195,6 @@ sh_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
static struct gdbarch *
sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
-
/* If there is already a candidate, use it. */
arches = gdbarch_list_lookup_by_info (arches, &info);
if (arches != NULL)
@@ -2204,8 +2202,8 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* None found, create a new architecture from the information
provided. */
- sh_gdbarch_tdep *tdep = new sh_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new sh_gdbarch_tdep));
set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
index 55c8434..bd3dc94 100644
--- a/gdb/sparc-tdep.c
+++ b/gdb/sparc-tdep.c
@@ -1811,7 +1811,6 @@ static struct gdbarch *
sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
const struct target_desc *tdesc = info.target_desc;
- struct gdbarch *gdbarch;
int valid_p = 1;
/* If there is already a candidate, use it. */
@@ -1820,8 +1819,9 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return arches->gdbarch;
/* Allocate space for the new architecture. */
- sparc_gdbarch_tdep *tdep = new sparc_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new sparc_gdbarch_tdep));
+ sparc_gdbarch_tdep *tdep = gdbarch_tdep<sparc_gdbarch_tdep> (gdbarch);
tdep->pc_regnum = SPARC32_PC_REGNUM;
tdep->npc_regnum = SPARC32_NPC_REGNUM;
diff --git a/gdb/tic6x-tdep.c b/gdb/tic6x-tdep.c
index fedc82d..6c10394 100644
--- a/gdb/tic6x-tdep.c
+++ b/gdb/tic6x-tdep.c
@@ -1136,7 +1136,6 @@ tic6x_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
static struct gdbarch *
tic6x_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
tdesc_arch_data_up tdesc_data;
const struct target_desc *tdesc = info.target_desc;
int has_gp = 0;
@@ -1221,10 +1220,11 @@ tic6x_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return arches->gdbarch;
}
- tic6x_gdbarch_tdep *tdep = new tic6x_gdbarch_tdep;
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new tic6x_gdbarch_tdep));
+ tic6x_gdbarch_tdep *tdep = gdbarch_tdep<tic6x_gdbarch_tdep> (gdbarch);
tdep->has_gp = has_gp;
- gdbarch = gdbarch_alloc (&info, tdep);
/* Data type sizes. */
set_gdbarch_ptr_bit (gdbarch, 32);
diff --git a/gdb/v850-tdep.c b/gdb/v850-tdep.c
index 66a1e6d..cc7da90 100644
--- a/gdb/v850-tdep.c
+++ b/gdb/v850-tdep.c
@@ -1348,7 +1348,6 @@ static const struct frame_base v850_frame_base = {
static struct gdbarch *
v850_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
int e_flags, e_machine;
/* Extract the elf_flags if available. */
@@ -1380,7 +1379,10 @@ v850_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
return arches->gdbarch;
}
- v850_gdbarch_tdep *tdep = new v850_gdbarch_tdep;
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new v850_gdbarch_tdep));
+ v850_gdbarch_tdep *tdep = gdbarch_tdep<v850_gdbarch_tdep> (gdbarch);
+
tdep->e_flags = e_flags;
tdep->e_machine = e_machine;
@@ -1395,7 +1397,6 @@ v850_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
}
tdep->eight_byte_align = (tdep->e_flags & EF_RH850_DATA_ALIGN8) ? 1 : 0;
- gdbarch = gdbarch_alloc (&info, tdep);
switch (info.bfd_arch_info->mach)
{
diff --git a/gdb/xtensa-config.c b/gdb/xtensa-config.c
index 3c3b888..a40ce93 100644
--- a/gdb/xtensa-config.c
+++ b/gdb/xtensa-config.c
@@ -62,7 +62,7 @@ const xtensa_mask_t xtensa_mask15 = { 1, xtensa_submask15 };
/* Register map. */
-static xtensa_register_t rmap[] =
+xtensa_register_t xtensa_rmap[] =
{
/* idx ofs bi sz al targno flags cp typ group name */
XTREG( 0, 0,32, 4, 4,0x0020,0x0006,-2, 9,0x0100,pc, 0,0,0,0,0,0)
@@ -212,5 +212,3 @@ static xtensa_register_t rmap[] =
0,0,&xtensa_mask15,0,0,0)
XTREG_END
};
-
-xtensa_gdbarch_tdep xtensa_tdep (rmap);
diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
index dc72c7d..8476fec 100644
--- a/gdb/xtensa-tdep.c
+++ b/gdb/xtensa-tdep.c
@@ -3145,13 +3145,11 @@ xtensa_derive_tdep (xtensa_gdbarch_tdep *tdep)
/* Module "constructor" function. */
-extern xtensa_gdbarch_tdep xtensa_tdep;
+extern xtensa_register_t xtensa_rmap[];
static struct gdbarch *
xtensa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
-
DEBUGTRACE ("gdbarch_init()\n");
if (!xtensa_default_isa)
@@ -3160,8 +3158,10 @@ xtensa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* We have to set the byte order before we call gdbarch_alloc. */
info.byte_order = XCHAL_HAVE_BE ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
- xtensa_gdbarch_tdep *tdep = &xtensa_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info,
+ gdbarch_tdep_up (new xtensa_gdbarch_tdep (xtensa_rmap)));
+ xtensa_gdbarch_tdep *tdep = gdbarch_tdep<xtensa_gdbarch_tdep> (gdbarch);
xtensa_derive_tdep (tdep);
/* Verify our configuration. */
diff --git a/gdb/z80-tdep.c b/gdb/z80-tdep.c
index aa296c7..9dc24df 100644
--- a/gdb/z80-tdep.c
+++ b/gdb/z80-tdep.c
@@ -1081,7 +1081,6 @@ z80_frame_unwind =
static struct gdbarch *
z80_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
- struct gdbarch *gdbarch;
struct gdbarch_list *best_arch;
tdesc_arch_data_up tdesc_data;
unsigned long mach = info.bfd_arch_info->mach;
@@ -1123,8 +1122,9 @@ z80_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
}
/* None found, create a new architecture from the information provided. */
- z80_gdbarch_tdep *tdep = new z80_gdbarch_tdep;
- gdbarch = gdbarch_alloc (&info, tdep);
+ gdbarch *gdbarch
+ = gdbarch_alloc (&info, gdbarch_tdep_up (new z80_gdbarch_tdep));
+ z80_gdbarch_tdep *tdep = gdbarch_tdep<z80_gdbarch_tdep> (gdbarch);
if (mach == bfd_mach_ez80_adl)
{