X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fjit-info.c;h=e94b73d590cfe85fd055d00b341fc8d84198c924;hb=58e8a9f85176c9607e605b888ef45db01a0f6997;hp=17b7107e63d873a495ed3fa70569a79bde57499b;hpb=3d1cf8071245e836b1e23b66e61ea450e4d29012;p=mono.git diff --git a/mono/metadata/jit-info.c b/mono/metadata/jit-info.c index 17b7107e63d..e94b73d590c 100644 --- a/mono/metadata/jit-info.c +++ b/mono/metadata/jit-info.c @@ -8,6 +8,7 @@ * Copyright 2001-2003 Ximian, Inc (http://www.ximian.com) * Copyright 2004-2009 Novell, Inc (http://www.novell.com) * Copyright 2011-2012 Xamarin, Inc (http://www.xamarin.com) + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #include @@ -311,6 +312,21 @@ mono_jit_info_table_find_internal (MonoDomain *domain, char *addr, gboolean try_ return ji; } +/** + * mono_jit_info_table_find: + * @domain: Domain that you want to look up + * @addr: Points to an address with JITed code. + * + * Use this function to obtain a `MonoJitInfo*` object that can be used to get + * some statistics. You should provide both the @domain on which you will be + * performing the probe, and an address. Since application domains can share code + * the same address can be in use by multiple domains at once. + * + * This does not return any results for trampolines. + * + * Returns: NULL if the address does not belong to JITed code (it might be native + * code or a trampoline) or a valid pointer to a `MonoJitInfo*`. + */ MonoJitInfo* mono_jit_info_table_find (MonoDomain *domain, char *addr) { @@ -598,7 +614,7 @@ jit_info_table_add (MonoDomain *domain, MonoJitInfoTable *volatile *table_ptr, M *table_ptr = new_table; mono_memory_barrier (); domain->num_jit_info_tables++; - mono_thread_hazardous_free_or_queue (table, (MonoHazardousFreeFunc)mono_jit_info_table_free, TRUE, FALSE); + mono_thread_hazardous_try_free (table, (MonoHazardousFreeFunc)mono_jit_info_table_free); table = new_table; goto restart; @@ -676,7 +692,7 @@ mono_jit_info_free_or_queue (MonoDomain *domain, MonoJitInfo *ji) if (domain->num_jit_info_tables <= 1) { /* Can it actually happen that we only have one table but ji is still hazardous? */ - mono_thread_hazardous_free_or_queue (ji, g_free, TRUE, FALSE); + mono_thread_hazardous_try_free (ji, g_free); } else { domain->jit_info_free_queue = g_slist_prepend (domain->jit_info_free_queue, ji); } @@ -806,18 +822,48 @@ mono_jit_info_init (MonoJitInfo *ji, MonoMethod *method, guint8 *code, int code_ ji->has_thunk_info = 1; } +/** + * mono_jit_info_get_code_start: + * @ji: the JIT information handle + * + * Use this function to get the starting address for the method described by + * the @ji object. You can use this plus the `mono_jit_info_get_code_size` + * to determine the start and end of the native code. + * + * Returns: Starting address with the native code. + */ gpointer mono_jit_info_get_code_start (MonoJitInfo* ji) { return ji->code_start; } +/** + * mono_jit_info_get_code_size: + * @ji: the JIT information handle + * + * Use this function to get the code size for the method described by + * the @ji object. You can use this plus the `mono_jit_info_get_code_start` + * to determine the start and end of the native code. + * + * Returns: Starting address with the native code. + */ int mono_jit_info_get_code_size (MonoJitInfo* ji) { return ji->code_size; } +/** + * mono_jit_info_get_method: + * @ji: the JIT information handle + * + * Use this function to get the `MonoMethod *` that backs + * the @ji object. + * + * Returns: The MonoMethod that represents the code tracked + * by @ji. + */ MonoMethod* mono_jit_info_get_method (MonoJitInfo* ji) {