diff options
author | Mirco Bauer <meebey@meebey.net> | 2013-06-16 22:12:22 +0200 |
---|---|---|
committer | Mirco Bauer <meebey@meebey.net> | 2013-06-16 22:12:22 +0200 |
commit | 319a186dbe328f97eae6f8640ff2392bdeee17ae (patch) | |
tree | e3a5e830e88d695d0d77809b054627f04e102960 | |
parent | 7b291a4f695d42eb96f744805329df9b2069455d (diff) | |
parent | 172471f34ead028db9a0ac3e59392c2a35852093 (diff) | |
download | mono-319a186dbe328f97eae6f8640ff2392bdeee17ae.tar.gz |
Merge branch 'master-experimental-patches/fix_sparc_tls' into master-experimental
-rw-r--r-- | mono/mini/mini-sparc.c | 15 | ||||
-rw-r--r-- | mono/mini/mini-sparc.h | 3 | ||||
-rw-r--r-- | mono/mini/mini.c | 6 |
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 (); |