diff mbox

[v4,2/2] Provide completer for "info registers"

Message ID 87388kn0zt.fsf@br87z6lw.de.ibm.com
State New
Headers show

Commit Message

Andreas Arnez Dec. 12, 2014, 7:04 p.m. UTC
On Fri, Dec 12 2014, Doug Evans wrote:

> I'm seeing the following new failure on amd64-linux:
>
> (gdb) complete info registers ^M
> info registers ah^M
> info registers al^M
> ...
> info registers ymm9^M
> info registers ymm9h^M
> (gdb) FAIL: gdb.base/completion.exp: complete 'info registers '

Oops.  This is because the user registers have 3-digit numbers and thus
occupy the first column in the output of "maint print user-registers".
This doesn't match the latest version of the regexp in completion.exp.

In fact, this is a useful finding, because the output of "maint print
user-registers" should actually be indented.

Here's a suggested fix.


-- >8 --
Subject: [PATCH] Fix indentation of "maint print user-registers"

This fixes a failure of the test case "complete 'info registers '" in
completion.exp on architectures where the user registers have numbers
above 99.  In that case the output of "maint print user-registers" was
no longer indented, and the regexp in the test case failed to add them
to the list of expected completion results.  The fix also swaps the
columns "Name" and "Nr", such that the indentation is always the same,
and to be consistent with the output of "maint print registers".

gdb/ChangeLog:

	* user-regs.c (maintenance_print_user_registers): Swap "Nr" and
	"Name" columns.  Assure that the output is always indented.

gdb/testsuite/ChangeLog:

	* gdb.base/completion.exp: Adjust to format changes of "maint
	print user-registers".

Comments

Pedro Alves Dec. 15, 2014, 12:41 p.m. UTC | #1
On 12/12/2014 07:04 PM, Andreas Arnez wrote:
> On Fri, Dec 12 2014, Doug Evans wrote:
> 
>> I'm seeing the following new failure on amd64-linux:
>>
>> (gdb) complete info registers ^M
>> info registers ah^M
>> info registers al^M
>> ...
>> info registers ymm9^M
>> info registers ymm9h^M
>> (gdb) FAIL: gdb.base/completion.exp: complete 'info registers '
> 
> Oops.  This is because the user registers have 3-digit numbers and thus
> occupy the first column in the output of "maint print user-registers".
> This doesn't match the latest version of the regexp in completion.exp.
> 
> In fact, this is a useful finding, because the output of "maint print
> user-registers" should actually be indented.
> 
> Here's a suggested fix.

OK, thanks.

Thanks,
Pedro Alves
diff mbox

Patch

diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index 08e1a52..9c79a29 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -145,17 +145,14 @@  set regs_output [capture_command_output "mt print registers" \
 append regs_output "\n"
 append regs_output [capture_command_output "mt print reggroups" \
 			".*Group.*Type\[^\n]*\n"]
+append regs_output "\n"
+append regs_output [capture_command_output "mt print user-registers" \
+		     ".*Name.*Nr\[^\n]*\n"]
 set all_regs {}
 foreach {- reg} [regexp -all -inline -line {^\s+(\w+)} $regs_output] {
     lappend all_regs $reg
 }
 
-set regs_output [capture_command_output "mt print user-registers" \
-		     ".*Nr.*Name\[^\n]*\n"]
-foreach {- reg} [regexp -all -inline -line {^\s+\d+\s+(\w+)} $regs_output] {
-    lappend all_regs $reg
-}
-
 set all_regs [join [lsort -unique $all_regs]]
 
 # ... and then compare them to the completion of "info registers".
diff --git a/gdb/user-regs.c b/gdb/user-regs.c
index adaa959..6cdea16 100644
--- a/gdb/user-regs.c
+++ b/gdb/user-regs.c
@@ -229,9 +229,9 @@  maintenance_print_user_registers (char *args, int from_tty)
   regs = gdbarch_data (gdbarch, user_regs_data);
   regnum = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
 
-  fprintf_unfiltered (gdb_stdout, " Nr  Name\n");
+  fprintf_unfiltered (gdb_stdout, " %-11s %3s\n", "Name", "Nr");
   for (reg = regs->first; reg != NULL; reg = reg->next, ++regnum)
-    fprintf_unfiltered (gdb_stdout, "%3d  %s\n", regnum, reg->name);
+    fprintf_unfiltered (gdb_stdout, " %-11s %3d\n", reg->name, regnum);
 }
 
 extern initialize_file_ftype _initialize_user_regs; /* -Wmissing-prototypes */