From fa5308bdcc4967861d1277b45205c2623b154a64 Mon Sep 17 00:00:00 2001 From: Antoine Tremblay Date: Fri, 18 Dec 2015 11:33:58 -0500 Subject: 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. --- gdb/gdbserver/linux-low.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'gdb/gdbserver/linux-low.h') diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h index c211a37..cd455a8 100644 --- a/gdb/gdbserver/linux-low.h +++ b/gdb/gdbserver/linux-low.h @@ -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); -- cgit v1.1