[patch] mips-tdep: info registers

Aleksandar Ristovski
2009-02-12T16:24:07Z

[-- Attachment #1: Type: text/plain, Size: 677 bytes --]

Hello,

This is applicable to mips targets.

When using info registers $N command, gdb_assert will be
triggered if N falls in the raw register number area.
However, this is counter-intuitive.

The change simply maps raw-register number to pseudo
register number and continues as before.

-------------------------------------
Example: current situation

(gdb) info registers $1
../../gdb/mips-tdep.c:4307: internal-error:
mips_print_registers_info:
Assertion `regnum >= gdbarch_num_regs (current_gdbarch)'
failed.

Example: with the patch

(gdb) info registers $1
at: 0x8020000
--------------------------------------

Thanks,

Aleksandar Ristovski
QNX Software Systems

[-- Attachment #2: mips-tdep.c-info-registers-20090212.diff.ChangeLog --]
[-- Type: text/plain, Size: 146 bytes --]

2009-02-12 Aleksandar Ristovski <aristovski@qnx.com>

* mips-tdep.c (mips_print_registers_info): Map raw register number to
pseudo register.

[-- Attachment #3: mips-tdep.c-info-registers-20090212.diff --]
[-- Type: text/x-patch, Size: 743 bytes --]

Index: gdb/mips-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mips-tdep.c,v
retrieving revision 1.489
diff -u -p -r1.489 mips-tdep.c
--- gdb/mips-tdep.c 3 Jan 2009 05:57:52 -0000 1.489
+++ gdb/mips-tdep.c 12 Feb 2009 16:19:02 -0000
@@ -4601,7 +4601,9 @@ mips_print_registers_info (struct gdbarc
{
if (regnum != -1) /* do one specified register */
{
- gdb_assert (regnum >= gdbarch_num_regs (gdbarch));
+ if (regnum < gdbarch_num_regs (gdbarch)
+ && regnum >= 0)
+ regnum += gdbarch_num_regs (gdbarch); /* Print pseudo register. */
if (*(gdbarch_register_name (gdbarch, regnum)) == '\0')
error (_("Not a valid register for the current processor type"));