frame_register_read()
Andrew Cagney
ac131313@cygnus.com
Tue May 14 07:41:00 GMT 2002
> Andrew,
>
> frame_register_read() contains the comment
>
> /* FIXME: cagney/2002-04-10: This test is just bogus. It is no
> indication of the validity of the register. The value could
> easily be found (on the stack) even though the corresponding
> register isn't available. */
> if (register_cached (regnum) < 0)
> return 0; /* register value not available */
>
> But in regcache.c we have
>
> /* REGISTER_VALID is 0 if the register needs to be fetched,
> 1 if it has been fetched, and
> -1 if the register value was not available.
> "Not available" means don't try to fetch it again. */
>
> So why is the code in frame_register_read incorrect? It's simply testing
> that the register exists for this target. If it doesn't exist, then how
> can it be recovered from the stack?
Introspect (tracepoints, target snapshots) do this. If a specific
snapshot doesn't contain a register then the register is unavailable.
The corresponding hardware still has the register so its value can be
found on the stack.
> I guess it is possible that the check should be moved into
> default_get_saved_register, for the case where we are trying to fetch the
> register directly from the regcache, but either the target has this
> register, or it doesn't.
Andrew
More information about the Gdb
mailing list