This is the mail archive of the gdb-patches@sourceware.org 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: [PATCH] -var-update [was Re: Variable objects: references formatting]


On Tue, May 09, 2006 at 12:40:43AM +1200, Nick Roberts wrote:
> I think this patch works.  My reasoning is one of symmetry: whatever is done to
> val2 should also be done to val1, and that you probably don't want to change
> the contents of val1 (hence val3).  I don't know exactly what coerce_array
> does, apart from convert the type from TYPE_CODE_REF to TYPE_CODE_INT or
> TYPE_CODE_FLOAT or whatever, so the comment might not be quite right.

I don't think this is in the right place: you're using an argument of
symmetry, but in fact, the comments in my_value_equal suggest that
symmetry is inappropriate.  For instance:

  /* The contents of VAL1 are supposed to be known.  */
  gdb_assert (!value_lazy (val1));

If val1 is the reference at this point, then we haven't checked what we
think we have.

Every time my_value_equal is called its first argument comes from a
varobj's ->value.  It seems to me that if we want to properly know
whether the varobj has changed, we'd better have read its value into
GDB.

I spent a little while looking around and the right places to fix
weren't entirely obvious, but I am tentatively thinking after the
gdb_evaluate_expression call in varobj_create and before the assignment
to ->value in varobj_update.  But there might be more; really you'd
have to think about each time the address of ->value is taken or
->value is directly assigned to (basically grep for each ->value and
look at the context).

-- 
Daniel Jacobowitz
CodeSourcery


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