Re: [PATCH] Fix sparc-*-linux register fetching/storing

Daniel Jacobowitz
2001-11-26T12:04:00Z

On Mon, Nov 26, 2001 at 12:18:18PM -0500, Andrew Cagney wrote:
> >
> >Well, regcache_collect is the only approved interface to the contents
> >of registers[] for one thing. It would also prevent the need for the
> >cast (although you'd have to clear the upper half of the variable
> >first and make sure to stuff it into the low bytes since we're
> >big-endian. Ew.).
> >
> >Andrew? Do we need to have a regcache_collect_core_addr, to sign
> >extend and shift appropriately for each architecture?
>
> That sounds like overkill. If you need to be doing sign/zero extension
> stuff then I'd be looking at explicit calls to extract_signed_integer()
> and/or extract_unsigned_integer() in the nat code.
>
> A sequence like:
>
> void *buf = alloca (MAX_REGISTER_RAW_SIZE);
> regcache_collect (my reg, buf);
> LONGEST val = extract_unsigned_integer (buf, REGISTER_RAW_SIZE(my reg));
> store_unsigned_integer (dest, dest size, val);
>
> should insulate it from the current problems.

But won't we want this absolutely every time we extract a CORE_ADDR?
And for that matter, I'm talking about getting a target memory address
out of a register; is store_*signed_integer right for that? Is there
an extract_pointer or so?

--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer