mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 03:29:47 +08:00
range stepping: gdbserver (x86 GNU/Linux)
This patch adds support for range stepping to GDBserver, teaching it about vCont;r. It'd be easy to enable this for all hardware single-step targets without needing the linux_target_ops hook, however, at least PPC needs special care, due to the fact that PPC atomic sequences can't be hardware single-stepped through, a thing which GDBserver doesn't know about. So this leaves the support limited to x86/x86_64. gdb/ 2013-05-23 Pedro Alves <palves@redhat.com> * NEWS: Mention GDBserver range stepping support. gdb/gdbserver/ 2013-05-23 Yao Qi <yao@codesourcery.com> Pedro Alves <palves@redhat.com> * linux-low.c (lwp_in_step_range): New function. (linux_wait_1): If the thread was range stepping and stopped outside the stepping range, report the stop to GDB. Otherwise, continue stepping. Add range stepping debug output. (linux_set_resume_request): Copy the step range from the resume request to the lwp. (linux_supports_range_stepping): New. (linux_target_ops) <supports_range_stepping>: Set to linux_supports_range_stepping. * linux-low.h (struct linux_target_ops) <supports_range_stepping>: New field. (struct lwp_info) <step_range_start, step_range_end>: New fields. * linux-x86-low.c (x86_supports_range_stepping): New. (the_low_target) <supports_range_stepping>: Set to x86_supports_range_stepping. * server.c (handle_v_cont): Handle 'r' action. (handle_v_requests): Append ";r" if the target supports range stepping. * target.h (struct thread_resume) <step_range_start, step_range_end>: New fields. (struct target_ops) <supports_range_stepping>: New field. (target_supports_range_stepping): New macro.
This commit is contained in:
@ -166,6 +166,8 @@ struct linux_target_ops
|
||||
for use as a fast tracepoint. */
|
||||
int (*get_min_fast_tracepoint_insn_len) (void);
|
||||
|
||||
/* Returns true if the low target supports range stepping. */
|
||||
int (*supports_range_stepping) (void);
|
||||
};
|
||||
|
||||
extern struct linux_target_ops the_low_target;
|
||||
@ -235,6 +237,12 @@ struct lwp_info
|
||||
level on this process was a single-step. */
|
||||
int stepping;
|
||||
|
||||
/* Range to single step within. This is a copy of the step range
|
||||
passed along the last resume request. See 'struct
|
||||
thread_resume'. */
|
||||
CORE_ADDR step_range_start; /* Inclusive */
|
||||
CORE_ADDR step_range_end; /* Exclusive */
|
||||
|
||||
/* If this flag is set, we need to set the event request flags the
|
||||
next time we see this LWP stop. */
|
||||
int must_set_ptrace_flags;
|
||||
|
Reference in New Issue
Block a user