Remove v850_dbtrap_breakpoint_from_pc

v850 has two functions to install to gdbarch_breakpoint_from_pc,
and it selects one according to info.bfd_arch_info->mach.  However,
we can select the kind/length of breakpoint instruction inside
v850_breakpoint_from_pc by gdbarch_bfd_arch_info (gdbarch)->mach.
This patch is to do that, and remove v850_dbtrap_breakpoint_from_pc.

gdb:

2016-08-30  Yao Qi  <yao.qi@linaro.org>

	* v850-tdep.c (v850_breakpoint_from_pc): Use the right
	breakpoint instruction.
	(v850_dbtrap_breakpoint_from_pc): Remove.
	(v850_gdbarch_init): Update.
This commit is contained in:
Yao Qi
2016-10-10 10:28:30 +01:00
parent 7b3860278c
commit ff12a6593a
2 changed files with 30 additions and 26 deletions

View File

@ -1,3 +1,10 @@
2016-10-10 Yao Qi <yao.qi@linaro.org>
* v850-tdep.c (v850_breakpoint_from_pc): Use the right
breakpoint instruction.
(v850_dbtrap_breakpoint_from_pc): Remove.
(v850_gdbarch_init): Update.
2016-10-08 Simon Marchi <simon.marchi@polymtl.ca> 2016-10-08 Simon Marchi <simon.marchi@polymtl.ca>
* ui-out.c (push_level): Remove "id" parameter. * ui-out.c (push_level): Remove "id" parameter.

View File

@ -1172,24 +1172,31 @@ static const unsigned char *
v850_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, v850_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
int *lenptr) int *lenptr)
{ {
static unsigned char breakpoint[] = { 0x85, 0x05 }; *lenptr = 2;
*lenptr = sizeof (breakpoint); switch (gdbarch_bfd_arch_info (gdbarch)->mach)
return breakpoint; {
} case bfd_mach_v850e2:
case bfd_mach_v850e2v3:
/* Implement software breakpoints by using the dbtrap instruction. case bfd_mach_v850e3v5:
{
/* Implement software breakpoints by using the dbtrap instruction.
Older architectures had no such instruction. For those, an Older architectures had no such instruction. For those, an
unconditional branch to self instruction is used. */ unconditional branch to self instruction is used. */
static const unsigned char * static unsigned char dbtrap_breakpoint[] = { 0x40, 0xf8 };
v850_dbtrap_breakpoint_from_pc (struct gdbarch *gdbarch,
CORE_ADDR *pcptr, int *lenptr) return dbtrap_breakpoint;
{ }
static unsigned char breakpoint[] = { 0x40, 0xf8 }; break;
default:
{
static unsigned char breakpoint[] = { 0x85, 0x05 };
*lenptr = sizeof (breakpoint);
return breakpoint; return breakpoint;
}
break;
}
} }
static struct v850_frame_cache * static struct v850_frame_cache *
@ -1440,18 +1447,8 @@ v850_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_addr_bit (gdbarch, 4 * TARGET_CHAR_BIT); set_gdbarch_addr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
set_gdbarch_inner_than (gdbarch, core_addr_lessthan); set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
switch (info.bfd_arch_info->mach)
{
case bfd_mach_v850e2:
case bfd_mach_v850e2v3:
case bfd_mach_v850e3v5:
set_gdbarch_breakpoint_from_pc (gdbarch, v850_dbtrap_breakpoint_from_pc);
break;
default:
set_gdbarch_breakpoint_from_pc (gdbarch, v850_breakpoint_from_pc);
break;
}
set_gdbarch_breakpoint_from_pc (gdbarch, v850_breakpoint_from_pc);
set_gdbarch_return_value (gdbarch, v850_return_value); set_gdbarch_return_value (gdbarch, v850_return_value);
set_gdbarch_push_dummy_call (gdbarch, v850_push_dummy_call); set_gdbarch_push_dummy_call (gdbarch, v850_push_dummy_call);
set_gdbarch_skip_prologue (gdbarch, v850_skip_prologue); set_gdbarch_skip_prologue (gdbarch, v850_skip_prologue);