From owner-freebsd-threads@FreeBSD.ORG Fri Dec 31 19:37:19 2010 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F3DE5106564A for ; Fri, 31 Dec 2010 19:37:18 +0000 (UTC) (envelope-from freebsdml@marino.st) Received: from shepard.synsport.net (mail.synsport.com [208.69.230.148]) by mx1.freebsd.org (Postfix) with ESMTP id CA6008FC22 for ; Fri, 31 Dec 2010 19:37:18 +0000 (UTC) Received: from [192.168.1.33] (78.red-79-158-163.staticip.rima-tde.net [79.158.163.78]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by shepard.synsport.net (Postfix) with ESMTP id 2758F438BE; Fri, 31 Dec 2010 13:37:16 -0600 (CST) Message-ID: <4D1E30EA.7050308@marino.st> Date: Fri, 31 Dec 2010 20:37:14 +0100 From: John Marino User-Agent: Thunderbird 2.0.0.24 (Windows/20100228) MIME-Version: 1.0 To: Kostik Belousov 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> In-Reply-To: <20101231134418.GO90883@deviant.kiev.zoral.com.ua> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-threads@freebsd.org Subject: Re: AMD64 version of GNAT Ada compiler broken due to libthr X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Dec 2010 19:37:19 -0000 Hi Kostik, Thanks for pointing me in the right direction. After some research, I discovered that only DragonFly BSD allows execution on the stack by default. NetBSD and OpenBSD (and Solaris and Darwin) all were specially configured within gcc to execute mprotect first to enable this functionality. FreeBSD never had this gcc configuration code and frankly it looks like it should have already been there. I created my own __enable_execute_stack macro function based on these previous works and now GNAT has passed all tests! Since i386 always worked, I only applied to macro to the AMD64 configuration header. You've been a great help! Once I understood what the issue was, everything fell into place. -- John 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 >> FreeBSD 8.2, and would that mean that GNAT would start working properly >> 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 >> stacks all along. > Or, there is a compiler configuration that prevents using the thunks > on the stack.