aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver/linux-low.h
diff options
context:
space:
mode:
authorAntoine Tremblay <antoine.tremblay@ericsson.com>2015-12-18 11:33:58 -0500
committerAntoine Tremblay <antoine.tremblay@ericsson.com>2015-12-18 11:33:58 -0500
commitfa5308bdcc4967861d1277b45205c2623b154a64 (patch)
treeef7f8c9ae03a5754106957d4f75946d9ac48cb80 /gdb/gdbserver/linux-low.h
parentc9f203207d418f72217f4bc0997acd809a0479ce (diff)
downloadgdb-fa5308bdcc4967861d1277b45205c2623b154a64.zip
gdb-fa5308bdcc4967861d1277b45205c2623b154a64.tar.gz
gdb-fa5308bdcc4967861d1277b45205c2623b154a64.tar.bz2
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.
Diffstat (limited to 'gdb/gdbserver/linux-low.h')
-rw-r--r--gdb/gdbserver/linux-low.h5
1 files changed, 4 insertions, 1 deletions
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);