diff options
author | Iain Sandoe <iains@gcc.gnu.org> | 2011-11-22 13:51:07 +0000 |
---|---|---|
committer | Iain Sandoe <iains@gcc.gnu.org> | 2011-11-22 13:51:07 +0000 |
commit | e2362f5de06d4ba52f86421b0869b0ab04f89315 (patch) | |
tree | cb37d55577828a0e4d3083598574060fadac99a9 /libgcc | |
parent | 018076e705f8783a471dc36cef10b60d30d95ebf (diff) | |
download | gcc-e2362f5de06d4ba52f86421b0869b0ab04f89315.zip gcc-e2362f5de06d4ba52f86421b0869b0ab04f89315.tar.gz gcc-e2362f5de06d4ba52f86421b0869b0ab04f89315.tar.bz2 |
darwin.h (ENDFILE_SPEC): New.
gcc:
* config/darwin.h (ENDFILE_SPEC): New.
(DARWIN_CRT1_SPEC): Add crttms.o.
(STARTFILE_SPEC): Likewise for dynamic libs and bundles.
* config/i386.h (ENDFILE_SPEC): Amend to include crttme.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): Likewise.
From-SVN: r181616
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 8 | ||||
-rw-r--r-- | libgcc/config.host | 2 | ||||
-rw-r--r-- | libgcc/config/darwin-crt-tm.c | 83 | ||||
-rw-r--r-- | libgcc/config/t-darwin | 6 |
4 files changed, 98 insertions, 1 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index b1ad478..305e8ad 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,11 @@ +2011-11-22 Iain Sandoe <iains@gcc.gnu.org> + + * 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): Likewise. + 2011-11-21 Hans-Peter Nilsson <hp@axis.com> * Makefile.in ($(srcdir)/emutls.c): Explain why it's in LIB2ADDEH diff --git a/libgcc/config.host b/libgcc/config.host index caf5cbc..447c41c 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -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*) # This is the generic ELF configuration of FreeBSD. Later diff --git a/libgcc/config/darwin-crt-tm.c b/libgcc/config/darwin-crt-tm.c new file mode 100644 index 0000000..cfb6614 --- /dev/null +++ b/libgcc/config/darwin-crt-tm.c @@ -0,0 +1,83 @@ +/* Provide the runtime intrastructure the transactional memory lib. + Copyright (C) 2011 Free Software Foundation, Inc. + Contributed by Iain Sandoe <iains@gcc.gnu.org> + + 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 +<http://www.gnu.org/licenses/>. */ + +#include <mach-o/dyld.h> + +/* 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 diff --git a/libgcc/config/t-darwin b/libgcc/config/t-darwin index e32127e..3365f01 100644 --- a/libgcc/config/t-darwin +++ b/libgcc/config/t-darwin @@ -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 |