aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndreas Arnez <arnez@linux.vnet.ibm.com>2014-12-12 17:11:22 +0100
committerAndreas Krebbel <krebbel@linux.vnet.ibm.com>2014-12-12 17:11:22 +0100
commitf5b95c01fbe709f73ca3ba60136ff973dcb706a5 (patch)
treeb4aaae0ca99aab145b7245b0d0ca5946c2b805f6 /gdb
parent3e29f34a4eef29f5b159749ccb1efb8867b2e651 (diff)
downloadbinutils-f5b95c01fbe709f73ca3ba60136ff973dcb706a5.zip
binutils-f5b95c01fbe709f73ca3ba60136ff973dcb706a5.tar.gz
binutils-f5b95c01fbe709f73ca3ba60136ff973dcb706a5.tar.bz2
Add new GDB command "maint print user-registers"
This adds a command for listing the "user" registers. So far GDB offered no means of determining the set of user registers and omitted them from all other register listings. gdb/ChangeLog: * user-regs.c: Include "arch-utils.h", "command.h", and "cli/cli-cmds.h". (maintenance_print_user_registers): New. (_initialize_user_regs): Register new "maint print user-registers" subcommand. * NEWS: Mention new GDB command "maint print user-registers". gdb/doc/ChangeLog: * gdb.texinfo: Document "maint print user-registers".
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/NEWS3
-rw-r--r--gdb/doc/ChangeLog4
-rw-r--r--gdb/doc/gdb.texinfo12
-rw-r--r--gdb/user-regs.c24
5 files changed, 52 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1dc180a..f757618 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2014-12-12 Andreas Arnez <arnez@linux.vnet.ibm.com>
+
+ * user-regs.c: Include "arch-utils.h", "command.h", and
+ "cli/cli-cmds.h".
+ (maintenance_print_user_registers): New.
+ (_initialize_user_regs): Register new "maint print user-registers"
+ subcommand.
+ * NEWS: Mention new GDB command "maint print user-registers".
+
2014-12-12 Maciej W. Rozycki <macro@codesourcery.com>
Maciej W. Rozycki <macro@mips.com>
Pedro Alves <pedro@codesourcery.com>
diff --git a/gdb/NEWS b/gdb/NEWS
index 6a2cb9b..a47dfbf 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -45,6 +45,9 @@ add-auto-load-scripts-directory directory
Add entries to the list of directories from which to load auto-loaded
scripts.
+maint print user-registers
+ List all currently available "user" registers.
+
* On resume, GDB now always passes the signal the program had stopped
for to the thread the signal was sent to, even if the user changed
threads before resuming. Previously GDB would often (but not
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 14b2e53..b8152df 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,7 @@
+2014-12-12 Andreas Arnez <arnez@linux.vnet.ibm.com>
+
+ * gdb.texinfo: Document "maint print user-registers".
+
2014-12-08 Doug Evans <dje@google.com>
* python.texi (Objfiles In Python): Document Objfile.owner.
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 670c369..4986a68 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -10256,6 +10256,7 @@ the selected stack frame. The @var{regname} may be any register name valid on
the machine you are using, with or without the initial @samp{$}.
@end table
+@anchor{standard registers}
@cindex stack pointer register
@cindex program counter register
@cindex process status register
@@ -33435,6 +33436,17 @@ If @var{regexp} is specified, only print object files whose names
match @var{regexp}. For each object file, this command prints its name,
address in memory, and all of its psymtabs and symtabs.
+@kindex maint print user-registers
+@cindex user registers
+@item maint print user-registers
+List all currently available @dfn{user registers}. User registers
+typically provide alternate names for actual hardware registers. They
+include the four ``standard'' registers @code{$fp}, @code{$pc},
+@code{$sp}, and @code{$ps}. @xref{standard registers}. User
+registers can be used in expressions in the same way as the canonical
+register names, but only the latter are listed by the @code{info
+registers} and @code{maint print registers} commands.
+
@kindex maint print section-scripts
@cindex info for known .debug_gdb_scripts-loaded scripts
@item maint print section-scripts [@var{regexp}]
diff --git a/gdb/user-regs.c b/gdb/user-regs.c
index 35d64ec..adaa959 100644
--- a/gdb/user-regs.c
+++ b/gdb/user-regs.c
@@ -23,6 +23,9 @@
#include "user-regs.h"
#include "gdbtypes.h"
#include "frame.h"
+#include "arch-utils.h"
+#include "command.h"
+#include "cli/cli-cmds.h"
/* A table of user registers.
@@ -215,10 +218,31 @@ value_of_user_reg (int regnum, struct frame_info *frame)
return reg->read (frame, reg->baton);
}
+static void
+maintenance_print_user_registers (char *args, int from_tty)
+{
+ struct gdbarch *gdbarch = get_current_arch ();
+ struct gdb_user_regs *regs;
+ struct user_reg *reg;
+ int regnum;
+
+ regs = gdbarch_data (gdbarch, user_regs_data);
+ regnum = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
+
+ fprintf_unfiltered (gdb_stdout, " Nr Name\n");
+ for (reg = regs->first; reg != NULL; reg = reg->next, ++regnum)
+ fprintf_unfiltered (gdb_stdout, "%3d %s\n", regnum, reg->name);
+}
+
extern initialize_file_ftype _initialize_user_regs; /* -Wmissing-prototypes */
void
_initialize_user_regs (void)
{
user_regs_data = gdbarch_data_register_post_init (user_regs_init);
+
+ add_cmd ("user-registers", class_maintenance,
+ maintenance_print_user_registers,
+ _("List the names of the current user registers.\n"),
+ &maintenanceprintlist);
}