From patchwork Sun Nov 20 23:27:50 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iain Sandoe X-Patchwork-Id: 126671 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 66411B7208 for ; Mon, 21 Nov 2011 10:28:13 +1100 (EST) Received: (qmail 15647 invoked by alias); 20 Nov 2011 23:28:10 -0000 Received: (qmail 15635 invoked by uid 22791); 20 Nov 2011 23:28:08 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from c2bthomr07.btconnect.com (HELO mail.btconnect.com) (213.123.20.125) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 20 Nov 2011 23:27:53 +0000 Received: from host81-138-1-83.in-addr.btopenworld.com (EHLO thor.office) ([81.138.1.83]) by c2bthomr07.btconnect.com with ESMTP id FJK57597; Sun, 20 Nov 2011 23:27:51 +0000 (GMT) Message-Id: <576CABB2-597C-4C7B-BE4C-DF03B57E6DF7@sandoe-acoustics.co.uk> From: Iain Sandoe To: GCC Patches Mime-Version: 1.0 (Apple Message framework v936) Subject: [Patch RFC Darwin] provide the crt stuff for tm. Date: Sun, 20 Nov 2011 23:27:50 +0000 Cc: Richard Henderson , Mike Stump X-Mirapoint-IP-Reputation: reputation=Fair-1, source=Queried, refid=tid=0001.0A0B0301.4EC98CF6.005A, actions=TAG X-Junkmail-Premium-Raw: score=8/50, refid=2.7.2:2011.11.20.223314:17:8.129, ip=81.138.1.83, rules=__HAS_MSGID, __SANE_MSGID, __MSGID_APPLEMAIL, __TO_MALFORMED_2, __CT, __CTYPE_HAS_BOUNDARY, __CTYPE_MULTIPART, CTYPE_MULTIPART_NO_QUOTE, __CTYPE_MULTIPART_MIXED, __MIME_VERSION, __MIME_VERSION_APPLEMAIL, __MULTIPLE_RCPTS_CC_X2, __HAS_X_MAILER, __X_MAILER_APPLEMAIL, TXT_ATTACHED, __ANY_URI, __CP_MEDIA_BODY, __CP_URI_IN_BODY, BODYTEXTP_SIZE_3000_LESS, __MIME_TEXT_ONLY, RDNS_GENERIC_POOLED, RDNS_SUSP_GENERIC, __USER_AGENT_APPLEMAIL, RDNS_SUSP, MIME_TEXT_ONLY_MP_MIXED, MULTIPLE_RCPTS X-Junkmail-Signature-Raw: score=unknown, refid=str=0001.0A0B0208.4EC98CF7.00AA, ss=1, re=0.000, fgs=0, ip=0.0.0.0, so=2011-07-25 19:15:43, dmn=2011-05-27 18:58:46, mode=multiengine X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Since Darwin has its own crt infrastructure, we will still need to deal with this (even once the tm version is merged into gcc/crtstuff)... with all the current patches for libitm/darwin [sjlj.S, weakrefs, tm clone table sect] + this one I get: --- Native configuration is i686-apple-darwin9 === libitm tests === Schedule of variations: unix/-m32 unix/-m64 Running target unix/-m32 Using /usr/local/dejagnu-git/share/dejagnu/baseboards/unix.exp as board description file for target. Using /usr/local/dejagnu-git/share/dejagnu/config/unix.exp as generic interface file for target. Using /GCC/gcc-live-trunk/libitm/testsuite/config/default.exp as tool- and-target-specific interface file. Running /GCC/gcc-live-trunk/libitm/testsuite/libitm.c/c.exp ... FAIL: libitm.c/memcpy-1.c execution test FAIL: libitm.c/memset-1.c execution test Running /GCC/gcc-live-trunk/libitm/testsuite/libitm.c++/c++.exp ... === libitm Summary for unix/-m32 === # of expected passes 21 # of unexpected failures 2 # of expected failures 5 # of unresolved testcases 1 Running target unix/-m64 Using /usr/local/dejagnu-git/share/dejagnu/baseboards/unix.exp as board description file for target. Using /usr/local/dejagnu-git/share/dejagnu/config/unix.exp as generic interface file for target. Using /GCC/gcc-live-trunk/libitm/testsuite/config/default.exp as tool- and-target-specific interface file. Running /GCC/gcc-live-trunk/libitm/testsuite/libitm.c/c.exp ... Running /GCC/gcc-live-trunk/libitm/testsuite/libitm.c++/c++.exp ... === libitm Summary for unix/-m64 === # of expected passes 23 # of expected failures 5 # of unresolved testcases 1 === libitm Summary === # of expected passes 44 # of unexpected failures 2 # of expected failures 10 # of unresolved testcases 2 comments/OK for trunk? Iain gcc: * config/darwin.h (ENDFILE_SPEC): New. (DARWIN_CRT1_SPEC): Add crttms.o. libgcc: * config/darwin-crt-tm.c: New file. * config.host (darwin): Build crttms.o crttme.o to provide startup and shutdown for tm clones. * config/t-darwin (crttms.o): New build rule. (crttme.o): New build rule. Index: libgcc/config/darwin-crt-tm.c =================================================================== --- libgcc/config/darwin-crt-tm.c (revision 0) +++ libgcc/config/darwin-crt-tm.c (revision 0) @@ -0,0 +1,83 @@ +/* Provide the runtime intrastructure the transactional memory lib. + Copyright (C) 2011 Free Software Foundation, Inc. + Contributed by Iain Sandoe + + This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#include + +/* not listed in mach-o/dyld.h for some reason. */ +extern char * getsectdata (const char*,const char*,unsigned long*); + +#define WEAK __attribute__((weak)) + +#ifndef ATTRIBUTE_UNUSED +#define ATTRIBUTE_UNUSED __attribute__((unused)) +#endif + +extern void _ITM_registerTMCloneTable (void *, size_t) WEAK; +extern void _ITM_deregisterTMCloneTable (void *) WEAK; + +#ifdef START + +void __doTMRegistrations (void) __attribute__ ((constructor)); + +void __doTMRegistrations (void) +{ + char * tm_clone_table_sect_data; + unsigned long tmct_siz; + + tm_clone_table_sect_data = getsectdata ("__DATA", + "__tm_clone_table", + &tmct_siz); + tmct_siz /= (sizeof (size_t) * 2); + if (_ITM_registerTMCloneTable != NULL + && tm_clone_table_sect_data != NULL + && tmct_siz > 0) + _ITM_registerTMCloneTable (tm_clone_table_sect_data, (size_t)tmct_siz); +} + +#endif + +#ifdef END + +void __doTMdeRegistrations (void) __attribute__ ((destructor)); + +void __doTMdeRegistrations (void) +{ + char * tm_clone_table_sect_data; + unsigned long tmct_siz; + + tm_clone_table_sect_data = getsectdata ("__DATA", + "__tm_clone_table", + &tmct_siz); + + if (_ITM_deregisterTMCloneTable != NULL + && tm_clone_table_sect_data != NULL + && tmct_siz > 0) + _ITM_deregisterTMCloneTable (tm_clone_table_sect_data); + +} + +/* Provide dumy funcs for the weak ones - needed on most Darwin versions + for now. */ + +void _ITM_registerTMCloneTable (void *n ATTRIBUTE_UNUSED, size_t s ATTRIBUTE_UNUSED) +{} +void _ITM_deregisterTMCloneTable (void *n ATTRIBUTE_UNUSED) +{} +#endif \ No newline at end of file Index: libgcc/config.host =================================================================== --- libgcc/config.host (revision 181530) +++ libgcc/config.host (working copy) @@ -170,7 +170,7 @@ case ${host} in *-*-darwin*) asm_hidden_op=.private_extern tmake_file="$tmake_file t-darwin ${cpu_type}/t-darwin t-libgcc-pic t-slibgcc-darwin" - extra_parts=crt3.o + extra_parts="crt3.o crttms.o crttme.o" ;; *-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*) # This is the place-holder for the generic a.out configuration Index: libgcc/config/t-darwin =================================================================== --- libgcc/config/t-darwin (revision 181530) +++ libgcc/config/t-darwin (working copy) @@ -3,6 +3,12 @@ crt3.o: $(srcdir)/config/darwin-crt3.c $(crt_compile) \ -fno-tree-dominator-opts $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -c $< +crttms.o: $(srcdir)/config/darwin-crt-tm.c + $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -DSTART -c $< + +crttme.o: $(srcdir)/config/darwin-crt-tm.c + $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -DEND -c $< + # -pipe because there's an assembler bug, 4077127, which causes # it to not properly process the first # directive, causing temporary # file names to appear in stabs, causing the bootstrap to fail. Using -pipe Index: gcc/config/darwin.h =================================================================== --- gcc/config/darwin.h (revision 181530) +++ gcc/config/darwin.h (working copy) @@ -372,10 +372,8 @@ extern GTY(()) int darwin_ms_struct; %(darwin_crt2)}}}}}} \ %{shared-libgcc:%:version-compare(< 10.5 mmacosx-version-min= crt3.o%s)}" -/* The native Darwin linker doesn't necessarily place files in the order - that they're specified on the link line. Thus, it is pointless - to put anything in ENDFILE_SPEC. */ -/* #define ENDFILE_SPEC "" */ +/* We want a destructor last in the list. */ +#define ENDFILE_SPEC "%{fgnu-tm: -lcrttme.o}" #define DARWIN_EXTRA_SPECS \ { "darwin_crt1", DARWIN_CRT1_SPEC }, \ @@ -388,7 +386,8 @@ extern GTY(()) int darwin_ms_struct; #define DARWIN_CRT1_SPEC \ "%:version-compare(!> 10.5 mmacosx-version-min= -lcrt1.o) \ - %:version-compare(>= 10.5 mmacosx-version-min= -lcrt1.10.5.o)" + %:version-compare(>= 10.5 mmacosx-version-min= -lcrt1.10.5.o) \ + %{fgnu-tm: -lcrttms.o}" /* Default Darwin ASM_SPEC, very simple. */ #define ASM_SPEC "-arch %(darwin_arch) \