Replace breakpoint_reinsert_addr by get_next_pcs operation in GDBServer

This patch in preparation for software single step support on ARM. It refactors
breakpoint_reinsert_addr into get_next_pcs so that multiple location can be
returned.

When software single stepping there can be multiple possible next addresses
because we're stepping over a conditional branch instruction, for example.

The operation get_next_pcs handles that by returning a vector of all the
possible next addresses.

Software breakpoints are installed at each location returned.

No regressions, tested on ubuntu 14.04 ARMv7 and x86.
With gdbserver-{native,extended} / { -marm -mthumb }

gdb/gdbserver/ChangeLog:

	* linux-aarch64-low.c (the_low_targets): Rename
	breakpoint_reinsert_addr to get_next_pcs.
	* linux-arm-low.c (the_low_targets): Likewise.
	* linux-bfin-low.c (the_low_targets): Likewise.
	* linux-cris-low.c (the_low_targets): Likewise.
	* linux-crisv32-low.c (the_low_targets): Likewise.
	* linux-low.c (can_software_single_step): Likewise.
	(install_software_single_step_breakpoints): New function.
	(start_step_over): Use install_software_single_step_breakpoints.
	* linux-low.h: New CORE_ADDR vector.
	(struct linux_target_ops) Rename breakpoint_reinsert_addr to
	get_next_pcs.
	* linux-mips-low.c (the_low_targets): Likewise.
	* linux-nios2-low.c (the_low_targets): Likewise.
	* linux-sparc-low.c (the_low_targets): Likewise.
This commit is contained in:
Antoine Tremblay 2015-12-18 11:33:58 -05:00
parent c9f203207d
commit fa5308bdcc
11 changed files with 53 additions and 13 deletions

View file

@ -124,6 +124,8 @@ struct process_info_private
struct lwp_info;
DEF_VEC_I (CORE_ADDR);
struct linux_target_ops
{
/* Architecture-specific setup. */
@ -153,7 +155,8 @@ struct linux_target_ops
/* See target.h for details. */
const gdb_byte *(*sw_breakpoint_from_kind) (int kind, int *size);
CORE_ADDR (*breakpoint_reinsert_addr) (void);
/* Find the next possible PCs after the current instruction executes. */
VEC (CORE_ADDR) *(*get_next_pcs) (CORE_ADDR pc, struct regcache *regcache);
int decr_pc_after_break;
int (*breakpoint_at) (CORE_ADDR pc);