[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]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.