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: Failures in store.exp caused by regcache


On Wed, Jan 08, 2003 at 02:10:44PM -0500, Andrew Cagney wrote:
> >(Or rather, by the value code's interaction with the regcache)
> >
> >Andrew, this is more your area; I'd like your advice before I dig any
> >further.  Here's what's going wrong.  Consider the command sequence:
> >"up; print u; set u = s_1; print u".
> >  - u has class LOC_REGISTER
> >  - The register's home is memory
> >  - read_var_value therefore returns an lval_memory
> >  - the value of the register is in the register unwind cache at this point
> >  - we modify the memory backing the store
> >  - we have no way to tell that we've just modified the value of a saved
> >    register on the stack
> >  - the second print returns the cached value
> >
> >So, what do we do?
> 
> Flush the frame cache.

Ugg.  Well, if we have to, then we have to.  I suppose we do.

We obviously want to preserve things like the selected frame, however. 
Andrew, should I do this the way I do for "set backtrace-below-main",
and should there be a general function for that?  I.E.:

void
do_flush_frames_sfunc (char *args, int from_tty, struct cmd_list_element *c)
{
  int saved_level;
  struct frame_info *cur_frame;

  if (! target_has_stack)
    return;

  saved_level = frame_relative_level (get_selected_frame ());

  flush_cached_frames ();

  cur_frame = find_relative_frame (get_current_frame (), &saved_level);
  select_frame (cur_frame);

  /* If we were below main and backtrace-below-main was turned off,
     SAVED_LEVEL will be non-zero.  CUR_FRAME will point to main.
     Accept this but print the new frame.  */
  if (saved_level != 0)
    print_stack_frame (get_selected_frame (), -1, 0);
}


-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


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