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]

Re: find_saved_register(frame) -> next/prev frame?


Andrew Cagney wrote:
> 
> Elena Zannoni wrote:
> >
> > Michael Snyder writes:
> >  > Andrew Cagney wrote:
> >  > >
> >  > > > It seems that find_saved_register is called only by mips_get_saved_register()
> >  > > > and default_get_saved_register().
> >  > > >
> >  > > > There is another function, generic_get_saved_register() in
> >  > > > blockframe.c which is basically identical to
> >  > > > default_get_saved_register
> >  >
> >  > Not at all!  generic_get_saved_register is a special
> >  > purpose function, and if you look at the code you
> >  > should be able to see that it is very different
> >  > from default_get_saved_register.
> >  >
> >
> > Can you please explain it to me. I am obviously missing something,
> > then.  The comments are not helping in explaining the difference, and
> > the name 'generic' doesn't indicate what the special purpose is.  How
> > does one choose to use one versus the other? It seems that all the
> > multiarched targets are using the generic version. And the
> > non-multiarched one are using the default version.
> 
> Hmm,
> 
>       if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
>         {
>           if (lval)             /* found it in a CALL_DUMMY frame */
> 
> it's this bit that is different.  It has code to handle a call dummy
> where the raw registers were saved in (GDB) local buffer instead of on
> the stack.

That's right -- I guess I replied to Elena privately.
generic_get_saved_register is part of a set of functions
that implement "generic dummy frames".  If you don't use
generic dummy frames, you don't use this function.

> 
> However, it does iterate over the frames the way I think it should so I
> think default_get_saved_register() is wrong.
> 
> I think (attempt two) they are ``identical'' if the above becomes:
> 
>         if (PC_IN_CALL_DUMMY (...) && using_generic_dummy_frames)
> 
>         Andrew



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