diff options
author | Gary Benson <gbenson@redhat.com> | 2014-06-16 12:18:41 +0100 |
---|---|---|
committer | Gary Benson <gbenson@redhat.com> | 2014-06-18 11:46:35 +0100 |
commit | b9228891286aec649c0c53d9b2eff0d5bea7f642 (patch) | |
tree | 68eb2790bd78834fa60278b7437f6cdedcc6f6c2 /gdb/gdbserver/i386-low.h | |
parent | a1aa2221cbe340d23c6abf4d68cb509aa16cf8c0 (diff) | |
download | gdb-b9228891286aec649c0c53d9b2eff0d5bea7f642.zip gdb-b9228891286aec649c0c53d9b2eff0d5bea7f642.tar.gz gdb-b9228891286aec649c0c53d9b2eff0d5bea7f642.tar.bz2 |
Create nat/i386-dregs.h
This commit moves code to be shared from i386-{nat,low}.[ch]
into a new file, nat/i386-dregs.h.
gdb/
2014-06-18 Gary Benson <gbenson@redhat.com>
* nat/i386-dregs.h: New file.
* Makefile.in (HFILES_NO_SRCDIR): Add the above.
* i386-nat.h (i386-dregs.h): New include.
(DR_FIRSTADDR): Now in i386-dregs.h.
(DR_LASTADDR): Likewise.
(DR_NADDR): Likewise.
(DR_STATUS): Likewise.
(DR_CONTROL): Likewise.
(i386_debug_reg_state): Likewise.
* i386-nat.c (ALL_DEBUG_REGISTERS): Likewise.
gdb/gdbserver/
2014-06-18 Gary Benson <gbenson@redhat.com>
* i386-low.h (i386-dregs.h): New include.
(DR_FIRSTADDR): Now in i386-dregs.h.
(DR_LASTADDR): Likewise.
(DR_NADDR): Likewise.
(DR_STATUS): Likewise.
(DR_CONTROL): Likewise.
(i386_debug_reg_state): Likewise.
(i386_dr_insert_watchpoint): Likewise.
(i386_dr_remove_watchpoint): Likewise.
(i386_dr_region_ok_for_watchpoint): Likewise.
(i386_dr_stopped_data_address): Likewise.
(i386_dr_stopped_by_watchpoint): Likewise.
* i386-low.c (ALL_DEBUG_REGISTERS): Likewise.
Diffstat (limited to 'gdb/gdbserver/i386-low.h')
-rw-r--r-- | gdb/gdbserver/i386-low.h | 66 |
1 files changed, 2 insertions, 64 deletions
diff --git a/gdb/gdbserver/i386-low.h b/gdb/gdbserver/i386-low.h index 3d3feb3..71f7c32 100644 --- a/gdb/gdbserver/i386-low.h +++ b/gdb/gdbserver/i386-low.h @@ -17,74 +17,12 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* Support for hardware watchpoints and breakpoints using the i386 - debug registers. - - This provides several functions for inserting and removing - hardware-assisted breakpoints and watchpoints, testing if one or - more of the watchpoints triggered and at what address, checking - whether a given region can be watched, etc. - - The functions below implement debug registers sharing by reference - counts, and allow to watch regions up to 16 bytes long - (32 bytes on 64 bit hosts). */ - -/* Debug registers' indices. */ -#define DR_FIRSTADDR 0 -#define DR_LASTADDR 3 -#define DR_NADDR 4 /* The number of debug address registers. */ -#define DR_STATUS 6 /* Index of debug status register (DR6). */ -#define DR_CONTROL 7 /* Index of debug control register (DR7). */ - -/* Global state needed to track h/w watchpoints. */ - -struct i386_debug_reg_state -{ - /* Mirror the inferior's DRi registers. We keep the status and - control registers separated because they don't hold addresses. - Note that since we can change these mirrors while threads are - running, we never trust them to explain a cause of a trap. - For that, we need to peek directly in the inferior registers. */ - CORE_ADDR dr_mirror[DR_NADDR]; - unsigned dr_status_mirror, dr_control_mirror; - - /* Reference counts for each debug register. */ - int dr_ref_count[DR_NADDR]; -}; + +#include "nat/i386-dregs.h" /* Initialize STATE. */ extern void i386_low_init_dregs (struct i386_debug_reg_state *state); -/* 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. */ -extern int i386_dr_insert_watchpoint (struct i386_debug_reg_state *state, - enum target_hw_bp_type type, - CORE_ADDR addr, - int len); - -/* Remove a watchpoint that watched the memory region which starts at - address ADDR, whose length is LEN bytes, and for accesses of the - type TYPE. Return 0 on success, -1 on failure. */ -extern int i386_dr_remove_watchpoint (struct i386_debug_reg_state *state, - enum target_hw_bp_type type, - CORE_ADDR addr, - int len); - -/* Return non-zero if we can watch a memory region that starts at - address ADDR and whose length is LEN bytes. */ -extern int i386_dr_region_ok_for_watchpoint (struct i386_debug_reg_state *state, - CORE_ADDR addr, int len); - -/* If the inferior has some break/watchpoint that triggered, set the - address associated with that break/watchpoint and return true. - Otherwise, return false. */ -extern int i386_dr_stopped_data_address (struct i386_debug_reg_state *state, - CORE_ADDR *addr_p); - -/* Return true if the inferior has some watchpoint that triggered. - Otherwise return false. */ -extern int i386_dr_stopped_by_watchpoint (struct i386_debug_reg_state *state); /* Each target needs to provide several low-level functions that will be called to insert watchpoints and hardware breakpoints |