Skip to content

Commit 7b9c609

Browse files
rovarmaUnityAlex
authored andcommitted
Added support for enumerating all methods that have been JIT compiled
- Added `mono_jit_info_table_foreach`. This function can be used to enumerate all currently JIT compiled methods in a domain. - Added `mono_domain_jit_foreach`. This function internally just forwards to `mono_jit_info_table_foreach` and is only there for consistency with the existing `mono_domain_foreach`, `mono_domain_assembly_foreach` functions.
1 parent 1190166 commit 7b9c609

File tree

4 files changed

+32
-0
lines changed

4 files changed

+32
-0
lines changed

mono/metadata/appdomain.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ typedef struct _MonoJitInfo MonoJitInfo;
2727

2828
typedef void (*MonoDomainFunc) (MonoDomain *domain, void* user_data);
2929
typedef void (*MonoDomainAssemblyFunc) (MonoAssembly *assembly, void* user_data);
30+
typedef void (*MonoJitInfoFunc)(MonoDomain *domain, MonoMethod* method, MonoJitInfo* jinfo);
3031
typedef void (*MonoUnityExceptionFunc) (MonoObject* exc);
3132

3233
MONO_API MonoDomain*
@@ -110,6 +111,9 @@ MONO_RT_EXTERNAL_ONLY
110111
MONO_API MonoDomain *
111112
mono_domain_from_appdomain (MonoAppDomain *appdomain);
112113

114+
MONO_API void
115+
mono_domain_jit_foreach (MonoDomain *domain, MonoJitInfoFunc func, void *user_data);
116+
113117
MONO_API void
114118
mono_domain_foreach (MonoDomainFunc func, void* user_data);
115119

mono/metadata/domain-internals.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,9 @@ mono_jit_info_table_free (MonoJitInfoTable *table);
491491
void
492492
mono_jit_info_table_add (MonoDomain *domain, MonoJitInfo *ji);
493493

494+
void
495+
mono_jit_info_table_foreach (MonoDomain *domain, MonoDomainFunc func, void *user_data);
496+
494497
void
495498
mono_jit_info_table_remove (MonoDomain *domain, MonoJitInfo *ji);
496499

mono/metadata/domain.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,12 @@ mono_domain_foreach (MonoDomainFunc func, gpointer user_data)
986986
gc_free_fixed_non_heap_list (copy);
987987
}
988988

989+
MONO_API void
990+
mono_domain_jit_foreach (MonoDomain *domain, MonoJitInfoFunc func, void *user_data)
991+
{
992+
mono_jit_info_table_foreach (domain, func, user_data);
993+
}
994+
989995
MONO_API void
990996
mono_domain_assembly_foreach (MonoDomain* domain, MonoDomainAssemblyFunc func, void* user_data)
991997
{

mono/metadata/jit-info.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,25 @@ mono_jit_info_table_remove (MonoDomain *domain, MonoJitInfo *ji)
750750
mono_domain_unlock (domain);
751751
}
752752

753+
void
754+
mono_jit_info_table_foreach (MonoDomain *domain, MonoDomainFunc func, void *user_data)
755+
{
756+
mono_domain_lock (domain);
757+
758+
MonoJitInfoTable *table = domain->jit_info_table;
759+
for (int chunk_index = 0; chunk_index < table->num_chunks; ++chunk_index) {
760+
for (int info_index = 0; info_index < table->chunks[chunk_index]->num_elements; ++info_index) {
761+
MonoJitInfo *ji = table->chunks[chunk_index]->data[info_index];
762+
if (IS_JIT_INFO_TOMBSTONE (ji) || ji->is_trampoline)
763+
continue;
764+
765+
func (domain, ji->d.method, ji);
766+
}
767+
}
768+
769+
mono_domain_unlock (domain);
770+
}
771+
753772
void
754773
mono_jit_info_add_aot_module (MonoImage *image, gpointer start, gpointer end)
755774
{

0 commit comments

Comments
 (0)