[mono/mono] 0d403219: [runtime] Centralize the processing of MonoTrampInfo structures into the mono_tramp_info_register () function, to reduce code duplication.
"Zoltan Varga (
[email protected] )" <
[email protected] >
Tue, 22 Oct 2013 12:38:46 +0000
Newsgroups
gmane.comp.gnome.mono.patches
Message-ID
<00000141e02cabd3-8f29c01f-8457-491c-b6b1-92816837c739-000000@email.amazonses.com>
Branch: refs/heads/master
Home: https://github.com/mono/mono
Compare: https://github.com/mono/mono/compare/d48b2f6a2986...0d40321933ac
Commit: 0d40321933ac575314ab51efa3c62e8cf535a9d2
Author: Zoltan Varga <[email protected] > (vargaz)
Date: 2013-10-22 12:35:46 GMT
URL: https://github.com/mono/mono/commit/0d40321933ac575314ab51efa3c62e8cf535a9d2
[runtime] Centralize the processing of MonoTrampInfo structures into the mono_tramp_info_register () function, to reduce code duplication.
Changed paths:
M mono/mini/exceptions-amd64.c
M mono/mini/exceptions-arm.c
M mono/mini/mini-exceptions.c
M mono/mini/mini-trampolines.c
M mono/mini/mini.c
M mono/mini/tramp-amd64.c
M mono/mini/tramp-x86.c
M mono/mini/xdebug.c
Modified: mono/mini/exceptions-amd64.c
===================================================================
@@ -1150,8 +1150,7 @@ void win32_seh_set_handler(int type, MonoW32ExceptionHandler handler)
MonoTrampInfo *info = l->data;
mono_register_jit_icall (info->code, g_strdup (info->name), NULL, TRUE);
- mono_save_trampoline_xdebug_info (info);
- mono_tramp_info_free (info);
+ mono_tramp_info_register (info);
}
g_slist_free (tramps);
}
Modified: mono/mini/exceptions-arm.c
===================================================================
@@ -367,8 +367,7 @@
MonoTrampInfo *info = l->data;
mono_register_jit_icall (info->code, g_strdup (info->name), NULL, TRUE);
- mono_save_trampoline_xdebug_info (info);
- mono_tramp_info_free (info);
+ mono_tramp_info_register (info);
}
g_slist_free (tramps);
}
Modified: mono/mini/mini-exceptions.c
===================================================================
@@ -87,25 +87,13 @@
MonoTrampInfo *info;
restore_context_func = mono_arch_get_restore_context (&info, FALSE);
- if (info) {
- mono_save_trampoline_xdebug_info (info);
- mono_tramp_info_free (info);
- }
+ mono_tramp_info_register (info);
call_filter_func = mono_arch_get_call_filter (&info, FALSE);
- if (info) {
- mono_save_trampoline_xdebug_info (info);
- mono_tramp_info_free (info);
- }
+ mono_tramp_info_register (info);
throw_exception_func = mono_arch_get_throw_exception (&info, FALSE);
- if (info) {
- mono_save_trampoline_xdebug_info (info);
- mono_tramp_info_free (info);
- }
+ mono_tramp_info_register (info);
rethrow_exception_func = mono_arch_get_rethrow_exception (&info, FALSE);
- if (info) {
- mono_save_trampoline_xdebug_info (info);
- mono_tramp_info_free (info);
- }
+ mono_tramp_info_register (info);
}
#ifdef MONO_ARCH_HAVE_RESTORE_STACK_SUPPORT
try_more_restore_tramp = mono_create_specific_trampoline (try_more_restore, MONO_TRAMPOLINE_RESTORE_STACK_PROT, mono_domain_get (), NULL);
@@ -166,10 +154,7 @@
code = mono_aot_get_trampoline ("throw_corlib_exception");
else {
code = mono_arch_get_throw_corlib_exception (&info, FALSE);
- if (info) {
- mono_save_trampoline_xdebug_info (info);
- mono_tramp_info_free (info);
- }
+ mono_tramp_info_register (info);
}
mono_memory_barrier ();
Modified: mono/mini/mini-trampolines.c
===================================================================
@@ -1220,12 +1220,7 @@
guchar *code;
code = mono_arch_create_generic_trampoline (tramp_type, &info, FALSE);
- if (info) {
- mono_save_trampoline_xdebug_info (info);
- if (mono_jit_map_is_enabled ())
- mono_emit_jit_tramp (info->code, info->code_size, info->name);
- mono_tramp_info_free (info);
- }
+ mono_tramp_info_register (info);
return code;
}
@@ -1349,13 +1344,7 @@
code = mono_get_addr_from_ftnptr (mono_aot_get_trampoline ("generic_class_init_trampoline"));
else {
code = mono_arch_create_generic_class_init_trampoline (&info, FALSE);
-
- if (info) {
- mono_save_trampoline_xdebug_info (info);
- if (mono_jit_map_is_enabled ())
- mono_emit_jit_tramp (info->code, info->code_size, info->name);
- mono_tramp_info_free (info);
- }
+ mono_tramp_info_register (info);
}
}
@@ -1530,12 +1519,7 @@
ptr = mono_aot_get_lazy_fetch_trampoline (offset);
} else {
tramp = mono_arch_create_rgctx_lazy_fetch_trampoline (offset, &info, FALSE);
- if (info) {
- mono_save_trampoline_xdebug_info (info);
- if (mono_jit_map_is_enabled ())
- mono_emit_jit_tramp (info->code, info->code_size, info->name);
- mono_tramp_info_free (info);
- }
+ mono_tramp_info_register (info);
ptr = mono_create_ftnptr (mono_get_root_domain (), tramp);
}
@@ -1577,12 +1561,7 @@
MonoTrampInfo *info;
code = mono_arch_create_monitor_enter_trampoline (&info, FALSE);
- if (info) {
- mono_save_trampoline_xdebug_info (info);
- if (mono_jit_map_is_enabled ())
- mono_emit_jit_tramp (info->code, info->code_size, info->name);
- mono_tramp_info_free (info);
- }
+ mono_tramp_info_register (info);
}
mono_trampolines_unlock ();
@@ -1612,12 +1591,7 @@
MonoTrampInfo *info;
code = mono_arch_create_monitor_exit_trampoline (&info, FALSE);
- if (info) {
- mono_save_trampoline_xdebug_info (info);
- if (mono_jit_map_is_enabled ())
- mono_emit_jit_tramp (info->code, info->code_size, info->name);
- mono_tramp_info_free (info);
- }
+ mono_tramp_info_register (info);
}
mono_trampolines_unlock ();
@@ -1734,11 +1708,14 @@
if (!nullified_class_init_trampoline) {
gpointer tramp;
+ MonoTrampInfo *info;
- if (mono_aot_only)
+ if (mono_aot_only) {
tramp = mono_aot_get_trampoline ("nullified_class_init_trampoline");
- else
- tramp = mono_arch_get_nullified_class_init_trampoline (NULL);
+ } else {
+ tramp = mono_arch_get_nullified_class_init_trampoline (&info);
+ mono_tramp_info_register (info);
+ }
mono_memory_barrier ();
nullified_class_init_trampoline = tramp;
}
Modified: mono/mini/mini.c
===================================================================
@@ -667,13 +667,18 @@ void *mono_global_codeman_reserve (int size)
/*
* mono_tramp_info_register:
*
- * Remember INFO for use by mono_print_method_from_ip ().
+ * Remember INFO for use by xdebug, mono_print_method_from_ip (), jit maps, etc.
+ * INFO can be NULL.
+ * Frees INFO.
*/
void
mono_tramp_info_register (MonoTrampInfo *info)
{
MonoTrampInfo *copy;
+ if (!info)
+ return;
+
copy = g_new0 (MonoTrampInfo, 1);
copy->code = info->code;
copy->code_size = info->code_size;
@@ -682,6 +687,13 @@ void *mono_global_codeman_reserve (int size)
mono_loader_lock_if_inited ();
tramp_infos = g_slist_prepend (tramp_infos, copy);
mono_loader_unlock_if_inited ();
+
+ mono_save_trampoline_xdebug_info (info);
+
+ if (mono_jit_map_is_enabled ())
+ mono_emit_jit_tramp (info->code, info->code_size, info->name);
+
+ mono_tramp_info_free (info);
}
G_GNUC_UNUSED static void
Modified: mono/mini/tramp-amd64.c
===================================================================
@@ -741,9 +741,6 @@
if (info)
*info = mono_tramp_info_create ("nullified_class_init_trampoline", buf, code - buf, NULL, NULL);
- if (mono_jit_map_is_enabled ())
- mono_emit_jit_tramp (buf, code - buf, "nullified_class_init_trampoline");
-
return buf;
}
Modified: mono/mini/tramp-x86.c
===================================================================
@@ -558,9 +558,6 @@
if (info)
*info = mono_tramp_info_create ("nullified_class_init_trampoline", buf, code - buf, NULL, NULL);
- if (mono_jit_map_is_enabled ())
- mono_emit_jit_tramp (buf, code - buf, "nullified_class_init_trampoline");
-
return buf;
}
Modified: mono/mini/xdebug.c
===================================================================
@@ -341,8 +341,6 @@ void MONO_NOINLINE __jit_debug_register_code(void) {
void
mono_save_trampoline_xdebug_info (MonoTrampInfo *info)
{
- mono_tramp_info_register (info);
-
if (use_gdb_interface) {
MonoImageWriter *w;
MonoDwarfWriter *dw;
@@ -383,7 +381,6 @@ void MONO_NOINLINE __jit_debug_register_code(void) {
void
mono_save_trampoline_xdebug_info (MonoTrampInfo *info)
{
- mono_tramp_info_register (info);
}
#endif
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches