This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] legacy_[read/write]_register_gen



> 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.

Andrew


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]