aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/mips-tdep.c20
2 files changed, 25 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0b9d3bf..52d6181 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,12 @@
2007-06-13 Daniel Jacobowitz <dan@codesourcery.com>
+ * mips-tdep.c (mips_print_register): Remove unused ALL argument.
+ (print_gp_register_row): Stop before printing a register bigger
+ than the ABI register size.
+ (mips_print_registers_info): Update call to mips_print_register.
+
+2007-06-13 Daniel Jacobowitz <dan@codesourcery.com>
+
* expression.h (enum exp_opcode): Document a register name for
OP_REGISTER.
* parse.c (write_dollar_variable): Write the register name for
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index db1c198..63e4eea 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -3956,7 +3956,7 @@ mips_print_fp_register (struct ui_file *file, struct frame_info *frame,
static void
mips_print_register (struct ui_file *file, struct frame_info *frame,
- int regnum, int all)
+ int regnum)
{
struct gdbarch *gdbarch = get_frame_arch (frame);
gdb_byte raw_buffer[MAX_REGISTER_SIZE];
@@ -4037,6 +4037,18 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
if (TYPE_CODE (register_type (gdbarch, regnum)) ==
TYPE_CODE_FLT)
break; /* end the row: reached FP register */
+ /* Large registers are handled separately. */
+ if (register_size (current_gdbarch, regnum)
+ > mips_abi_regsize (current_gdbarch))
+ {
+ if (col > 0)
+ break; /* End the row before this register. */
+
+ /* Print this register on a row by itself. */
+ mips_print_register (file, frame, regnum);
+ fprintf_filtered (file, "\n");
+ return regnum + 1;
+ }
if (col == 0)
fprintf_filtered (file, " ");
fprintf_filtered (file,
@@ -4066,6 +4078,10 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
if (TYPE_CODE (register_type (gdbarch, regnum)) ==
TYPE_CODE_FLT)
break; /* end row: reached FP register */
+ if (register_size (current_gdbarch, regnum)
+ > mips_abi_regsize (current_gdbarch))
+ break; /* End row: large register. */
+
/* OK: get the data in raw format. */
if (!frame_register_read (frame, regnum, raw_buffer))
error (_("can't read register %d (%s)"),
@@ -4107,7 +4123,7 @@ mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
if (*(gdbarch_register_name (current_gdbarch, regnum)) == '\0')
error (_("Not a valid register for the current processor type"));
- mips_print_register (file, frame, regnum, 0);
+ mips_print_register (file, frame, regnum);
fprintf_filtered (file, "\n");
}
else