[runtime] Global debug option for using fallback tls
authorVlad Brezae <brezaevlad@gmail.com>
Fri, 18 Nov 2016 20:34:42 +0000 (22:34 +0200)
committerVlad Brezae <brezaevlad@gmail.com>
Wed, 14 Dec 2016 15:52:50 +0000 (17:52 +0200)
mono/mini/method-to-ir.c
mono/mini/mini-amd64.c
mono/mini/mini-runtime.c
mono/mini/mini.h

index cd740ec7a59012a3489e37776df9a2f032b2a6f0..2193d5f327281f402c52f295c118840fe1026541 100644 (file)
@@ -1763,7 +1763,10 @@ mono_create_fast_tls_setter (MonoCompile *cfg, MonoInst* value, MonoTlsKey key)
 MonoInst*
 mono_create_tls_get (MonoCompile *cfg, MonoTlsKey key)
 {
-       MonoInst *fast_tls = mono_create_fast_tls_getter (cfg, key);
+       MonoInst *fast_tls = NULL;
+
+       if (!mini_get_debug_options ()->use_fallback_tls)
+               fast_tls = mono_create_fast_tls_getter (cfg, key);
 
        if (fast_tls) {
                MONO_ADD_INS (cfg->cbb, fast_tls);
@@ -1788,7 +1791,10 @@ mono_create_tls_get (MonoCompile *cfg, MonoTlsKey key)
 static MonoInst*
 mono_create_tls_set (MonoCompile *cfg, MonoInst *value, MonoTlsKey key)
 {
-       MonoInst *fast_tls = mono_create_fast_tls_setter (cfg, value, key);
+       MonoInst *fast_tls = NULL;
+
+       if (!mini_get_debug_options ()->use_fallback_tls)
+               fast_tls = mono_create_fast_tls_setter (cfg, value, key);
 
        if (fast_tls) {
                MONO_ADD_INS (cfg->cbb, fast_tls);
index 46f9f64606d35539bcde6907bc7d04b5d3e07d14..34843ef95ae905c5c977999b7e57b5d289d44525 100644 (file)
@@ -3426,6 +3426,9 @@ mono_arch_have_fast_tls (void)
        static gboolean inited = FALSE;
        guint8 *ins;
 
+       if (mini_get_debug_options ()->use_fallback_tls)
+               return FALSE;
+
        if (inited)
                return have_fast_tls;
 
@@ -3483,6 +3486,8 @@ mono_arch_have_fast_tls (void)
 #elif defined(TARGET_ANDROID)
        return FALSE;
 #else
+       if (mini_get_debug_options ()->use_fallback_tls)
+               return FALSE;
        return TRUE;
 #endif
 }
index b075e3b09ebb3824b3ed609d20d71c3cc5e02e93..0c67814f126135e9e89b8a59f6204a26b1539e8e 100644 (file)
@@ -3121,8 +3121,8 @@ mini_parse_debug_option (const char *option)
                debug_options.soft_breakpoints = TRUE;
        else if (!strcmp (option, "check-pinvoke-callconv"))
                debug_options.check_pinvoke_callconv = TRUE;
-       else if (!strcmp (option, "arm-use-fallback-tls"))
-               debug_options.arm_use_fallback_tls = TRUE;
+       else if (!strcmp (option, "use-fallback-tls"))
+               debug_options.use_fallback_tls = TRUE;
        else if (!strcmp (option, "debug-domain-unload"))
                mono_enable_debug_domain_unload (TRUE);
        else if (!strcmp (option, "partial-sharing"))
@@ -3155,7 +3155,7 @@ mini_parse_debug_options (void)
 
                if (!mini_parse_debug_option (arg)) {
                        fprintf (stderr, "Invalid option for the MONO_DEBUG env variable: %s\n", arg);
-                       fprintf (stderr, "Available options: 'handle-sigint', 'keep-delegates', 'reverse-pinvoke-exceptions', 'collect-pagefault-stats', 'break-on-unverified', 'no-gdb-backtrace', 'suspend-on-sigsegv', 'suspend-on-exception', 'suspend-on-unhandled', 'dont-free-domains', 'dyn-runtime-invoke', 'gdb', 'explicit-null-checks', 'gen-seq-points', 'no-compact-seq-points', 'single-imm-size', 'init-stacks', 'casts', 'soft-breakpoints', 'check-pinvoke-callconv', 'arm-use-fallback-tls', 'debug-domain-unload', 'partial-sharing', 'align-small-structs', 'native-debugger-break'\n");
+                       fprintf (stderr, "Available options: 'handle-sigint', 'keep-delegates', 'reverse-pinvoke-exceptions', 'collect-pagefault-stats', 'break-on-unverified', 'no-gdb-backtrace', 'suspend-on-sigsegv', 'suspend-on-exception', 'suspend-on-unhandled', 'dont-free-domains', 'dyn-runtime-invoke', 'gdb', 'explicit-null-checks', 'gen-seq-points', 'no-compact-seq-points', 'single-imm-size', 'init-stacks', 'casts', 'soft-breakpoints', 'check-pinvoke-callconv', 'use-fallback-tls', 'debug-domain-unload', 'partial-sharing', 'align-small-structs', 'native-debugger-break'\n");
                        exit (1);
                }
        }
index 81067a57d3757fee13cd80ffcbed29188d7fc1ad..31791d9adf77360889af93145a51bbdcfbd730e0 100644 (file)
@@ -2135,7 +2135,7 @@ typedef struct {
        gboolean suspend_on_unhandled;
        gboolean dyn_runtime_invoke;
        gboolean gdb;
-       gboolean arm_use_fallback_tls;
+       gboolean use_fallback_tls;
        /*
         * Whenever data such as next sequence points and flags is required.
         * Next sequence points and flags are required by the debugger agent.