[PATCH 1/9 v7] Introduce show_debug_regs

Gary Benson
2014-08-29T13:51:55Z

This commit adds a new global flag show_debug_regs to common-debug.h
to replace the flag debug_hw_points used by gdbserver and by the
Linux x86 and AArch64 ports, and to replace the flag maint_show_dr
used by the Linux MIPS port.

This patch is unchanged from the version I posted August 13:
https://sourceware.org/ml/gdb-patches/2014-08/msg00219.html

gdb/ChangeLog:

* common/common-debug.h (show_debug_regs): Declare.
* common/common-debug.c (show_debug_regs): Define.
* aarch64-linux-nat.c (debug_hw_points): Don't define. Replace
all uses with show_debug_regs. Replace all uses that considered
debug_hw_points as a multi-value integer with straight boolean
uses.
* i386-nat.c (debug_hw_points): Don't define. Replace all uses
with show_debug_regs.
* nat/i386-dregs.c (debug_hw_points): Don't declare. Replace
all uses with show_debug_regs.
* mips-linux-nat.c (maint_show_dr): Don't define. Replace all
uses with show_debug_regs.

gdb/gdbserver/ChangeLog:

* server.h (debug_hw_points): Don't declare.
* server.c (debug_hw_points): Don't define. Replace all uses
with show_debug_regs.
* linux-aarch64-low.c (debug_hw_points): Don't define. Replace
all uses with show_debug_regs.
---
gdb/ChangeLog | 15 +++++++++++++++
gdb/aarch64-linux-nat.c | 30 +++++++++++++-----------------
gdb/common/common-debug.c | 4 ++++
gdb/common/common-debug.h | 5 +++++
gdb/gdbserver/ChangeLog | 8 ++++++++
gdb/gdbserver/linux-aarch64-low.c | 19 ++++++++-----------
gdb/gdbserver/server.c | 7 ++-----
gdb/gdbserver/server.h | 1 -
gdb/i386-nat.c | 5 +----
gdb/mips-linux-nat.c | 10 +++-------
gdb/nat/i386-dregs.c | 13 ++++---------
11 files changed, 63 insertions(+), 54 deletions(-)

diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
index 1184197..1c1832f 100644
--- a/gdb/aarch64-linux-nat.c
+++ b/gdb/aarch64-linux-nat.c
@@ -119,10 +119,6 @@ get_thread_id (ptid_t ptid)
static int aarch64_num_bp_regs;
static int aarch64_num_wp_regs;

-/* Debugging of hardware breakpoint/watchpoint support. */
-
-static int debug_hw_points;
-
/* Each bit of a variable of this type is used to indicate whether a
hardware breakpoint or watchpoint setting has been changed since
the last update.
@@ -363,7 +359,7 @@ debug_reg_change_callback (struct lwp_info *lwp, void *ptr)
if (info == NULL)
info = lwp->arch_private = XCNEW (struct arch_lwp_info);

- if (debug_hw_points)
+ if (show_debug_regs)
{
fprintf_unfiltered (gdb_stdlog,
"debug_reg_change_callback: \n\tOn entry:\n");
@@ -392,7 +388,7 @@ debug_reg_change_callback (struct lwp_info *lwp, void *ptr)
if (!lwp->stopped)
linux_stop_lwp (lwp);

- if (debug_hw_points)
+ if (show_debug_regs)
{
fprintf_unfiltered (gdb_stdlog,
"\tOn exit:\n\tpid%d, dr_changed_bp=0x%s, "
@@ -677,7 +673,7 @@ aarch64_linux_prepare_to_resume (struct lwp_info *lwp)
struct aarch64_debug_reg_state *state
= aarch64_get_debug_reg_state (ptid_get_pid (lwp->ptid));

- if (debug_hw_points)
+ if (show_debug_regs)
fprintf_unfiltered (gdb_stdlog, "prepare_to_resume thread %d\n", tid);

/* Watchpoints. */
@@ -1200,7 +1196,7 @@ aarch64_linux_insert_hw_breakpoint (struct target_ops *self,
const int len = 4;
const int type = hw_execute;

- if (debug_hw_points)
+ if (show_debug_regs)
fprintf_unfiltered
(gdb_stdlog,
"insert_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
@@ -1208,7 +1204,7 @@ aarch64_linux_insert_hw_breakpoint (struct target_ops *self,

ret = aarch64_handle_breakpoint (type, addr, len, 1 /* is_insert */);

- if (debug_hw_points > 1)
+ if (show_debug_regs)
{
struct aarch64_debug_reg_state *state
= aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
@@ -1233,14 +1229,14 @@ aarch64_linux_remove_hw_breakpoint (struct target_ops *self,
const int len = 4;
const int type = hw_execute;

- if (debug_hw_points)
+ if (show_debug_regs)
fprintf_unfiltered
(gdb_stdlog, "remove_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
(unsigned long) addr, len);

ret = aarch64_handle_breakpoint (type, addr, len, 0 /* is_insert */);

- if (debug_hw_points > 1)
+ if (show_debug_regs)
{
struct aarch64_debug_reg_state *state
= aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
@@ -1297,7 +1293,7 @@ aarch64_handle_unaligned_watchpoint (int type, CORE_ADDR addr, int len,
ret = aarch64_dr_state_remove_one_point (state, type, aligned_addr,
aligned_len);

- if (debug_hw_points)
+ if (show_debug_regs)
fprintf_unfiltered (gdb_stdlog,
"handle_unaligned_watchpoint: is_insert: %d\n"
" aligned_addr: 0x%08lx, aligned_len: %d\n"
@@ -1335,7 +1331,7 @@ aarch64_linux_insert_watchpoint (struct target_ops *self,
{
int ret;

- if (debug_hw_points)
+ if (show_debug_regs)
fprintf_unfiltered (gdb_stdlog,
"insert_watchpoint on entry (addr=0x%08lx, len=%d)\n",
(unsigned long) addr, len);
@@ -1344,7 +1340,7 @@ aarch64_linux_insert_watchpoint (struct target_ops *self,

ret = aarch64_handle_watchpoint (type, addr, len, 1 /* is_insert */);

- if (debug_hw_points > 1)
+ if (show_debug_regs)
{
struct aarch64_debug_reg_state *state
= aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
@@ -1368,7 +1364,7 @@ aarch64_linux_remove_watchpoint (struct target_ops *self,
{
int ret;

- if (debug_hw_points)
+ if (show_debug_regs)
fprintf_unfiltered (gdb_stdlog,
"remove_watchpoint on entry (addr=0x%08lx, len=%d)\n",
(unsigned long) addr, len);
@@ -1377,7 +1373,7 @@ aarch64_linux_remove_watchpoint (struct target_ops *self,

ret = aarch64_handle_watchpoint (type, addr, len, 0 /* is_insert */);

- if (debug_hw_points > 1)
+ if (show_debug_regs)
{
struct aarch64_debug_reg_state *state
= aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
@@ -1496,7 +1492,7 @@ add_show_debug_regs_command (void)
/* A maintenance command to enable printing the internal DRi mirror
variables. */
add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
- &debug_hw_points, _("\
+ &show_debug_regs, _("\
Set whether to show variables that mirror the AArch64 debug registers."), _("\
Show whether to show variables that mirror the AArch64 debug registers."), _("\
Use \"on\" to enable, \"off\" to disable.\n\
diff --git a/gdb/common/common-debug.c b/gdb/common/common-debug.c
index 660fc70..5cac3bf 100644
--- a/gdb/common/common-debug.c
+++ b/gdb/common/common-debug.c
@@ -26,6 +26,10 @@

/* See common/common-debug.h. */

+int show_debug_regs;
+
+/* See common/common-debug.h. */
+
void
debug_printf (const char *fmt, ...)
{
diff --git a/gdb/common/common-debug.h b/gdb/common/common-debug.h
index c2bb192..348b0e3 100644
--- a/gdb/common/common-debug.h
+++ b/gdb/common/common-debug.h
@@ -20,6 +20,11 @@
#ifndef COMMON_DEBUG_H
#define COMMON_DEBUG_H

+/* Set to nonzero to enable debugging of hardware breakpoint/
+ watchpoint support code. */
+
+extern int show_debug_regs;
+
/* Print a formatted message to the appropriate channel for
debugging output for the client. */

diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c
index 6066e15..ca096b0 100644
--- a/gdb/gdbserver/linux-aarch64-low.c
+++ b/gdb/gdbserver/linux-aarch64-low.c
@@ -267,9 +267,6 @@ aarch64_store_fpregset (struct regcache *regcache, const void *buf)
supply_register (regcache, AARCH64_V0_REGNO + i, &regset->vregs[i]);
}

-/* Debugging of hardware breakpoint/watchpoint support. */
-extern int debug_hw_points;
-
/* Enable miscellaneous debugging output. The name is historical - it
was originally used to debug LinuxThreads support. */
extern int debug_threads;
@@ -626,7 +623,7 @@ debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr)
dr_changed_t *dr_changed_ptr;
dr_changed_t dr_changed;

- if (debug_hw_points)
+ if (show_debug_regs)
{
fprintf (stderr, "debug_reg_change_callback: \n\tOn entry:\n");
fprintf (stderr, "\tpid%d, tid: %ld, dr_changed_bp=0x%llx, "
@@ -677,7 +674,7 @@ debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr)
linux_stop_lwp (lwp);
}

- if (debug_hw_points)
+ if (show_debug_regs)
{
fprintf (stderr, "\tOn exit:\n\tpid%d, tid: %ld, dr_changed_bp=0x%llx, "
"dr_changed_wp=0x%llx\n",
@@ -917,7 +914,7 @@ aarch64_handle_unaligned_watchpoint (enum target_hw_bp_type type,
ret = aarch64_dr_state_remove_one_point (state, type, aligned_addr,
aligned_len);

- if (debug_hw_points)
+ if (show_debug_regs)
fprintf (stderr,
"handle_unaligned_watchpoint: is_insert: %d\n"
" aligned_addr: 0x%s, aligned_len: %d\n"
@@ -973,7 +970,7 @@ aarch64_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
int ret;
enum target_hw_bp_type targ_type;

- if (debug_hw_points)
+ if (show_debug_regs)
fprintf (stderr, "insert_point on entry (addr=0x%08lx, len=%d)\n",
(unsigned long) addr, len);

@@ -987,7 +984,7 @@ aarch64_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
ret =
aarch64_handle_breakpoint (targ_type, addr, len, 1 /* is_insert */);

- if (debug_hw_points > 1)
+ if (show_debug_regs > 1)
aarch64_show_debug_reg_state (aarch64_get_debug_reg_state (),
"insert_point", addr, len, targ_type);

@@ -1009,7 +1006,7 @@ aarch64_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
int ret;
enum target_hw_bp_type targ_type;

- if (debug_hw_points)
+ if (show_debug_regs)
fprintf (stderr, "remove_point on entry (addr=0x%08lx, len=%d)\n",
(unsigned long) addr, len);

@@ -1024,7 +1021,7 @@ aarch64_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
ret =
aarch64_handle_breakpoint (targ_type, addr, len, 0 /* is_insert */);

- if (debug_hw_points > 1)
+ if (show_debug_regs > 1)
aarch64_show_debug_reg_state (aarch64_get_debug_reg_state (),
"remove_point", addr, len, targ_type);

@@ -1150,7 +1147,7 @@ aarch64_linux_prepare_to_resume (struct lwp_info *lwp)
struct aarch64_debug_reg_state *state
= &proc->private->arch_private->debug_reg_state;

- if (debug_hw_points)
+ if (show_debug_regs)
fprintf (stderr, "prepare_to_resume thread %ld\n", lwpid_of (thread));

/* Watchpoints. */
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index 81cb2e1..8d95761 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -69,9 +69,6 @@ int disable_randomization = 1;

static char **program_argv, **wrapper_argv;

-/* Enable debugging of h/w breakpoint/watchpoint support. */
-int debug_hw_points;
-
int pass_signals[GDB_SIGNAL_LAST];
int program_signals[GDB_SIGNAL_LAST];
int program_signals_p;
@@ -1012,12 +1009,12 @@ handle_monitor_command (char *mon, char *own_buf)
}
else if (strcmp (mon, "set debug-hw-points 1") == 0)
{
- debug_hw_points = 1;
+ show_debug_regs = 1;
monitor_output ("H/W point debugging output enabled.\n");
}
else if (strcmp (mon, "set debug-hw-points 0") == 0)
{
- debug_hw_points = 0;
+ show_debug_regs = 0;
monitor_output ("H/W point debugging output disabled.\n");
}
else if (strcmp (mon, "set remote-debug 1") == 0)
diff --git a/gdb/gdbserver/server.h b/gdb/gdbserver/server.h
index 812f533..ed54f77 100644
--- a/gdb/gdbserver/server.h
+++ b/gdb/gdbserver/server.h
@@ -82,7 +82,6 @@ extern ptid_t cont_thread;
extern ptid_t general_thread;

extern int server_waiting;
-extern int debug_hw_points;
extern int pass_signals[];
extern int program_signals[];
extern int program_signals_p;
diff --git a/gdb/i386-nat.c b/gdb/i386-nat.c
index 499fffb..4a64759 100644
--- a/gdb/i386-nat.c
+++ b/gdb/i386-nat.c
@@ -33,9 +33,6 @@
The functions below implement debug registers sharing by reference
counts, and allow to watch regions up to 16 bytes long. */

-/* Whether or not to print the mirrored debug registers. */
-int debug_hw_points;
-
/* Low-level function vector. */
struct i386_dr_low_type i386_dr_low;

@@ -272,7 +269,7 @@ add_show_debug_regs_command (void)
/* A maintenance command to enable printing the internal DRi mirror
variables. */
add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
- &debug_hw_points, _("\
+ &show_debug_regs, _("\
Set whether to show variables that mirror the x86 debug registers."), _("\
Show whether to show variables that mirror the x86 debug registers."), _("\
Use \"on\" to enable, \"off\" to disable.\n\
diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
index 88faa1e..daf2307 100644
--- a/gdb/mips-linux-nat.c
+++ b/gdb/mips-linux-nat.c
@@ -50,10 +50,6 @@
we'll clear this and use PTRACE_PEEKUSER instead. */
static int have_ptrace_regsets = 1;

-/* Whether or not to print the mirrored debug registers. */
-
-static int maint_show_dr;
-
/* Saved function pointers to fetch and store a single register using
PTRACE_PEEKUSER and PTRACE_POKEUSER. */

@@ -689,7 +685,7 @@ mips_linux_insert_watchpoint (struct target_ops *self,
watch_mirror = regs;
retval = write_watchpoint_regs ();

- if (maint_show_dr)
+ if (show_debug_regs)
mips_show_dr ("insert_watchpoint", addr, len, type);

return retval;
@@ -737,7 +733,7 @@ mips_linux_remove_watchpoint (struct target_ops *self,

retval = write_watchpoint_regs ();

- if (maint_show_dr)
+ if (show_debug_regs)
mips_show_dr ("remove_watchpoint", addr, len, type);

return retval;
@@ -774,7 +770,7 @@ _initialize_mips_linux_nat (void)
struct target_ops *t;

add_setshow_boolean_cmd ("show-debug-regs", class_maintenance,
- &maint_show_dr, _("\
+ &show_debug_regs, _("\
Set whether to show variables that mirror the mips debug registers."), _("\
Show whether to show variables that mirror the mips debug registers."), _("\
Use \"on\" to enable, \"off\" to disable.\n\
diff --git a/gdb/nat/i386-dregs.c b/gdb/nat/i386-dregs.c
index e3272cd..7afe09b 100644
--- a/gdb/nat/i386-dregs.c
+++ b/gdb/nat/i386-dregs.c
@@ -175,11 +175,6 @@
/* Types of operations supported by i386_handle_nonaligned_watchpoint. */
typedef enum { WP_INSERT, WP_REMOVE, WP_COUNT } i386_wp_op_t;

-#ifndef GDBSERVER
-/* Whether or not to print the mirrored debug registers. */
-extern int debug_hw_points;
-#endif
-
/* Print the values of the mirrored debug registers. */

static void
@@ -511,7 +506,7 @@ i386_dr_insert_watchpoint (struct i386_debug_reg_state *state,
if (retval == 0)
i386_update_inferior_debug_regs (state, &local_state);

- if (debug_hw_points)
+ if (show_debug_regs)
i386_show_dr (state, "insert_watchpoint", addr, len, type);

return retval;
@@ -550,7 +545,7 @@ i386_dr_remove_watchpoint (struct i386_debug_reg_state *state,
if (retval == 0)
i386_update_inferior_debug_regs (state, &local_state);

- if (debug_hw_points)
+ if (show_debug_regs)
i386_show_dr (state, "remove_watchpoint", addr, len, type);

return retval;
@@ -640,12 +635,12 @@ i386_dr_stopped_data_address (struct i386_debug_reg_state *state,
{
addr = i386_dr_low_get_addr (i);
rc = 1;
- if (debug_hw_points)
+ if (show_debug_regs)
i386_show_dr (state, "watchpoint_hit", addr, -1, hw_write);
}
}

- if (debug_hw_points && addr == 0)
+ if (show_debug_regs && addr == 0)
i386_show_dr (state, "stopped_data_addr", 0, 0, hw_write);

if (rc)
--
1.7.1