/* Target-dependent code for the NEC V850 for GDB, the GNU debugger.
- Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ Copyright (C) 1996-2023 Free Software Foundation, Inc.
This file is part of GDB.
#include "osabi.h"
#include "elf-bfd.h"
#include "elf/v850.h"
+#include "gdbarch.h"
enum
{
/* Architecture specific data. */
-struct v850_gdbarch_tdep : gdbarch_tdep
+struct v850_gdbarch_tdep : gdbarch_tdep_base
{
/* Fields from the ELF header. */
int e_flags = 0;
"sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
"pc", "fp"
};
- if (regnum < 0 || regnum > E_NUM_OF_V850_REGS)
- return NULL;
+ gdb_static_assert (E_NUM_OF_V850_REGS == ARRAY_SIZE (v850_reg_names));
return v850_reg_names[regnum];
}
"sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
"pc", "fp"
};
- if (regnum < 0 || regnum > E_NUM_OF_V850E_REGS)
- return NULL;
+ gdb_static_assert (E_NUM_OF_V850E_REGS == ARRAY_SIZE (v850e_reg_names));
return v850e_reg_names[regnum];
}
"", "", "", "", "", "", "", "",
"", "", "", "fpspc"
};
- if (regnum < 0 || regnum >= E_NUM_OF_V850E2_REGS)
- return NULL;
+ if (regnum >= E_NUM_OF_V850E2_REGS)
+ return "";
return v850e2_reg_names[regnum];
}
"vr24", "vr25", "vr26", "vr27", "vr28", "vr29", "vr30", "vr31",
};
- if (regnum < 0 || regnum >= E_NUM_OF_V850E3V5_REGS)
- return NULL;
+ gdb_static_assert (E_NUM_OF_V850E3V5_REGS
+ == ARRAY_SIZE (v850e3v5_reg_names));
return v850e3v5_reg_names[regnum];
}
{
int i;
struct type *fld_type, *tgt_type;
- v850_gdbarch_tdep *tdep = (v850_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ v850_gdbarch_tdep *tdep = gdbarch_tdep<v850_gdbarch_tdep> (gdbarch);
if (tdep->abi == V850_ABI_RH850)
{
- if (v850_type_is_scalar (type) && TYPE_LENGTH(type) <= 8)
+ if (v850_type_is_scalar (type) && type->length () <= 8)
return 0;
/* Structs are never returned in registers for this ABI. */
return 1;
}
/* 1. The value is greater than 8 bytes -> returned by copying. */
- if (TYPE_LENGTH (type) > 8)
+ if (type->length () > 8)
return 1;
/* 2. The value is a single basic type -> returned in register. */
&& type->num_fields () == 1)
{
fld_type = type->field (0).type ();
- if (v850_type_is_scalar (fld_type) && TYPE_LENGTH (fld_type) >= 4)
+ if (v850_type_is_scalar (fld_type) && fld_type->length () >= 4)
return 0;
if (fld_type->code () == TYPE_CODE_ARRAY)
{
- tgt_type = TYPE_TARGET_TYPE (fld_type);
- if (v850_type_is_scalar (tgt_type) && TYPE_LENGTH (tgt_type) >= 4)
+ tgt_type = fld_type->target_type ();
+ if (v850_type_is_scalar (tgt_type) && tgt_type->length () >= 4)
return 0;
}
}
register. */
if (type->code () == TYPE_CODE_STRUCT
&& v850_type_is_scalar (type->field (0).type ())
- && TYPE_LENGTH (type->field (0).type ()) == 4)
+ && type->field (0).type ()->length () == 4)
{
for (i = 1; i < type->num_fields (); ++i)
{
fld_type = type->field (0).type ();
if (fld_type->code () == TYPE_CODE_ARRAY)
{
- tgt_type = TYPE_TARGET_TYPE (fld_type);
- if (TYPE_LENGTH (tgt_type) > 0
- && TYPE_LENGTH (fld_type) / TYPE_LENGTH (tgt_type) > 2)
+ tgt_type = fld_type->target_type ();
+ if (tgt_type->length () > 0
+ && fld_type->length () / tgt_type->length () > 2)
return 1;
}
}
type = check_typedef (type);
if (v850_type_is_scalar (type))
- return (TYPE_LENGTH (type) == 8);
+ return (type->length () == 8);
else
{
int i;
int argnum;
int arg_space = 0;
int stack_offset;
- v850_gdbarch_tdep *tdep = (v850_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+ v850_gdbarch_tdep *tdep = gdbarch_tdep<v850_gdbarch_tdep> (gdbarch);
if (tdep->abi == V850_ABI_RH850)
stack_offset = 0;
/* Now make space on the stack for the args. */
for (argnum = 0; argnum < nargs; argnum++)
- arg_space += ((TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3);
+ arg_space += ((value_type (args[argnum])->length () + 3) & ~3);
sp -= arg_space + stack_offset;
argreg = E_ARG0_REGNUM;
if (!v850_type_is_scalar (value_type (*args))
&& tdep->abi == V850_ABI_GCC
- && TYPE_LENGTH (value_type (*args)) > E_MAX_RETTYPE_SIZE_IN_REGS)
+ && value_type (*args)->length () > E_MAX_RETTYPE_SIZE_IN_REGS)
{
store_unsigned_integer (valbuf, 4, byte_order,
value_address (*args));
}
else
{
- len = TYPE_LENGTH (value_type (*args));
+ len = value_type (*args)->length ();
val = (gdb_byte *) value_contents (*args).data ();
}
{
struct gdbarch *gdbarch = regcache->arch ();
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
- int len = TYPE_LENGTH (type);
+ int len = type->length ();
if (len <= v850_reg_size)
{
{
struct gdbarch *gdbarch = regcache->arch ();
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
- int len = TYPE_LENGTH (type);
+ int len = type->length ();
if (len <= v850_reg_size)
regcache_cooked_write_unsigned
}
static struct v850_frame_cache *
-v850_alloc_frame_cache (struct frame_info *this_frame)
+v850_alloc_frame_cache (frame_info_ptr this_frame)
{
struct v850_frame_cache *cache;
}
static struct v850_frame_cache *
-v850_frame_cache (struct frame_info *this_frame, void **this_cache)
+v850_frame_cache (frame_info_ptr this_frame, void **this_cache)
{
struct gdbarch *gdbarch = get_frame_arch (this_frame);
struct v850_frame_cache *cache;
static struct value *
-v850_frame_prev_register (struct frame_info *this_frame,
+v850_frame_prev_register (frame_info_ptr this_frame,
void **this_cache, int regnum)
{
struct v850_frame_cache *cache = v850_frame_cache (this_frame, this_cache);
}
static void
-v850_frame_this_id (struct frame_info *this_frame, void **this_cache,
+v850_frame_this_id (frame_info_ptr this_frame, void **this_cache,
struct frame_id *this_id)
{
struct v850_frame_cache *cache = v850_frame_cache (this_frame, this_cache);
};
static CORE_ADDR
-v850_frame_base_address (struct frame_info *this_frame, void **this_cache)
+v850_frame_base_address (frame_info_ptr this_frame, void **this_cache)
{
struct v850_frame_cache *cache = v850_frame_cache (this_frame, this_cache);
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. */
arches = gdbarch_list_lookup_by_info (arches->next, &info))
{
v850_gdbarch_tdep *tdep
- = (v850_gdbarch_tdep *) gdbarch_tdep (arches->gdbarch);
+ = gdbarch_tdep<v850_gdbarch_tdep> (arches->gdbarch);
if (tdep->e_flags != e_flags || tdep->e_machine != e_machine)
continue;
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;
}
tdep->eight_byte_align = (tdep->e_flags & EF_RH850_DATA_ALIGN8) ? 1 : 0;
- gdbarch = gdbarch_alloc (&info, tdep);
switch (info.bfd_arch_info->mach)
{
void
_initialize_v850_tdep ()
{
- register_gdbarch_init (bfd_arch_v850, v850_gdbarch_init);
- register_gdbarch_init (bfd_arch_v850_rh850, v850_gdbarch_init);
+ gdbarch_register (bfd_arch_v850, v850_gdbarch_init);
+ gdbarch_register (bfd_arch_v850_rh850, v850_gdbarch_init);
}