projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
PR25277, microblaze opcode enumeration vs ISO/IEC TS 18661-3:2015
[deliverable/binutils-gdb.git]
/
gdb
/
cris-tdep.c
diff --git
a/gdb/cris-tdep.c
b/gdb/cris-tdep.c
index f2d9eeddec8dcf0f3c0b994894be9d8e167b95e7..cb99b9288cd7e0da48ababd6da7593ad5164118e 100644
(file)
--- a/
gdb/cris-tdep.c
+++ b/
gdb/cris-tdep.c
@@
-1,6
+1,6
@@
/* Target dependent code for CRIS, for GDB, the GNU debugger.
/* Target dependent code for CRIS, for GDB, the GNU debugger.
- Copyright (C) 2001-201
6
Free Software Foundation, Inc.
+ Copyright (C) 2001-201
9
Free Software Foundation, Inc.
Contributed by Axis Communications AB.
Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg.
Contributed by Axis Communications AB.
Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg.
@@
-148,7
+148,7
@@
extern const struct cris_spec_reg cris_spec_regs[];
static unsigned int usr_cmd_cris_version;
/* Indicates whether to trust the above variable. */
static unsigned int usr_cmd_cris_version;
/* Indicates whether to trust the above variable. */
-static
int usr_cmd_cris_version_valid = 0
;
+static
bool usr_cmd_cris_version_valid = false
;
static const char cris_mode_normal[] = "normal";
static const char cris_mode_guru[] = "guru";
static const char cris_mode_normal[] = "normal";
static const char cris_mode_guru[] = "guru";
@@
-163,7
+163,7
@@
static const char *const cris_modes[] = {
static const char *usr_cmd_cris_mode = cris_mode_normal;
/* Whether to make use of Dwarf-2 CFI (default on). */
static const char *usr_cmd_cris_mode = cris_mode_normal;
/* Whether to make use of Dwarf-2 CFI (default on). */
-static
int usr_cmd_cris_dwarf2_cfi = 1
;
+static
bool usr_cmd_cris_dwarf2_cfi = true
;
/* Sigtramp identification code copied from i386-linux-tdep.c. */
/* Sigtramp identification code copied from i386-linux-tdep.c. */
@@
-634,13
+634,13
@@
static struct gdbarch *cris_gdbarch_init (struct gdbarch_info,
static void cris_dump_tdep (struct gdbarch *, struct ui_file *);
static void cris_dump_tdep (struct gdbarch *, struct ui_file *);
-static void set_cris_version (char *ignore_args, int from_tty,
+static void set_cris_version (c
onst c
har *ignore_args, int from_tty,
struct cmd_list_element *c);
struct cmd_list_element *c);
-static void set_cris_mode (char *ignore_args, int from_tty,
+static void set_cris_mode (c
onst c
har *ignore_args, int from_tty,
struct cmd_list_element *c);
struct cmd_list_element *c);
-static void set_cris_dwarf2_cfi (char *ignore_args, int from_tty,
+static void set_cris_dwarf2_cfi (c
onst c
har *ignore_args, int from_tty,
struct cmd_list_element *c);
static CORE_ADDR cris_scan_prologue (CORE_ADDR pc,
struct cmd_list_element *c);
static CORE_ADDR cris_scan_prologue (CORE_ADDR pc,
@@
-651,12
+651,6
@@
static CORE_ADDR crisv32_scan_prologue (CORE_ADDR pc,
struct frame_info *this_frame,
struct cris_unwind_cache *info);
struct frame_info *this_frame,
struct cris_unwind_cache *info);
-static CORE_ADDR cris_unwind_pc (struct gdbarch *gdbarch,
- struct frame_info *next_frame);
-
-static CORE_ADDR cris_unwind_sp (struct gdbarch *gdbarch,
- struct frame_info *next_frame);
-
/* When arguments must be pushed onto the stack, they go on in reverse
order. The below implements a FILO (stack) to do this.
Copied from d10v-tdep.c. */
/* When arguments must be pushed onto the stack, they go on in reverse
order. The below implements a FILO (stack) to do this.
Copied from d10v-tdep.c. */
@@
-767,18
+761,6
@@
cris_frame_prev_register (struct frame_info *this_frame,
return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
}
return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
}
-/* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
- frame. The frame ID's base needs to match the TOS value saved by
- save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint. */
-
-static struct frame_id
-cris_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
- CORE_ADDR sp;
- sp = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
- return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
static CORE_ADDR
cris_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
{
static CORE_ADDR
cris_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
{
@@
-808,7
+790,8
@@
static CORE_ADDR
cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
struct regcache *regcache, CORE_ADDR bp_addr,
int nargs, struct value **args, CORE_ADDR sp,
cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
struct regcache *regcache, CORE_ADDR bp_addr,
int nargs, struct value **args, CORE_ADDR sp,
- int struct_return, CORE_ADDR struct_addr)
+ function_call_return_method return_method,
+ CORE_ADDR struct_addr)
{
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int argreg;
{
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int argreg;
@@
-822,10
+805,8
@@
cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
/* Are we returning a value using a structure return or a normal value
return? struct_addr is the address of the reserved space for the return
structure to be written on the stack. */
/* Are we returning a value using a structure return or a normal value
return? struct_addr is the address of the reserved space for the return
structure to be written on the stack. */
- if (struct_return)
- {
- regcache_cooked_write_unsigned (regcache, STR_REGNUM, struct_addr);
- }
+ if (return_method == return_method_struct)
+ regcache_cooked_write_unsigned (regcache, STR_REGNUM, struct_addr);
/* Now load as many as possible of the first arguments into registers,
and push the rest onto the stack. */
/* Now load as many as possible of the first arguments into registers,
and push the rest onto the stack. */
@@
-849,7
+830,7
@@
cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
/* Data passed by value. Fits in available register(s). */
for (i = 0; i < reg_demand; i++)
{
/* Data passed by value. Fits in available register(s). */
for (i = 0; i < reg_demand; i++)
{
- regcache
_cooked_write (regcache,
argreg, val);
+ regcache
->cooked_write (
argreg, val);
argreg++;
val += 4;
}
argreg++;
val += 4;
}
@@
-862,7
+843,7
@@
cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
{
if (argreg <= ARG4_REGNUM)
{
{
if (argreg <= ARG4_REGNUM)
{
- regcache
_cooked_write (regcache,
argreg, val);
+ regcache
->cooked_write (
argreg, val);
argreg++;
val += 4;
}
argreg++;
val += 4;
}
@@
-1373,24
+1354,6
@@
cris_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
return pc_after_prologue;
}
return pc_after_prologue;
}
-static CORE_ADDR
-cris_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
-{
- ULONGEST pc;
- pc = frame_unwind_register_unsigned (next_frame,
- gdbarch_pc_regnum (gdbarch));
- return pc;
-}
-
-static CORE_ADDR
-cris_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
-{
- ULONGEST sp;
- sp = frame_unwind_register_unsigned (next_frame,
- gdbarch_sp_regnum (gdbarch));
- return sp;
-}
-
/* Implement the breakpoint_kind_from_pc gdbarch method. */
static int
/* Implement the breakpoint_kind_from_pc gdbarch method. */
static int
@@
-1434,19
+1397,19
@@
cris_spec_reg_applicable (struct gdbarch *gdbarch,
/* Indeterminate/obsolete. */
return 0;
case cris_ver_v0_3:
/* Indeterminate/obsolete. */
return 0;
case cris_ver_v0_3:
- return
(version >= 0 && version <= 3
);
+ return
in_inclusive_range (version, 0U, 3U
);
case cris_ver_v3p:
return (version >= 3);
case cris_ver_v8:
case cris_ver_v3p:
return (version >= 3);
case cris_ver_v8:
- return
(version == 8 || version == 9
);
+ return
in_inclusive_range (version, 8U, 9U
);
case cris_ver_v8p:
return (version >= 8);
case cris_ver_v0_10:
case cris_ver_v8p:
return (version >= 8);
case cris_ver_v0_10:
- return
(version >= 0 && version <= 10
);
+ return
in_inclusive_range (version, 0U, 10U
);
case cris_ver_v3_10:
case cris_ver_v3_10:
- return
(version >= 3 && version <= 10
);
+ return
in_inclusive_range (version, 3U, 10U
);
case cris_ver_v8_10:
case cris_ver_v8_10:
- return
(version >= 8 && version <= 10
);
+ return
in_inclusive_range (version, 8U, 10U
);
case cris_ver_v10:
return (version == 10);
case cris_ver_v10p:
case cris_ver_v10:
return (version == 10);
case cris_ver_v10p:
@@
-1643,7
+1606,7
@@
static void
cris_store_return_value (struct type *type, struct regcache *regcache,
const gdb_byte *valbuf)
{
cris_store_return_value (struct type *type, struct regcache *regcache,
const gdb_byte *valbuf)
{
- struct gdbarch *gdbarch =
get_regcache_arch (regcache
);
+ struct gdbarch *gdbarch =
regcache->arch (
);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
ULONGEST val;
int len = TYPE_LENGTH (type);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
ULONGEST val;
int len = TYPE_LENGTH (type);
@@
-1695,7
+1658,7
@@
cris_special_register_name (struct gdbarch *gdbarch, int regno)
static const char *
cris_register_name (struct gdbarch *gdbarch, int regno)
{
static const char *
cris_register_name (struct gdbarch *gdbarch, int regno)
{
- static char *cris_genreg_names[] =
+ static c
onst c
har *cris_genreg_names[] =
{ "r0", "r1", "r2", "r3", \
"r4", "r5", "r6", "r7", \
"r8", "r9", "r10", "r11", \
{ "r0", "r1", "r2", "r3", \
"r4", "r5", "r6", "r7", \
"r8", "r9", "r10", "r11", \
@@
-1720,14
+1683,14
@@
cris_register_name (struct gdbarch *gdbarch, int regno)
static const char *
crisv32_register_name (struct gdbarch *gdbarch, int regno)
{
static const char *
crisv32_register_name (struct gdbarch *gdbarch, int regno)
{
- static char *crisv32_genreg_names[] =
+ static c
onst c
har *crisv32_genreg_names[] =
{ "r0", "r1", "r2", "r3", \
"r4", "r5", "r6", "r7", \
"r8", "r9", "r10", "r11", \
"r12", "r13", "sp", "acr"
};
{ "r0", "r1", "r2", "r3", \
"r4", "r5", "r6", "r7", \
"r8", "r9", "r10", "r11", \
"r12", "r13", "sp", "acr"
};
- static char *crisv32_sreg_names[] =
+ static c
onst c
har *crisv32_sreg_names[] =
{ "s0", "s1", "s2", "s3", \
"s4", "s5", "s6", "s7", \
"s8", "s9", "s10", "s11", \
{ "s0", "s1", "s2", "s3", \
"s4", "s5", "s6", "s7", \
"s8", "s9", "s10", "s11", \
@@
-1811,7
+1774,7
@@
static void
cris_extract_return_value (struct type *type, struct regcache *regcache,
gdb_byte *valbuf)
{
cris_extract_return_value (struct type *type, struct regcache *regcache,
gdb_byte *valbuf)
{
- struct gdbarch *gdbarch =
get_regcache_arch (regcache
);
+ struct gdbarch *gdbarch =
regcache->arch (
);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
ULONGEST val;
int len = TYPE_LENGTH (type);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
ULONGEST val;
int len = TYPE_LENGTH (type);
@@
-1994,7
+1957,7
@@
find_step_target (struct regcache *regcache, inst_env_type *inst_env)
int i;
int offset;
unsigned short insn;
int i;
int offset;
unsigned short insn;
- struct gdbarch *gdbarch =
get_regcache_arch (regcache
);
+ struct gdbarch *gdbarch =
regcache->arch (
);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
/* Create a local register image and set the initial state. */
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
/* Create a local register image and set the initial state. */
@@
-2060,12
+2023,12
@@
find_step_target (struct regcache *regcache, inst_env_type *inst_env)
digs through the opcodes in order to find all possible targets.
Either one ordinary target or two targets for branches may be found. */
digs through the opcodes in order to find all possible targets.
Either one ordinary target or two targets for branches may be found. */
-static
VEC (CORE_ADDR) *
+static
std::vector<CORE_ADDR>
cris_software_single_step (struct regcache *regcache)
{
cris_software_single_step (struct regcache *regcache)
{
- struct gdbarch *gdbarch =
get_regcache_arch (regcache
);
+ struct gdbarch *gdbarch =
regcache->arch (
);
inst_env_type inst_env;
inst_env_type inst_env;
-
VEC (CORE_ADDR) *next_pcs = NULL
;
+
std::vector<CORE_ADDR> next_pcs
;
/* Analyse the present instruction environment and insert
breakpoints. */
/* Analyse the present instruction environment and insert
breakpoints. */
@@
-2083,14
+2046,14
@@
cris_software_single_step (struct regcache *regcache)
CORE_ADDR next_pc
= (CORE_ADDR) inst_env.reg[gdbarch_pc_regnum (gdbarch)];
CORE_ADDR next_pc
= (CORE_ADDR) inst_env.reg[gdbarch_pc_regnum (gdbarch)];
-
VEC_safe_push (CORE_ADDR, next_pcs,
next_pc);
+
next_pcs.push_back (
next_pc);
if (inst_env.branch_found
&& (CORE_ADDR) inst_env.branch_break_address != next_pc)
{
CORE_ADDR branch_target_address
= (CORE_ADDR) inst_env.branch_break_address;
if (inst_env.branch_found
&& (CORE_ADDR) inst_env.branch_break_address != next_pc)
{
CORE_ADDR branch_target_address
= (CORE_ADDR) inst_env.branch_break_address;
-
VEC_safe_push (CORE_ADDR, next_pcs,
branch_target_address);
+
next_pcs.push_back (
branch_target_address);
}
}
}
}
@@
-3093,7
+3056,7
@@
move_reg_to_mem_movem_op (unsigned short inst, inst_env_type *inst_env)
inst_env->disable_interrupt = 0;
}
inst_env->disable_interrupt = 0;
}
-/* Handles the in
tructions that's not yet implemented, by setting
+/* Handles the in
structions that's not yet implemented, by setting
inst_env->invalid to true. */
static void
inst_env->invalid to true. */
static void
@@
-3785,19
+3748,6
@@
cris_gdb_func (struct gdbarch *gdbarch, enum cris_op_type op_type,
}
}
}
}
-/* This wrapper is to avoid cris_get_assembler being called before
- exec_bfd has been set. */
-
-static int
-cris_delayed_get_disassembler (bfd_vma addr, struct disassemble_info *info)
-{
- int (*print_insn) (bfd_vma addr, struct disassemble_info *info);
-
- print_insn = cris_get_disassembler (exec_bfd);
- gdb_assert (print_insn != NULL);
- return print_insn (addr, info);
-}
-
/* Originally from <asm/elf.h>. */
typedef unsigned char cris_elf_greg_t[4];
/* Originally from <asm/elf.h>. */
typedef unsigned char cris_elf_greg_t[4];
@@
-3813,7
+3763,7
@@
typedef cris_elf_greg_t crisv32_elf_gregset_t[CRISV32_ELF_NGREG];
static void
cris_supply_gregset (struct regcache *regcache, cris_elf_gregset_t *gregsetp)
{
static void
cris_supply_gregset (struct regcache *regcache, cris_elf_gregset_t *gregsetp)
{
- struct gdbarch *gdbarch =
get_regcache_arch (regcache
);
+ struct gdbarch *gdbarch =
regcache->arch (
);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
int i;
cris_elf_greg_t *regp = *gregsetp;
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
int i;
cris_elf_greg_t *regp = *gregsetp;
@@
-3822,7
+3772,7
@@
cris_supply_gregset (struct regcache *regcache, cris_elf_gregset_t *gregsetp)
knows about the actual size of each register so that's no problem. */
for (i = 0; i < NUM_GENREGS + NUM_SPECREGS; i++)
{
knows about the actual size of each register so that's no problem. */
for (i = 0; i < NUM_GENREGS + NUM_SPECREGS; i++)
{
- regcache
_raw_supply (regcache,
i, (char *)®p[i]);
+ regcache
->raw_supply (
i, (char *)®p[i]);
}
if (tdep->cris_version == 32)
}
if (tdep->cris_version == 32)
@@
-3830,8
+3780,8
@@
cris_supply_gregset (struct regcache *regcache, cris_elf_gregset_t *gregsetp)
/* Needed to set pseudo-register PC for CRISv32. */
/* FIXME: If ERP is in a delay slot at this point then the PC will
be wrong. Issue a warning to alert the user. */
/* Needed to set pseudo-register PC for CRISv32. */
/* FIXME: If ERP is in a delay slot at this point then the PC will
be wrong. Issue a warning to alert the user. */
- regcache
_raw_supply (regcache,
gdbarch_pc_regnum (gdbarch),
- (char *)®p[ERP_REGNUM]);
+ regcache
->raw_supply (
gdbarch_pc_regnum (gdbarch),
+
(char *)®p[ERP_REGNUM]);
if (*(char *)®p[ERP_REGNUM] & 0x1)
fprintf_unfiltered (gdb_stderr, "Warning: PC in delay slot\n");
if (*(char *)®p[ERP_REGNUM] & 0x1)
fprintf_unfiltered (gdb_stderr, "Warning: PC in delay slot\n");
@@
-3879,8
+3829,6
@@
static struct core_fns cris_elf_core_fns =
NULL /* next */
};
NULL /* next */
};
-extern initialize_file_ftype _initialize_cris_tdep; /* -Wmissing-prototypes */
-
void
_initialize_cris_tdep (void)
{
void
_initialize_cris_tdep (void)
{
@@
-3941,7
+3889,7
@@
cris_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
}
static void
}
static void
-set_cris_version (char *ignore_args, int from_tty,
+set_cris_version (c
onst c
har *ignore_args, int from_tty,
struct cmd_list_element *c)
{
struct gdbarch_info info;
struct cmd_list_element *c)
{
struct gdbarch_info info;
@@
-3956,7
+3904,7
@@
set_cris_version (char *ignore_args, int from_tty,
}
static void
}
static void
-set_cris_mode (char *ignore_args, int from_tty,
+set_cris_mode (c
onst c
har *ignore_args, int from_tty,
struct cmd_list_element *c)
{
struct gdbarch_info info;
struct cmd_list_element *c)
{
struct gdbarch_info info;
@@
-3969,7
+3917,7
@@
set_cris_mode (char *ignore_args, int from_tty,
}
static void
}
static void
-set_cris_dwarf2_cfi (char *ignore_args, int from_tty,
+set_cris_dwarf2_cfi (c
onst c
har *ignore_args, int from_tty,
struct cmd_list_element *c)
{
struct gdbarch_info info;
struct cmd_list_element *c)
{
struct gdbarch_info info;
@@
-4021,32
+3969,15
@@
cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
}
/* No matching architecture was found. Create a new one. */
}
/* No matching architecture was found. Create a new one. */
- tdep = XNEW (struct gdbarch_tdep);
+ tdep = XCNEW (struct gdbarch_tdep);
+ info.byte_order = BFD_ENDIAN_LITTLE;
gdbarch = gdbarch_alloc (&info, tdep);
tdep->cris_version = usr_cmd_cris_version;
tdep->cris_mode = usr_cmd_cris_mode;
tdep->cris_dwarf2_cfi = usr_cmd_cris_dwarf2_cfi;
gdbarch = gdbarch_alloc (&info, tdep);
tdep->cris_version = usr_cmd_cris_version;
tdep->cris_mode = usr_cmd_cris_mode;
tdep->cris_dwarf2_cfi = usr_cmd_cris_dwarf2_cfi;
- /* INIT shall ensure that the INFO.BYTE_ORDER is non-zero. */
- switch (info.byte_order)
- {
- case BFD_ENDIAN_LITTLE:
- /* Ok. */
- break;
-
- case BFD_ENDIAN_BIG:
- /* Cris is always little endian, but the user could have forced
- big endian with "set endian". */
- return 0;
-
- default:
- internal_error (__FILE__, __LINE__,
- _("cris_gdbarch_init: unknown byte order in info"));
- }
-
set_gdbarch_return_value (gdbarch, cris_return_value);
set_gdbarch_return_value (gdbarch, cris_return_value);
-
set_gdbarch_sp_regnum (gdbarch, 14);
/* Length of ordinary registers used in push_word and a few other
set_gdbarch_sp_regnum (gdbarch, 14);
/* Length of ordinary registers used in push_word and a few other
@@
-4128,10
+4059,6
@@
cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_breakpoint_kind_from_pc (gdbarch, cris_breakpoint_kind_from_pc);
set_gdbarch_sw_breakpoint_from_kind (gdbarch, cris_sw_breakpoint_from_kind);
set_gdbarch_breakpoint_kind_from_pc (gdbarch, cris_breakpoint_kind_from_pc);
set_gdbarch_sw_breakpoint_from_kind (gdbarch, cris_sw_breakpoint_from_kind);
- set_gdbarch_unwind_pc (gdbarch, cris_unwind_pc);
- set_gdbarch_unwind_sp (gdbarch, cris_unwind_sp);
- set_gdbarch_dummy_id (gdbarch, cris_dummy_id);
-
if (tdep->cris_dwarf2_cfi == 1)
{
/* Hook in the Dwarf-2 frame sniffer. */
if (tdep->cris_dwarf2_cfi == 1)
{
/* Hook in the Dwarf-2 frame sniffer. */
@@
-4151,10
+4078,5
@@
cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* Hook in ABI-specific overrides, if they have been registered. */
gdbarch_init_osabi (info, gdbarch);
/* Hook in ABI-specific overrides, if they have been registered. */
gdbarch_init_osabi (info, gdbarch);
- /* FIXME: cagney/2003-08-27: It should be possible to select a CRIS
- disassembler, even when there is no BFD. Does something like
- "gdb; target remote; disassmeble *0x123" work? */
- set_gdbarch_print_insn (gdbarch, cris_delayed_get_disassembler);
-
return gdbarch;
}
return gdbarch;
}
This page took
0.039364 seconds
and
4
git commands to generate.