/* Debug register code for x86 (i386 and x86-64).
- Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Copyright (C) 2009-2020 Free Software Foundation, Inc.
This file is part of GDB.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
+#ifndef NAT_X86_DREGS_H
+#define NAT_X86_DREGS_H
+
/* Support for hardware watchpoints and breakpoints using the x86
debug registers.
counts, and allow to watch regions up to 16 bytes long
(32 bytes on 64 bit hosts). */
-#ifndef X86_DREGS_H
-#define X86_DREGS_H 1
-/* Forward declaration. */
-enum target_hw_bp_type;
+#include "gdbsupport/break-common.h" /* target_hw_bp_type */
/* Low-level function vector. */
CORE_ADDR dr_mirror[DR_NADDR];
unsigned dr_status_mirror, dr_control_mirror;
- /* Reference counts for each debug register. */
+ /* Reference counts for each debug address register. */
int dr_ref_count[DR_NADDR];
};
-/* A macro to loop over all debug registers. */
-#define ALL_DEBUG_REGISTERS(i) for (i = 0; i < DR_NADDR; i++)
+/* A macro to loop over all debug address registers. */
+#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
Otherwise return false. */
extern int x86_dr_stopped_by_watchpoint (struct x86_debug_reg_state *state);
-#endif /* X86_DREGS_H */
+/* Return true if the inferior has some hardware breakpoint that
+ triggered. Otherwise return false. */
+extern int x86_dr_stopped_by_hw_breakpoint (struct x86_debug_reg_state *state);
+
+#endif /* NAT_X86_DREGS_H */