This is the mail archive of the gdb@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: frame_register_read()


> 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




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