This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 4/4] Don't throw an error in 'info registers' for unavailable MIPS GP registers.
On Thursday, April 13, 2017 11:37:15 AM Luis Machado wrote:
> On 04/12/2017 01:37 PM, John Baldwin wrote:
> > index 674b5098b0..4ec0c31341 100644
> > --- a/gdb/mips-tdep.c
> > +++ b/gdb/mips-tdep.c
> > @@ -6533,8 +6533,14 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
> >
> > /* OK: get the data in raw format. */
> > if (!deprecated_frame_register_read (frame, regnum, raw_buffer))
> > - error (_("can't read register %d (%s)"),
> > - regnum, gdbarch_register_name (gdbarch, regnum));
> > + {
> > + fprintf_filtered (file, "%*.*s ",
> > + (int) mips_abi_regsize (gdbarch) * 2,
> > + (int) mips_abi_regsize (gdbarch) * 2,
> > + "<unavailable>");
> > + col++;
> > + continue;
> > + }
>
> What is the output you're getting in this case?
On FreeBSD (which doesn't support fir) I now get this:
O32:
(gdb) info registers
zero at v0 v1 a0 a1 a2 a3
R0 00000000 00000000 00000000 00000000 00000001 7fffecac 7fffecb4 004182c0
t0 t1 t2 t3 t4 t5 t6 t7
R8 00000000 00000000 00000061 2e9a1b76 00124f9b 00000001 00001000 00401964
s0 s1 s2 s3 s4 s5 s6 s7
R16 7fffecb4 00000001 7fffecac 00000000 00000000 00000000 00000000 00000000
t8 t9 k0 k1 gp sp s8 ra
R24 0000008d 004033d0 00000000 00000000 00420320 7ffeec60 00000000 00401980
sr lo hi bad cause pc
00008413 0000d0d7 000002d1 004033d0 00000024 004033d0
fsr fir
00000000 <unavail
N64:
(gdb) info registers
zero at v0 v1
R0 0000000000000000 0000000000000000 0000000000000000 0000000000000000
a0 a1 a2 a3
R4 0000000000000001 0000007fffffeb40 0000007fffffeb50 0000000120018030
a4 a5 a6 a7
R8 0000000000000000 0000000000000001 0000000000000000 0000000000000001
t0 t1 t2 t3
R12 0000000000000000 0000000000000000 0000000000000000 0000000160051940
s0 s1 s2 s3
R16 0000007fffffeb50 0000000000000001 0000007fffffeb40 0000000000000000
s4 s5 s6 s7
R20 0000000000000000 0000000000000000 0000000000000000 0000000000000000
t8 t9 k0 k1
R24 000000000000008d 00000001200035e8 0000000000000000 0000000000000000
gp sp s8 ra
R28 0000000120020090 0000007fffffead8 0000000000000000 00000001200020b4
sr lo hi bad
00000000008084b3 000000000000d0d7 00000000000002d1 0000007fffffeaa8
cause pc
0000000000000024 00000001200035e8
fsr fir
00000000 <unavailable>
It was more dire on a target that doesn't supply all registers. For example,
I have an out of tree target for FreeBSD kernels and stopped threads in
FreeBSD's kernel only supply a subset of GPRs. Without the patch examining
registers for a stopped thread looks like this:
(kgdb) info registers
zero at v0 v1
R0 0000000000000000 can't read register 91 (at)
with the patch it looks like this:
(kgdb) info registers
zero at v0 v1
R0 0000000000000000 <unavailable> <unavailable> <unavailable>
a0 a1 a2 a3
R4 <unavailable> <unavailable> <unavailable> <unavailable>
a4 a5 a6 a7
R8 <unavailable> <unavailable> <unavailable> <unavailable>
t0 t1 t2 t3
R12 <unavailable> <unavailable> <unavailable> <unavailable>
s0 s1 s2 s3
R16 00000000ffff00fa 0000000000000000 0000000000000000 0000010000000000
s4 s5 s6 s7
R20 00000000ffff00fa 0000000000000000 0000000000000000 0000010000000000
t8 t9 k0 k1
R24 0000007fffffefa0 <unavailable> <unavailable> <unavailable>
gp sp s8 ra
R28 0000000000000102 00000000fffd002e <unavailable> 0000007fffffefa0
sr lo hi bad
0000000000000010 <unavailable> <unavailable> <unavailable>
cause pc
<unavailable> 0000000000000000
fsr fir
<unavailable> <unavailable>
--
John Baldwin