From 70a0bb6b590bcfe304fe082d421feb52e0a0d4dc Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Tue, 24 Mar 2015 14:05:43 +0000 Subject: [PATCH] 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. --- gdb/ChangeLog | 5 +++++ gdb/gdbserver/ChangeLog | 5 +++++ gdb/gdbserver/linux-x86-low.c | 16 ++++++++++++---- gdb/nat/x86-dregs.h | 5 +++++ gdb/x86-nat.h | 5 ----- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3ff9280..0be8425 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2015-03-24 Gary Benson + * 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 + * nat/linux-nat.h (current_lwp_ptid): New declaration. * linux-nat.c (current_lwp_ptid): New function. * x86-linux-nat.c: Include nat/linux-nat.h. diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 3e51d94..49477df 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,5 +1,10 @@ 2015-03-24 Gary Benson + * linux-x86-low.c (x86_debug_reg_state): New function. + (x86_linux_prepare_to_resume): Use the above. + +2015-03-24 Gary Benson + * linux-low.c (current_lwp_ptid): New function. * linux-x86-low.c: Include nat/linux-nat.h. (x86_dr_low_get_addr): Use current_lwp_ptid. diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c index 66dfc5d..fe4fd25 100644 --- a/gdb/gdbserver/linux-x86-low.c +++ b/gdb/gdbserver/linux-x86-low.c @@ -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); diff --git a/gdb/nat/x86-dregs.h b/gdb/nat/x86-dregs.h index a2b9926..61a97c8 100644 --- a/gdb/nat/x86-dregs.h +++ b/gdb/nat/x86-dregs.h @@ -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. */ diff --git a/gdb/x86-nat.h b/gdb/x86-nat.h index c8ebd74..dcfef36 100644 --- a/gdb/x86-nat.h +++ b/gdb/x86-nat.h @@ -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. */ -- 2.7.4