From 421fa312a54f1f31dcecec3cc963c06b978bd7cc Mon Sep 17 00:00:00 2001 From: Vlad Brezae Date: Fri, 24 Apr 2015 17:23:20 -0700 Subject: [PATCH] [arm] Add MONO_DEBUG option for using only fallback tls. --- mono/mini/mini-arm.c | 2 ++ mono/mini/mini-runtime.c | 4 +++- mono/mini/mini.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/mono/mini/mini-arm.c b/mono/mini/mini-arm.c index 308d87246d7..bb2c85f00db 100644 --- a/mono/mini/mini-arm.c +++ b/mono/mini/mini-arm.c @@ -650,6 +650,8 @@ emit_restore_lmf (MonoCompile *cfg, guint8 *code, gint32 lmf_offset) static gboolean mono_arm_have_fast_tls (void) { + if (mini_get_debug_options ()->arm_use_fallback_tls) + return FALSE; #if (defined(HAVE_KW_THREAD) && defined(__linux__)) \ || defined(TARGET_ANDROID) guint32* kuser_get_tls = (void*)0xffff0fe0; diff --git a/mono/mini/mini-runtime.c b/mono/mini/mini-runtime.c index c870782f0d4..da6b4894be7 100644 --- a/mono/mini/mini-runtime.c +++ b/mono/mini/mini-runtime.c @@ -2675,6 +2675,8 @@ mini_parse_debug_options (void) debug_options.soft_breakpoints = TRUE; else if (!strcmp (arg, "check-pinvoke-callconv")) debug_options.check_pinvoke_callconv = TRUE; + else if (!strcmp (arg, "arm-use-fallback-tls")) + debug_options.arm_use_fallback_tls = TRUE; else if (!strcmp (arg, "debug-domain-unload")) mono_enable_debug_domain_unload (TRUE); else if (!strcmp (arg, "partial-sharing")) @@ -2683,7 +2685,7 @@ mini_parse_debug_options (void) mono_align_small_structs = TRUE; else { 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', 'dont-free-domains', 'suspend-on-sigsegv', 'suspend-on-exception', 'suspend-on-unhandled', 'dyn-runtime-invoke', 'gdb', 'explicit-null-checks', 'init-stacks', 'check-pinvoke-callconv', 'debug-domain-unload', 'partial-sharing', 'align-small-structs'\n"); + fprintf (stderr, "Available options: 'handle-sigint', 'keep-delegates', 'reverse-pinvoke-exceptions', 'collect-pagefault-stats', 'break-on-unverified', 'no-gdb-backtrace', 'dont-free-domains', 'suspend-on-sigsegv', 'suspend-on-exception', 'suspend-on-unhandled', 'dyn-runtime-invoke', 'gdb', 'explicit-null-checks', 'init-stacks', 'check-pinvoke-callconv', 'arm-use-fallback-tls', 'debug-domain-unload', 'partial-sharing', 'align-small-structs'\n"); exit (1); } } diff --git a/mono/mini/mini.h b/mono/mini/mini.h index 388628f02b9..4f91a1b59e2 100644 --- a/mono/mini/mini.h +++ b/mono/mini/mini.h @@ -1923,6 +1923,7 @@ typedef struct { gboolean suspend_on_unhandled; gboolean dyn_runtime_invoke; gboolean gdb; + gboolean arm_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. -- 2.25.1