valgrind on amd64 crashes when delivering signal for threaded application

Mikolaj Golub to.my.trociny at gmail.com
Thu Apr 24 06:51:17 UTC 2014


On Wed, Apr 23, 2014 at 11:18:57PM -0700, Stanislav Sedov wrote:
> 
> On Apr 23, 2014, at 1:01 PM, Mikolaj Golub <trociny at freebsd.org> wrote:
> 
> >  --- coregrind/m_sigframe/sigframe-amd64-freebsd.c.orig  2014-04-23 22:39:45.000000000 +0300
> >  +++ coregrind/m_sigframe/sigframe-amd64-freebsd.c       2014-04-23 22:40:23.000000000 +0300
> >  @@ -250,7 +250,7 @@ static Addr build_sigframe(ThreadState *
> >      UWord err;
> > 
> >      rsp -= sizeof(*frame);
> >  -   rsp = VG_ROUNDDN(rsp, 16);
> >  +   rsp = VG_ROUNDDN(rsp, 16) - 8;
> >      frame = (struct sigframe *)rsp;
> > 
> >      if (!extend(tst, rsp, sizeof(*frame)))
> > 
> > Unfortunately, I have poor understanding of valgrind internals and
> > what is going on exactly when it delivers a signal to the process, so
> > failed to find a proper fix.
> 
> This sounds like a proper solution to me though.  Stack handling in valgrind
> is indeed convoluted, but it seems in this case it clearly misaligns the stack
> as it does not take into account the return address.  Any objections if I commit
> this fix to valgrind-freebsd?

Sure, no objections from my side. Thanks.

-- 
Mikolaj Golub


More information about the freebsd-hackers mailing list