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: [cagney_convert-20030606-branch] Add value to REGISTER_TO_VALUEet.al.


   Date: Sun, 08 Jun 2003 20:22:14 -0400
   From: Andrew Cagney <ac131313@redhat.com>

   > And what do these functions do if the register is unavailable in a
   > certain frame?  That shouldn't happen if we have complete debug
   > information, but unfortunately we almost certainly don't have that.
   > Should this be reported to the user or not?  Should we set
   > VALUE_OPTIMIZED_OUT, just as we do for registers that don't need
   > conversion?  If so, we probably need a return value that indicates
   > whether the conversion was successfull.

   I've got into the habit of ignoring OPTIMIZED_OUT, for registers it's 
   always cleared (well ignoring the recent CFI stuff).  It was added 
   between 3.5 and 3.93 but for no apparent reason (at least for 
   registers).  The ChangeLog's are not very enlightenting and this 
   pre-dates Cygnus CVS.

Well, most debugging info isn't expressive enough to indicate which
registers have been saved, and which registers haven't.  Therefore
most unwinders pretend they can always find the register, and do so by
returning the value from the next frame.

   Anyway, the question of what to do when the register's value can't be 
   found has been largely ignored.  I'm thinking that throwing an error 
   would be a safer strategy - there is too much code ignoring register 
   fetches and I don't think we're going to be auditing it soon.

Indeed, GDB depends on the frame unwinder always returning a value for
its registers.  However for the sake of printing variables stored in
registers it seems that setting OPTIMIZED_OUT makes sense if we know
for certain that a the register has been thrashed.  It makes
valprint.c:value_print() print "<value optimized out>".  The problem
with printing an error message from REGISTER_TO_VALUE() is keeping the
error messages uniform.  However, in some cases it might be more
appropriate to print a warning instead of an error, for example if the
register hasn't been saved, but if we cannot tell whether it has been
thrashed yet.

However, I can live with the current status quo.

Mark


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