2003-05-31 Andrew Cagney <cagney@redhat.com>

* mips-tdep.c (print_gp_register_row): Replace do_gp_register_row.
	(print_fp_register_row): Replace do_fp_register_row.
	(mips_print_fp_register): Add "file" and "frame" parameters.
	(mips_print_register): Add "file" and "frame" parameters.
	(mips_print_registers_info): Replace mips_do_registers_info.
	(mips_gdbarch_init): Set print_registers_info instead of
	deprecated_do_registers_info.
	(mips_read_fp_register_single): Add "frame" parameter.
	(mips_read_fp_register_double): Add "frame" parameter.
This commit is contained in:
Andrew Cagney 2003-05-31 16:36:28 +00:00
parent 709134492b
commit e11c53d2ed
2 changed files with 84 additions and 68 deletions

View File

@ -1,3 +1,15 @@
2003-05-31 Andrew Cagney <cagney@redhat.com>
* mips-tdep.c (print_gp_register_row): Replace do_gp_register_row.
(print_fp_register_row): Replace do_fp_register_row.
(mips_print_fp_register): Add "file" and "frame" parameters.
(mips_print_register): Add "file" and "frame" parameters.
(mips_print_registers_info): Replace mips_do_registers_info.
(mips_gdbarch_init): Set print_registers_info instead of
deprecated_do_registers_info.
(mips_read_fp_register_single): Add "frame" parameter.
(mips_read_fp_register_double): Add "frame" parameter.
2003-05-31 Mark Kettenis <kettenis@gnu.org> 2003-05-31 Mark Kettenis <kettenis@gnu.org>
* i386-tdep.c (i386_register_name): Check for MMX registers first. * i386-tdep.c (i386_register_name): Check for MMX registers first.

View File

@ -350,8 +350,6 @@ mips_stack_argsize (void)
int gdb_print_insn_mips (bfd_vma, disassemble_info *); int gdb_print_insn_mips (bfd_vma, disassemble_info *);
static void mips_print_register (int, int);
static mips_extra_func_info_t heuristic_proc_desc (CORE_ADDR, CORE_ADDR, static mips_extra_func_info_t heuristic_proc_desc (CORE_ADDR, CORE_ADDR,
struct frame_info *, int); struct frame_info *, int);
@ -372,9 +370,6 @@ static mips_extra_func_info_t find_proc_desc (CORE_ADDR pc,
static CORE_ADDR after_prologue (CORE_ADDR pc, static CORE_ADDR after_prologue (CORE_ADDR pc,
mips_extra_func_info_t proc_desc); mips_extra_func_info_t proc_desc);
static void mips_read_fp_register_single (int regno, char *rare_buffer);
static void mips_read_fp_register_double (int regno, char *rare_buffer);
static struct type *mips_float_register_type (void); static struct type *mips_float_register_type (void);
static struct type *mips_double_register_type (void); static struct type *mips_double_register_type (void);
@ -3921,12 +3916,13 @@ mips_double_register_type (void)
into rare_buffer. */ into rare_buffer. */
static void static void
mips_read_fp_register_single (int regno, char *rare_buffer) mips_read_fp_register_single (struct frame_info *frame, int regno,
char *rare_buffer)
{ {
int raw_size = REGISTER_RAW_SIZE (regno); int raw_size = REGISTER_RAW_SIZE (regno);
char *raw_buffer = alloca (raw_size); char *raw_buffer = alloca (raw_size);
if (!frame_register_read (deprecated_selected_frame, regno, raw_buffer)) if (!frame_register_read (frame, regno, raw_buffer))
error ("can't read register %d (%s)", regno, REGISTER_NAME (regno)); error ("can't read register %d (%s)", regno, REGISTER_NAME (regno));
if (raw_size == 8) if (raw_size == 8)
{ {
@ -3952,7 +3948,8 @@ mips_read_fp_register_single (int regno, char *rare_buffer)
register. */ register. */
static void static void
mips_read_fp_register_double (int regno, char *rare_buffer) mips_read_fp_register_double (struct frame_info *frame, int regno,
char *rare_buffer)
{ {
int raw_size = REGISTER_RAW_SIZE (regno); int raw_size = REGISTER_RAW_SIZE (regno);
@ -3960,7 +3957,7 @@ mips_read_fp_register_double (int regno, char *rare_buffer)
{ {
/* We have a 64-bit value for this register, and we should use /* We have a 64-bit value for this register, and we should use
all 64 bits. */ all 64 bits. */
if (!frame_register_read (deprecated_selected_frame, regno, rare_buffer)) if (!frame_register_read (frame, regno, rare_buffer))
error ("can't read register %d (%s)", regno, REGISTER_NAME (regno)); error ("can't read register %d (%s)", regno, REGISTER_NAME (regno));
} }
else else
@ -3974,19 +3971,20 @@ mips_read_fp_register_double (int regno, char *rare_buffer)
each register. */ each register. */
if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
{ {
mips_read_fp_register_single (regno, rare_buffer + 4); mips_read_fp_register_single (frame, regno, rare_buffer + 4);
mips_read_fp_register_single (regno + 1, rare_buffer); mips_read_fp_register_single (frame, regno + 1, rare_buffer);
} }
else else
{ {
mips_read_fp_register_single (regno, rare_buffer); mips_read_fp_register_single (frame, regno, rare_buffer);
mips_read_fp_register_single (regno + 1, rare_buffer + 4); mips_read_fp_register_single (frame, regno + 1, rare_buffer + 4);
} }
} }
} }
static void static void
mips_print_fp_register (int regnum) mips_print_fp_register (struct ui_file *file, struct frame_info *frame,
int regnum)
{ /* do values for FP (float) regs */ { /* do values for FP (float) regs */
char *raw_buffer; char *raw_buffer;
double doub, flt1, flt2; /* doubles extracted from raw hex data */ double doub, flt1, flt2; /* doubles extracted from raw hex data */
@ -3994,94 +3992,94 @@ mips_print_fp_register (int regnum)
raw_buffer = (char *) alloca (2 * REGISTER_RAW_SIZE (FP0_REGNUM)); raw_buffer = (char *) alloca (2 * REGISTER_RAW_SIZE (FP0_REGNUM));
printf_filtered ("%s:", REGISTER_NAME (regnum)); fprintf_filtered (file, "%s:", REGISTER_NAME (regnum));
printf_filtered ("%*s", 4 - (int) strlen (REGISTER_NAME (regnum)), ""); fprintf_filtered (file, "%*s", 4 - (int) strlen (REGISTER_NAME (regnum)),
"");
if (REGISTER_RAW_SIZE (regnum) == 4 || mips2_fp_compat ()) if (REGISTER_RAW_SIZE (regnum) == 4 || mips2_fp_compat ())
{ {
/* 4-byte registers: Print hex and floating. Also print even /* 4-byte registers: Print hex and floating. Also print even
numbered registers as doubles. */ numbered registers as doubles. */
mips_read_fp_register_single (regnum, raw_buffer); mips_read_fp_register_single (frame, regnum, raw_buffer);
flt1 = unpack_double (mips_float_register_type (), raw_buffer, &inv1); flt1 = unpack_double (mips_float_register_type (), raw_buffer, &inv1);
print_scalar_formatted (raw_buffer, builtin_type_uint32, 'x', 'w', print_scalar_formatted (raw_buffer, builtin_type_uint32, 'x', 'w', file);
gdb_stdout);
printf_filtered (" flt: "); fprintf_filtered (file, " flt: ");
if (inv1) if (inv1)
printf_filtered (" <invalid float> "); fprintf_filtered (file, " <invalid float> ");
else else
printf_filtered ("%-17.9g", flt1); fprintf_filtered (file, "%-17.9g", flt1);
if (regnum % 2 == 0) if (regnum % 2 == 0)
{ {
mips_read_fp_register_double (regnum, raw_buffer); mips_read_fp_register_double (frame, regnum, raw_buffer);
doub = unpack_double (mips_double_register_type (), raw_buffer, doub = unpack_double (mips_double_register_type (), raw_buffer,
&inv2); &inv2);
printf_filtered (" dbl: "); fprintf_filtered (file, " dbl: ");
if (inv2) if (inv2)
printf_filtered ("<invalid double>"); fprintf_filtered (file, "<invalid double>");
else else
printf_filtered ("%-24.17g", doub); fprintf_filtered (file, "%-24.17g", doub);
} }
} }
else else
{ {
/* Eight byte registers: print each one as hex, float and double. */ /* Eight byte registers: print each one as hex, float and double. */
mips_read_fp_register_single (regnum, raw_buffer); mips_read_fp_register_single (frame, regnum, raw_buffer);
flt1 = unpack_double (mips_float_register_type (), raw_buffer, &inv1); flt1 = unpack_double (mips_float_register_type (), raw_buffer, &inv1);
mips_read_fp_register_double (regnum, raw_buffer); mips_read_fp_register_double (frame, regnum, raw_buffer);
doub = unpack_double (mips_double_register_type (), raw_buffer, &inv2); doub = unpack_double (mips_double_register_type (), raw_buffer, &inv2);
print_scalar_formatted (raw_buffer, builtin_type_uint64, 'x', 'g', print_scalar_formatted (raw_buffer, builtin_type_uint64, 'x', 'g', file);
gdb_stdout);
printf_filtered (" flt: "); fprintf_filtered (file, " flt: ");
if (inv1) if (inv1)
printf_filtered ("<invalid float>"); fprintf_filtered (file, "<invalid float>");
else else
printf_filtered ("%-17.9g", flt1); fprintf_filtered (file, "%-17.9g", flt1);
printf_filtered (" dbl: "); fprintf_filtered (file, " dbl: ");
if (inv2) if (inv2)
printf_filtered ("<invalid double>"); fprintf_filtered (file, "<invalid double>");
else else
printf_filtered ("%-24.17g", doub); fprintf_filtered (file, "%-24.17g", doub);
} }
} }
static void static void
mips_print_register (int regnum, int all) mips_print_register (struct ui_file *file, struct frame_info *frame,
int regnum, int all)
{ {
char raw_buffer[MAX_REGISTER_SIZE]; char raw_buffer[MAX_REGISTER_SIZE];
int offset; int offset;
if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT) if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
{ {
mips_print_fp_register (regnum); mips_print_fp_register (file, frame, regnum);
return; return;
} }
/* Get the data in raw format. */ /* Get the data in raw format. */
if (!frame_register_read (deprecated_selected_frame, regnum, raw_buffer)) if (!frame_register_read (frame, regnum, raw_buffer))
{ {
printf_filtered ("%s: [Invalid]", REGISTER_NAME (regnum)); fprintf_filtered (file, "%s: [Invalid]", REGISTER_NAME (regnum));
return; return;
} }
fputs_filtered (REGISTER_NAME (regnum), gdb_stdout); fputs_filtered (REGISTER_NAME (regnum), file);
/* The problem with printing numeric register names (r26, etc.) is that /* The problem with printing numeric register names (r26, etc.) is that
the user can't use them on input. Probably the best solution is to the user can't use them on input. Probably the best solution is to
fix it so that either the numeric or the funky (a2, etc.) names fix it so that either the numeric or the funky (a2, etc.) names
are accepted on input. */ are accepted on input. */
if (regnum < MIPS_NUMREGS) if (regnum < MIPS_NUMREGS)
printf_filtered ("(r%d): ", regnum); fprintf_filtered (file, "(r%d): ", regnum);
else else
printf_filtered (": "); fprintf_filtered (file, ": ");
if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
offset = REGISTER_RAW_SIZE (regnum) - REGISTER_VIRTUAL_SIZE (regnum); offset = REGISTER_RAW_SIZE (regnum) - REGISTER_VIRTUAL_SIZE (regnum);
@ -4090,18 +4088,19 @@ mips_print_register (int regnum, int all)
print_scalar_formatted (raw_buffer + offset, print_scalar_formatted (raw_buffer + offset,
REGISTER_VIRTUAL_TYPE (regnum), REGISTER_VIRTUAL_TYPE (regnum),
'x', 0, gdb_stdout); 'x', 0, file);
} }
/* Replacement for generic do_registers_info. /* Replacement for generic do_registers_info.
Print regs in pretty columns. */ Print regs in pretty columns. */
static int static int
do_fp_register_row (int regnum) print_fp_register_row (struct ui_file *file, struct frame_info *frame,
int regnum)
{ {
printf_filtered (" "); fprintf_filtered (file, " ");
mips_print_fp_register (regnum); mips_print_fp_register (file, frame, regnum);
printf_filtered ("\n"); fprintf_filtered (file, "\n");
return regnum + 1; return regnum + 1;
} }
@ -4109,7 +4108,8 @@ do_fp_register_row (int regnum)
/* Print a row's worth of GP (int) registers, with name labels above */ /* Print a row's worth of GP (int) registers, with name labels above */
static int static int
do_gp_register_row (int regnum) print_gp_register_row (struct ui_file *file, struct frame_info *frame,
int regnum)
{ {
/* do values for GP (int) regs */ /* do values for GP (int) regs */
char raw_buffer[MAX_REGISTER_SIZE]; char raw_buffer[MAX_REGISTER_SIZE];
@ -4120,19 +4120,20 @@ do_gp_register_row (int regnum)
/* For GP registers, we print a separate row of names above the vals */ /* For GP registers, we print a separate row of names above the vals */
printf_filtered (" "); fprintf_filtered (file, " ");
for (col = 0; col < ncols && regnum < numregs; regnum++) for (col = 0; col < ncols && regnum < numregs; regnum++)
{ {
if (*REGISTER_NAME (regnum) == '\0') if (*REGISTER_NAME (regnum) == '\0')
continue; /* unused register */ continue; /* unused register */
if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT) if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
break; /* end the row: reached FP register */ break; /* end the row: reached FP register */
printf_filtered (MIPS_REGSIZE == 8 ? "%17s" : "%9s", fprintf_filtered (file, MIPS_REGSIZE == 8 ? "%17s" : "%9s",
REGISTER_NAME (regnum)); REGISTER_NAME (regnum));
col++; col++;
} }
printf_filtered (start_regnum < MIPS_NUMREGS ? "\n R%-4d" : "\n ", fprintf_filtered (file,
start_regnum); /* print the R0 to R31 names */ start_regnum < MIPS_NUMREGS ? "\n R%-4d" : "\n ",
start_regnum); /* print the R0 to R31 names */
regnum = start_regnum; /* go back to start of row */ regnum = start_regnum; /* go back to start of row */
/* now print the values in hex, 4 or 8 to the row */ /* now print the values in hex, 4 or 8 to the row */
@ -4143,7 +4144,7 @@ do_gp_register_row (int regnum)
if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT) if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
break; /* end row: reached FP register */ break; /* end row: reached FP register */
/* OK: get the data in raw format. */ /* OK: get the data in raw format. */
if (!frame_register_read (deprecated_selected_frame, regnum, raw_buffer)) if (!frame_register_read (frame, regnum, raw_buffer))
error ("can't read register %d (%s)", regnum, REGISTER_NAME (regnum)); error ("can't read register %d (%s)", regnum, REGISTER_NAME (regnum));
/* pad small registers */ /* pad small registers */
for (byte = 0; byte < (MIPS_REGSIZE - REGISTER_VIRTUAL_SIZE (regnum)); byte++) for (byte = 0; byte < (MIPS_REGSIZE - REGISTER_VIRTUAL_SIZE (regnum)); byte++)
@ -4153,17 +4154,17 @@ do_gp_register_row (int regnum)
for (byte = REGISTER_RAW_SIZE (regnum) - REGISTER_VIRTUAL_SIZE (regnum); for (byte = REGISTER_RAW_SIZE (regnum) - REGISTER_VIRTUAL_SIZE (regnum);
byte < REGISTER_RAW_SIZE (regnum); byte < REGISTER_RAW_SIZE (regnum);
byte++) byte++)
printf_filtered ("%02x", (unsigned char) raw_buffer[byte]); fprintf_filtered (file, "%02x", (unsigned char) raw_buffer[byte]);
else else
for (byte = REGISTER_VIRTUAL_SIZE (regnum) - 1; for (byte = REGISTER_VIRTUAL_SIZE (regnum) - 1;
byte >= 0; byte >= 0;
byte--) byte--)
printf_filtered ("%02x", (unsigned char) raw_buffer[byte]); fprintf_filtered (file, "%02x", (unsigned char) raw_buffer[byte]);
printf_filtered (" "); fprintf_filtered (file, " ");
col++; col++;
} }
if (col > 0) /* ie. if we actually printed anything... */ if (col > 0) /* ie. if we actually printed anything... */
printf_filtered ("\n"); fprintf_filtered (file, "\n");
return regnum; return regnum;
} }
@ -4171,15 +4172,16 @@ do_gp_register_row (int regnum)
/* MIPS_DO_REGISTERS_INFO(): called by "info register" command */ /* MIPS_DO_REGISTERS_INFO(): called by "info register" command */
static void static void
mips_do_registers_info (int regnum, int fpregs) mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
struct frame_info *frame, int regnum, int all)
{ {
if (regnum != -1) /* do one specified register */ if (regnum != -1) /* do one specified register */
{ {
if (*(REGISTER_NAME (regnum)) == '\0') if (*(REGISTER_NAME (regnum)) == '\0')
error ("Not a valid register for the current processor type"); error ("Not a valid register for the current processor type");
mips_print_register (regnum, 0); mips_print_register (file, frame, regnum, 0);
printf_filtered ("\n"); fprintf_filtered (file, "\n");
} }
else else
/* do all (or most) registers */ /* do all (or most) registers */
@ -4188,12 +4190,14 @@ mips_do_registers_info (int regnum, int fpregs)
while (regnum < NUM_REGS) while (regnum < NUM_REGS)
{ {
if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT) if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
if (fpregs) /* true for "INFO ALL-REGISTERS" command */ {
regnum = do_fp_register_row (regnum); /* FP regs */ if (all) /* true for "INFO ALL-REGISTERS" command */
else regnum = print_fp_register_row (file, frame, regnum);
regnum += MIPS_NUMREGS; /* skip floating point regs */ else
regnum += MIPS_NUMREGS; /* skip floating point regs */
}
else else
regnum = do_gp_register_row (regnum); /* GP (int) regs */ regnum = print_gp_register_row (file, frame, regnum);
} }
} }
} }
@ -5962,7 +5966,7 @@ mips_gdbarch_init (struct gdbarch_info info,
set_gdbarch_register_virtual_type (gdbarch, mips_register_virtual_type); set_gdbarch_register_virtual_type (gdbarch, mips_register_virtual_type);
set_gdbarch_register_virtual_size (gdbarch, generic_register_size); set_gdbarch_register_virtual_size (gdbarch, generic_register_size);
set_gdbarch_deprecated_do_registers_info (gdbarch, mips_do_registers_info); set_gdbarch_print_registers_info (gdbarch, mips_print_registers_info);
set_gdbarch_pc_in_sigtramp (gdbarch, mips_pc_in_sigtramp); set_gdbarch_pc_in_sigtramp (gdbarch, mips_pc_in_sigtramp);
/* Hook in OS ABI-specific overrides, if they have been registered. */ /* Hook in OS ABI-specific overrides, if they have been registered. */