This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [RFA] infcmd.c print vector registers in hex only
Andrew Cagney writes:
> > Elena Zannoni writes:
> > >
> > > Doing this simplification allows to get rid of a function (for now,
> > > more later) in rs6000-tdep.c. Such function is entirely a duplicate of
> > > do_registers_info, except for this patch.
> > >
> > > The reason behind this is that vector registers use up a lot of
> > > screen real estate, especially the 128 bit ones (altivec registers).
> > >
> > > Elena
> > >
> >
> > To clarify:
> > With this patch each register is printed like this:
> > (gdb) info reg vr0
> > vr0 {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0,
> > 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0,
> > 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}}
> >
> > while w/o the patch:
> > (gdb) info reg vr0
> > vr0 {uint128 = 0x00000000000000000000000000000000, v4_float = {0x0,
> > 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0,
> > 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}} {
> > uint128 = 0x00000000000000000000000000000000, v4_float = {0, 0, 0, 0},
> > v4_int32 = {0, 0, 0, 0}, v8_int16 = {0, 0, 0, 0, 0, 0, 0, 0},
> > v16_int8 = '\0' <repeats 15 times>}
>
> Er, yes. The old style just looks silly :-)
>
>
> > > + /* Print the register in hex. */
> > > val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
> > > gdb_stdout, 'x', 1, 0, Val_pretty_default);
> > > - printf_filtered ("\t");
> > > - val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
> > > - gdb_stdout, 0, 1, 0, Val_pretty_default);
> > > + /* If not a vector register, print it also in decimal. */
> > > + if (TYPE_VECTOR (REGISTER_VIRTUAL_TYPE (i)) == 0)
> > > + {
> > > + printf_filtered ("\t");
> > > + val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
> > > + gdb_stdout, 0, 1, 0, Val_pretty_default);
> > > + }
>
> The (old) comment should probably, also, be fixed. That isn't printing
> the value in decimal.
>
Ok. I committed the following:
Index: infcmd.c
===================================================================
RCS file: /cvs/uberbaum/gdb/infcmd.c,v
retrieving revision 1.52
diff -u -p -r1.52 infcmd.c
--- infcmd.c 16 Aug 2002 00:27:45 -0000 1.52
+++ infcmd.c 20 Aug 2002 16:28:11 -0000
@@ -1632,14 +1632,19 @@ do_registers_info (int regnum, int print
}
printf_filtered (")");
}
- /* Else print as integer in hex and in decimal. */
else
{
+ /* Print the register in hex. */
val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
gdb_stdout, 'x', 1, 0, Val_pretty_default);
- printf_filtered ("\t");
- val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
- gdb_stdout, 0, 1, 0, Val_pretty_default);
+ /* If not a vector register, print it also according to its
+ natural format. */
+ if (TYPE_VECTOR (REGISTER_VIRTUAL_TYPE (i)) == 0)
+ {
+ printf_filtered ("\t");
+ val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
+ gdb_stdout, 0, 1, 0, Val_pretty_default);
+ }
}
/* The SPARC wants to print even-numbered float regs as doubles