This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [RFA/rfc] blockframe.c: dummy frames unwind and pseudoregs
- From: Elena Zannoni <ezannoni at redhat dot com>
- To: Andrew Cagney <ac131313 at ges dot redhat dot com>
- Cc: Elena Zannoni <ezannoni at redhat dot com>,gdb-patches at sources dot redhat dot com
- Date: Thu, 22 Aug 2002 18:24:13 -0400
- Subject: Re: [RFA/rfc] blockframe.c: dummy frames unwind and pseudoregs
- References: <15717.1260.204796.69744@localhost.redhat.com><3D652ACB.70209@ges.redhat.com>
Ok, I committed this:
Index: blockframe.c
===================================================================
RCS file: /cvs/uberbaum/gdb/blockframe.c,v
retrieving revision 1.37
diff -u -p -r1.37 blockframe.c
--- blockframe.c 18 Aug 2002 22:40:15 -0000 1.37
+++ blockframe.c 22 Aug 2002 22:23:15 -0000
@@ -1402,11 +1402,10 @@ generic_call_dummy_register_unwind (stru
#endif
gdb_assert (registers != NULL);
/* Return the actual value. */
- /* FIXME: cagney/2002-06-26: This should be via the
- gdbarch_register_read() method so that it, on the fly,
+ /* Use the regcache_cooked_read() method so that it, on the fly,
constructs either a raw or pseudo register from the raw
register cache. */
- regcache_raw_read (registers, regnum, bufferp);
+ regcache_cooked_read (registers, regnum, bufferp);
}
}
Andrew Cagney writes:
>
> > This is because the generic_call_dummy_register_unwind() doesn't deal with
> > pseudo registers. It has this comment:
> >
> > /* Return the actual value. */
> > /* FIXME: cagney/2002-06-26: This should be via the
> > gdbarch_register_read() method so that it, on the fly,
> > constructs either a raw or pseudo register from the raw
> > register cache. */
> > regcache_raw_read (registers, regnum, bufferp);
> >
> >
> > If instead of raw reads I do cooked reads, I don't get the error. I
> > wonder though if, based of the comment, this could be a problem for
> > other targets.
> > Thoughts?
>
> Two architecture features could cause problems:
> - where an architecture has different sized raw and virtual (pre-cursor
> to cooked) registers
> - where there are pseudo registers
>
> MIPS has has different sized raw and virtual registers and, suprise!,
> doesn't use the code in question.
>
> That code block definitly needs to read the cooked value. The only
> potential problem is with:
> http://sources.redhat.com/ml/gdb/2002-08/msg00196.html
> and there, I think your case adds support to the argument that the dummy
> frame code should save (readonly) cooked values.
>
> Given this, yes, ok.
>
> BTW, don't forget to update the comment :-)
>
> Andrew
>
>
>
> > 2002-08-22 Elena Zannoni <ezannoni@redhat.com>
> >
> > * blockframe.c (generic_call_dummy_register_unwind): Use
> > regcache_cooked_read to catch cases in which the variable is
> > stored in a pseudo register.
> >
> > Index: blockframe.c
> > ===================================================================
> > RCS file: /cvs/uberbaum/gdb/blockframe.c,v
> > retrieving revision 1.37
> > diff -u -p -r1.37 blockframe.c
> > --- blockframe.c 18 Aug 2002 22:40:15 -0000 1.37
> > +++ blockframe.c 22 Aug 2002 15:35:27 -0000
> > @@ -1406,7 +1406,7 @@ generic_call_dummy_register_unwind (stru
> > gdbarch_register_read() method so that it, on the fly,
> > constructs either a raw or pseudo register from the raw
> > register cache. */
> > - regcache_raw_read (registers, regnum, bufferp);
> > + regcache_cooked_read (registers, regnum, bufferp);
> > }
> > }
> >
>