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>