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