http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50678



--- Comment #71 from simon at pushface dot org 2013-02-05 15:33:52 UTC ---

Created attachment 29360

  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29360

Patch to suppress register swap on Darwin >= 12



(In reply to comment #69)



> OK, thanks, so the bug has apparently been fixed in Darwin 12.  The last thing

> to do is to devise a _run time_ test to be added to

> __gnat_adjust_context_for_raise that will disable the code if the Darwin

> version is 12 or above.  Essentially anything that works is acceptable.  Any

> Darwin expert out there?



This patch works here in Darwin 12.2.1:



                === acats Summary ===

# of expected passes            2320

# of unexpected failures        0



                === gnat Summary ===



# of expected passes            1158

# of expected failures          17

# of unsupported tests          5

/Users/simon/tmp/gcc-build-195682-patched/gcc/gnatmake version 4.8.0 20130202

(experimental) [trunk revision 195682]



It uses sysctl(3) and strtol(3), which might seem heavy but as Eric has pointed

out it'll only be called when we're already in the middle of handling a signal.



Especially considering that, I may have gone OTT in caching the determined

version and/or separating the version determination into a new function.



I haven't checked the returned values of the sysctl(3) calls or the length of

the buffer required; what's policy? and what could be done if there was an

error?



As an aside, what's the recommended technique for rebuilding and reinstalling

just the RTS? ('cd gcc; make gnatlib' leaves the build in a state where 'make

install' doesn't work).

Reply via email to