Add x86_debug_reg_state to gdbserver
This commit introduces a new function, x86_debug_reg_state, that shared x86 code can use to access the local mirror of a process's debug registers. This function already existed in GDB and was in use by GDB's x86_linux_prepare_to_resume. An equivalent was written for gdbserver and gdbserver's x86_linux_prepare_to_resume was modified to use it. gdb/ChangeLog: * x86-nat.h (x86_debug_reg_state): Move declaration to... * nat/x86-dregs.h (x86_debug_reg_state): New declaration. gdb/gdbserver/ChangeLog: * linux-x86-low.c (x86_debug_reg_state): New function. (x86_linux_prepare_to_resume): Use the above.
This commit is contained in:
parent
7b6690874f
commit
70a0bb6b59
5 changed files with 27 additions and 9 deletions
|
@ -1,3 +1,8 @@
|
|||
2015-03-24 Gary Benson <gbenson@redhat.com>
|
||||
|
||||
* x86-nat.h (x86_debug_reg_state): Move declaration to...
|
||||
* nat/x86-dregs.h (x86_debug_reg_state): New declaration.
|
||||
|
||||
2015-03-24 Gary Benson <gbenson@redhat.com>
|
||||
|
||||
* nat/linux-nat.h (current_lwp_ptid): New declaration.
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-03-24 Gary Benson <gbenson@redhat.com>
|
||||
|
||||
* linux-x86-low.c (x86_debug_reg_state): New function.
|
||||
(x86_linux_prepare_to_resume): Use the above.
|
||||
|
||||
2015-03-24 Gary Benson <gbenson@redhat.com>
|
||||
|
||||
* linux-low.c (current_lwp_ptid): New function.
|
||||
|
|
|
@ -776,6 +776,16 @@ x86_linux_new_thread (void)
|
|||
return info;
|
||||
}
|
||||
|
||||
/* See nat/x86-dregs.h. */
|
||||
|
||||
struct x86_debug_reg_state *
|
||||
x86_debug_reg_state (pid_t pid)
|
||||
{
|
||||
struct process_info *proc = find_process_pid (pid);
|
||||
|
||||
return &proc->priv->arch_private->debug_reg_state;
|
||||
}
|
||||
|
||||
/* Called when resuming a thread.
|
||||
If the debug regs have changed, update the thread's copies. */
|
||||
|
||||
|
@ -787,11 +797,9 @@ x86_linux_prepare_to_resume (struct lwp_info *lwp)
|
|||
|
||||
if (lwp->arch_private->debug_registers_changed)
|
||||
{
|
||||
int i;
|
||||
int pid = ptid_get_pid (ptid);
|
||||
struct process_info *proc = find_process_pid (pid);
|
||||
struct x86_debug_reg_state *state
|
||||
= &proc->priv->arch_private->debug_reg_state;
|
||||
= x86_debug_reg_state (ptid_get_pid (ptid));
|
||||
int i;
|
||||
|
||||
x86_linux_dr_set (ptid, DR_CONTROL, 0);
|
||||
|
||||
|
|
|
@ -92,6 +92,11 @@ struct x86_debug_reg_state
|
|||
#define ALL_DEBUG_ADDRESS_REGISTERS(i) \
|
||||
for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
|
||||
|
||||
/* Return a pointer to the local mirror of the debug registers of
|
||||
process PID. This function must be provided by the client
|
||||
if required. */
|
||||
extern struct x86_debug_reg_state *x86_debug_reg_state (pid_t pid);
|
||||
|
||||
/* Insert a watchpoint to watch a memory region which starts at
|
||||
address ADDR and whose length is LEN bytes. Watch memory accesses
|
||||
of the type TYPE. Return 0 on success, -1 on failure. */
|
||||
|
|
|
@ -44,11 +44,6 @@ extern void x86_set_debug_register_length (int len);
|
|||
|
||||
extern void x86_cleanup_dregs (void);
|
||||
|
||||
/* Return a pointer to the local mirror of the debug registers of
|
||||
process PID. */
|
||||
|
||||
extern struct x86_debug_reg_state *x86_debug_reg_state (pid_t pid);
|
||||
|
||||
/* Called whenever GDB is no longer debugging process PID. It deletes
|
||||
data structures that keep track of debug register state. */
|
||||
|
||||
|
|
Loading…
Reference in a new issue