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:
Gary Benson 2015-03-24 14:05:43 +00:00
parent 7b6690874f
commit 70a0bb6b59
5 changed files with 27 additions and 9 deletions

View file

@ -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.

View file

@ -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.

View file

@ -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);

View file

@ -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. */

View file

@ -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. */