diff druntime/src/compiler/ldc/tls.S @ 1458:e0b2d67cfe7c

Added druntime (this should be removed once it works).
author Robert Clipsham <robert@octarineparrot.com>
date Tue, 02 Jun 2009 17:43:06 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/druntime/src/compiler/ldc/tls.S	Tue Jun 02 17:43:06 2009 +0100
@@ -0,0 +1,44 @@
+/**
+ * Contains support code for thread-local storage.
+ *
+ * Copyright: Copyright Digital Mars 2008 - 2009.
+ * License:   <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>.
+ * Authors:   Walter Bright
+ *
+ *          Copyright Digital Mars 2008 - 2009.
+ * Distributed under the Boost Software License, Version 1.0.
+ *    (See accompanying file LICENSE_1_0.txt or copy at
+ *          http://www.boost.org/LICENSE_1_0.txt)
+ */
+#if linux
+
+/* The memory between the addresses of _tlsstart and _tlsend is the storage for
+ * thread-local data in D 2.0.  Both of these rely on the default linker script
+ * of:
+ *      .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
+ *      .tbss  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ * to group the sections in that order.
+ *
+ * Sadly, this does not work because ld orders .tdata after .tdata.*, despite
+ * what the linker script says.
+ */
+
+.file "tls.S"
+
+.globl _tlsstart
+    .section .tdata,"awT",@progbits
+    .align 4
+    .type   _tlsstart, @object
+    .size   _tlsstart, 4
+_tlsstart:
+    .long   3
+
+.globl _tlsend
+    .section .tcommon,"awT",@nobits
+    .align 4
+    .type   _tlsend, @object
+    .size   _tlsend, 4
+_tlsend:
+    .zero   4
+
+#endif