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-