aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorIain Sandoe <iains@gcc.gnu.org>2011-11-22 13:51:07 +0000
committerIain Sandoe <iains@gcc.gnu.org>2011-11-22 13:51:07 +0000
commite2362f5de06d4ba52f86421b0869b0ab04f89315 (patch)
treecb37d55577828a0e4d3083598574060fadac99a9 /libgcc
parent018076e705f8783a471dc36cef10b60d30d95ebf (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--libgcc/config.host2
-rw-r--r--libgcc/config/darwin-crt-tm.c83
-rw-r--r--libgcc/config/t-darwin6
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