This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [RFA] legacy_[read/write]_register_gen
Andrew Cagney wrote:
>
> > Simplest case -- say you want to have a pseudo-register that
> > mirrors the contents of a real register.
> >
> > static void
> > my_fetch_pseudo_register (int regnum)
> > {
> > if (regnum == MY_MIRROR_REGNUM)
> > {
> > char buf[REGISTER_SIZE];
> > regcache_read (MY_REAL_REGNUM, buf);
> > regcache_write (MY_MIRROR_REGNUM, buf);
> > }
> > }
> >
> > You can't do that unles legacy_write_register_bytes can address
> > the regcache location of your pseudo-register.
>
> That should be implemented as:
>
> my_register_read (int regnum, ...)
> {
> if (regnum == MY_MIRROR_REGNUM)
> regcache_read (MY_REAL_REGNUM, buf)
> else
> regcache_read (regnum, buf);
> }
>
> GDB no longer needs to have duplicated register values in the regcache.
>
> Anyway, I have figured out why the change is needed. You can end up
> with ``real'' registers in the [NUM_REGS .. NUM_REGS+NUM_PSEUDO_REGS)
> range. This happens (at present still theory) when a register that
> isn't in the G packet is fetched.
Shall I check it in?