summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMirco Bauer <meebey@meebey.net>2013-06-16 22:12:22 +0200
committerMirco Bauer <meebey@meebey.net>2013-06-16 22:12:22 +0200
commit319a186dbe328f97eae6f8640ff2392bdeee17ae (patch)
treee3a5e830e88d695d0d77809b054627f04e102960
parent7b291a4f695d42eb96f744805329df9b2069455d (diff)
parent172471f34ead028db9a0ac3e59392c2a35852093 (diff)
downloadmono-319a186dbe328f97eae6f8640ff2392bdeee17ae.tar.gz
Merge branch 'master-experimental-patches/fix_sparc_tls' into master-experimental
-rw-r--r--mono/mini/mini-sparc.c15
-rw-r--r--mono/mini/mini-sparc.h3
-rw-r--r--mono/mini/mini.c6
3 files changed, 20 insertions, 4 deletions
diff --git a/mono/mini/mini-sparc.c b/mono/mini/mini-sparc.c
index 12150ca1eb..2300f39c74 100644
--- a/mono/mini/mini-sparc.c
+++ b/mono/mini/mini-sparc.c
@@ -4361,8 +4361,10 @@ mono_arch_get_lmf_addr (void)
#endif
void
-mono_arch_finish_init (void)
+mono_arch_tls_init (void)
{
+ MonoJitTlsData *jit_tls;
+
if (!lmf_addr_key_inited) {
int res;
@@ -4377,14 +4379,21 @@ mono_arch_finish_init (void)
}
+ jit_tls = pthread_getspecific (mono_get_jit_tls_key ());
+
#ifdef MONO_SPARC_THR_TLS
- thr_setspecific (lmf_addr_key, &tls->lmf);
+ thr_setspecific (lmf_addr_key, &jit_tls->lmf);
#else
- pthread_setspecific (lmf_addr_key, &tls->lmf);
+ pthread_setspecific (lmf_addr_key, &jit_tls->lmf);
#endif
}
void
+mono_arch_finish_init (void)
+{
+}
+
+void
mono_arch_free_jit_tls_data (MonoJitTlsData *tls)
{
}
diff --git a/mono/mini/mini-sparc.h b/mono/mini/mini-sparc.h
index b65457117f..f2b3b41d79 100644
--- a/mono/mini/mini-sparc.h
+++ b/mono/mini/mini-sparc.h
@@ -105,6 +105,9 @@ typedef struct MonoCompileArch {
#define MONO_ARCH_HAVE_IMT 1
#define MONO_ARCH_IMT_REG sparc_g1
#define MONO_ARCH_HAVE_DECOMPOSE_LONG_OPTS 1
+#define MONO_ARCH_HAVE_TLS_INIT 1
+
+void mono_arch_tls_init (void);
#ifdef SPARCV9
#define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS
diff --git a/mono/mini/mini.c b/mono/mini/mini.c
index 12752a0338..26cc4f021c 100644
--- a/mono/mini/mini.c
+++ b/mono/mini/mini.c
@@ -2730,6 +2730,10 @@ setup_jit_tls_data (gpointer stack_start, gpointer abort_func)
jit_tls->lmf = lmf;
#endif
+#ifdef MONO_ARCH_HAVE_TLS_INIT
+ mono_arch_tls_init ();
+#endif
+
mono_setup_altstack (jit_tls);
return jit_tls;
@@ -6851,9 +6855,9 @@ mini_init (const char *filename, const char *runtime_version)
mono_install_imt_thunk_builder (mono_arch_build_imt_thunk);
}
#endif
+
/*Init arch tls information only after the metadata side is inited to make sure we see dynamic appdomain tls keys*/
mono_arch_finish_init ();
-
/* This must come after mono_init () in the aot-only case */
mono_exceptions_init ();