Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Apr 2014 23:18:57 -0700
From:      Stanislav Sedov <stas@freebsd.org>
To:        Mikolaj Golub <trociny@freebsd.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: valgrind on amd64 crashes when delivering signal for threaded application
Message-ID:  <5FDC5FC6-8748-494C-982B-0CEF734BD883@freebsd.org>
In-Reply-To: <20140423200135.GA6009@gmail.com>
References:  <20140423200135.GA6009@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On Apr 23, 2014, at 1:01 PM, Mikolaj Golub <trociny@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;
>=20
>      rsp -=3D sizeof(*frame);
>  -   rsp =3D VG_ROUNDDN(rsp, 16);
>  +   rsp =3D VG_ROUNDDN(rsp, 16) - 8;
>      frame =3D (struct sigframe *)rsp;
>=20
>      if (!extend(tst, rsp, sizeof(*frame)))
>=20
> 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?

Thanks a lot for tracking this!

--
ST4096-RIPE






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5FDC5FC6-8748-494C-982B-0CEF734BD883>