This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Divide_1 testsuite fail due to a problem in the unwinding code
- From: "Andreas Krebbel" <krebbel at linux dot vnet dot ibm dot com>
- To: Eric Botcazou <ebotcazou at adacore dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Fri, 27 Jan 2012 21:32:12 +0100
- Subject: Re: Divide_1 testsuite fail due to a problem in the unwinding code
- References: <20120127164616.GA8167@bart> <201201271808.23832.ebotcazou@adacore.com>
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-