Author: wade
Date: 2006-10-05 15:58:34 -0400 (Thu, 05 Oct 2006)
New Revision: 66310
Modified:
branches/mono-1-1-13/mono/mono/io-layer/ChangeLog
branches/mono-1-1-13/mono/mono/io-layer/atomic.h
branches/mono-1-1-13/mono/mono/utils/ChangeLog
branches/mono-1-1-13/mono/mono/utils/mono-compiler.h
Log:
* Pull in changes from HEAD: r61761
2006-10-05 Neale Ferguson <[EMAIL PROTECTED]>
* atomic.h: More tinkering with
InterlockedExchange/InterlockedCompareExchange
for s390/s390x.
* Pull in changes from HEAD: r63578
2006-08-10 Zoltan Varga <[EMAIL PROTECTED]>
* mono-compiler.h: Fix TLS definitions so libmono can be loaded
dynamically as a
module. Fixes #78767.
Modified: branches/mono-1-1-13/mono/mono/io-layer/ChangeLog
===================================================================
--- branches/mono-1-1-13/mono/mono/io-layer/ChangeLog 2006-10-05 19:35:34 UTC
(rev 66309)
+++ branches/mono-1-1-13/mono/mono/io-layer/ChangeLog 2006-10-05 19:58:34 UTC
(rev 66310)
@@ -1,3 +1,11 @@
+2006-10-05 Wade Berrier <[EMAIL PROTECTED]>
+
+ * Pull in changes from HEAD: r61761
+
+ 2006-10-05 Neale Ferguson <[EMAIL PROTECTED]>
+ * atomic.h: More tinkering with
InterlockedExchange/InterlockedCompareExchange
+ for s390/s390x.
+
2006-07-17 Dick Porter <[EMAIL PROTECTED]>
* processes.c (CreateProcess): Don't change directory unless a new
Modified: branches/mono-1-1-13/mono/mono/io-layer/atomic.h
===================================================================
--- branches/mono-1-1-13/mono/mono/io-layer/atomic.h 2006-10-05 19:35:34 UTC
(rev 66309)
+++ branches/mono-1-1-13/mono/mono/io-layer/atomic.h 2006-10-05 19:58:34 UTC
(rev 66310)
@@ -286,12 +286,8 @@
gint32 old;
__asm__ __volatile__ ("\tLA\t1,%0\n"
- "0:\tL\t%1,%0\n"
- "\tCR\t%1,%3\n"
- "\tJNE\t1f\n"
+ "\tLR\t%1,%3\n"
"\tCS\t%1,%2,0(1)\n"
- "\tJNZ\t0b\n"
- "1:\n"
: "+m" (*dest), "=r" (old)
: "r" (exch), "r" (comp)
: "1", "cc");
@@ -306,12 +302,8 @@
gpointer old;
__asm__ __volatile__ ("\tLA\t1,%0\n"
- "0:\tL\t%1,%0\n"
- "\tCR\t%1,%3\n"
- "\tJNE\t1f\n"
+ "\tLR\t%1,%3\n"
"\tCS\t%1,%2,0(1)\n"
- "\tJNZ\t0b\n"
- "1:\n"
: "+m" (*dest), "=r" (old)
: "r" (exch), "r" (comp)
: "1", "cc");
@@ -326,11 +318,11 @@
gpointer old;
__asm__ __volatile__ ("\tLA\t1,%0\n"
- "\tLGR\t%1,%3\n"
- "\tCSG\t%1,%2,0(1)\n"
- : "+m" (*dest), "=r" (old)
- : "r" (exch), "r" (comp)
- : "1", "cc");
+ "\tLGR\t%1,%3\n"
+ "\tCSG\t%1,%2,0(1)\n"
+ : "+m" (*dest), "=r" (old)
+ : "r" (exch), "r" (comp)
+ : "1", "cc");
return(old);
}
Modified: branches/mono-1-1-13/mono/mono/utils/ChangeLog
===================================================================
--- branches/mono-1-1-13/mono/mono/utils/ChangeLog 2006-10-05 19:35:34 UTC
(rev 66309)
+++ branches/mono-1-1-13/mono/mono/utils/ChangeLog 2006-10-05 19:58:34 UTC
(rev 66310)
@@ -1,3 +1,11 @@
+2006-10-05 Wade Berrier <[EMAIL PROTECTED]>
+
+ * Pull in changes from HEAD: r63578
+
+ 2006-08-10 Zoltan Varga <[EMAIL PROTECTED]>
+ * mono-compiler.h: Fix TLS definitions so libmono can be loaded
dynamically as a
+ module. Fixes #78767.
+
2006-01-04 Zoltan Varga <[EMAIL PROTECTED]>
* mono-codeman.c (new_codechunk): Fix warnings.
Modified: branches/mono-1-1-13/mono/mono/utils/mono-compiler.h
===================================================================
--- branches/mono-1-1-13/mono/mono/utils/mono-compiler.h 2006-10-05
19:35:34 UTC (rev 66309)
+++ branches/mono-1-1-13/mono/mono/utils/mono-compiler.h 2006-10-05
19:58:34 UTC (rev 66310)
@@ -9,12 +9,26 @@
#ifdef HAVE_KW_THREAD
#if HAVE_TLS_MODEL_ATTR
+/*
+ * Define this if you want a faster libmono, which cannot be loaded
dynamically as a
+ * module.
+ */
+//#define PIC_INITIAL_EXEC
+
#if defined (__powerpc__)
#define MONO_TLS_FAST
#elif defined(PIC)
+
+#ifdef PIC_INITIAL_EXEC
#define MONO_TLS_FAST __attribute__((tls_model("initial-exec")))
#else
+#define MONO_TLS_FAST __attribute__((tls_model("local-dynamic")))
+#endif
+
+#else
+
#define MONO_TLS_FAST __attribute__((tls_model("local-exec")))
+
#endif
#else
@@ -29,6 +43,7 @@
#endif
#elif defined(__x86_64__)
#if defined(PIC)
+// This only works if libmono is linked into the application
#define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo; __asm ("movq "
#var "@GOTTPOFF(%%rip), %0" : "=r" (foo)); offset = foo; } while (0)
#else
#define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo; __asm ("movq $"
#var "@TPOFF, %0" : "=r" (foo)); offset = foo; } while (0)
@@ -39,6 +54,15 @@
#define MONO_THREAD_VAR_OFFSET(var,offset) (offset) = -1
#endif
+#if defined(PIC) && !defined(PIC_INITIAL_EXEC)
+/*
+ * The above definitions do not seem to work if libmono is loaded dynamically
as a module.
+ * See bug #78767.
+ */
+#undef MONO_THREAD_VAR_OFFSET
+#define MONO_THREAD_VAR_OFFSET(var,offset) (offset) = -1
+#endif
+
#else /* no HAVE_KW_THREAD */
#define MONO_THREAD_VAR_OFFSET(var,offset) (offset) = -1
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches