Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 31 Dec 2010 21:46:19 +0200
From:      Kostik Belousov <kostikbel@gmail.com>
To:        John Marino <freebsdml@marino.st>
Cc:        freebsd-threads@freebsd.org
Subject:   Re: AMD64 version of GNAT Ada compiler broken due to libthr
Message-ID:  <20101231194619.GS90883@deviant.kiev.zoral.com.ua>
In-Reply-To: <4D1E30EA.7050308@marino.st>
References:  <4D1DC299.2090808@marino.st> <20101231122225.GK90883@deviant.kiev.zoral.com.ua> <4D1DCE02.3050601@marino.st> <20101231125215.GL90883@deviant.kiev.zoral.com.ua> <4D1DD5CF.5020305@marino.st> <20101231132706.GN90883@deviant.kiev.zoral.com.ua> <4D1DDC99.7000400@marino.st> <20101231134418.GO90883@deviant.kiev.zoral.com.ua> <4D1E30EA.7050308@marino.st>

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

--Y+49MuJt7Df6jcOH
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Fri, Dec 31, 2010 at 08:37:14PM +0100, John Marino wrote:
> Hi Kostik,
>=20
> Thanks for pointing me in the right direction.  After some research, I=20
> discovered that only DragonFly BSD allows execution on the stack by=20
> default.  NetBSD and OpenBSD (and Solaris and Darwin) all were specially=
=20
> configured within gcc to execute mprotect first to enable this=20
> functionality.  FreeBSD never had this gcc configuration code and=20
> frankly it looks like it should have already been there.
>=20
> I created my own __enable_execute_stack macro function based on these=20
> previous works and now GNAT has passed all tests!  Since i386 always=20
> worked, I only applied to macro to the AMD64 configuration header.
You need the same application of mprotect() for i386 too, since
32bit binary executed on amd64 kernel gets non-executable stack as well.

>=20
> You've been a great help!  Once I understood what the issue was,=20
> everything fell into place.
Will you upstream the changes to gcc ?

>=20
> -- John
>=20
>=20
> Kostik Belousov wrote:
> >On Fri, Dec 31, 2010 at 02:37:29PM +0100, John Marino wrote:
> >>Yeah, that's kind of what I was getting at.  Would this patch get into=
=20
> >>FreeBSD 8.2, and would that mean that GNAT would start working properly=
=20
> >>starting with FreeBSD 8.2 if that happened?
> >Definitely not in 8.2.
> >Might be in 8.3, if successfully landed in HEAD.
> >
> >Besides the patch for the base system, compiler must be configured
> >to properly mark the objects that need executable thunks on the stack.
> >See the references in the arch@ message I pointed to.
> >
> >>I guess that also means the other BSD's have been allowing executable=
=20
> >>stacks all along.
> >Or, there is a compiler configuration that prevents using the thunks
> >on the stack.

--Y+49MuJt7Df6jcOH
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (FreeBSD)

iEYEARECAAYFAk0eMwoACgkQC3+MBN1Mb4jBfgCcDEREfiAa4wpplDR5dWTgK/kw
HJEAoOPJ+Nfr2yNaPwoTAgE8zStHRQJn
=U9Zg
-----END PGP SIGNATURE-----

--Y+49MuJt7Df6jcOH--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20101231194619.GS90883>