On Fri, Jan 27, 2012 at 06:08:23PM +0100, Eric Botcazou wrote:
> > To my understanding this can only happen if there is control flow from
> > a leaf function which in turn should only occur with signals. Perhaps
> > we could modify the CFA "a bit" for the frame where the signal
> > occurred? There is already a hack in uw_identify_context which does
> > this for the signal frame:
> >
> > static inline _Unwind_Ptr
> > uw_identify_context (struct _Unwind_Context *context)
> > {
> > /* The CFA is not sufficient to disambiguate the context of a function
> > interrupted by a signal before establishing its frame and the context
> > of the signal itself. */
> > if (STACK_GROWS_DOWNWARD)
> > return _Unwind_GetCFA (context) - _Unwind_IsSignalFrame (context);
> > else
> > return _Unwind_GetCFA (context) + _Unwind_IsSignalFrame (context);
> > }
>
> Why does this "hack" not work? It was precisely devised for this purpose.
Mmmh. But actually it is the stack frame of _divdi3 and not the signal
frame which gets the wrong cfa assigned from here. Not sure though,
perhaps it's time to draw a picture ;)
-Andreas-