AMD64 version of GNAT Ada compiler broken due to libthr

John Marino freebsdml at marino.st
Fri Dec 31 20:19:57 UTC 2010


Ah, interesting.  I didn't realize the ramifications of AMD64-only 
application of mprotect().  It's easy enough to apply the same macro to 
both architectures.

As far as pushing it upstream, I've got literally a few dozen patches, 
and the majority of them should be contributed back.  I haven't gone 
through the absurdly difficult and time-consuming process of assigning 
copyright over to the FSF, partly because I reside in France with a 
Dutch employer and nobody I work for would sign the legal documents FSF 
requests (if I even wanted to share with my employers what I do in my 
own time.)

I may go through the process some day if we can leave my employers out 
of it, but it's not a priority at this moment.  I'm not philosophically 
opposed to giving back, although I am dismayed at the number of offered 
patches that are never reviewed by the gcc developers and die on the 
vine.  If I could find a way to "fast-track" these patches in where I 
wouldn't be wasting my time, I'd do it.  It's a pain to maintain a 
parallel fork and I'd love to reduce the number of differences between 
the code bases.

Obviously if you have any ideas that get my FreeBSD work into the gcc 
efficiently, I'm all ears.

Regards,
John


Kostik Belousov wrote:
> On Fri, Dec 31, 2010 at 08:37:14PM +0100, John Marino wrote:
>> 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 need the same application of mprotect() for i386 too, since
> 32bit binary executed on amd64 kernel gets non-executable stack as well.
> 
>> You've been a great help!  Once I understood what the issue was, 
>> everything fell into place.
> Will you upstream the changes to gcc ?
> 


More information about the freebsd-threads mailing list