Skip to content

Commit 9f4bc33

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 36907e7 commit 9f4bc33

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
@@ -26,6 +26,7 @@ typedef void (*MonoThreadAttachCB) (intptr_t tid, void* stack_start);
2626
typedef struct _MonoAppDomain MonoAppDomain;
2727

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

@@ -102,6 +103,9 @@ mono_domain_is_unloading (MonoDomain *domain);
102103
MONO_API MONO_RT_EXTERNAL_ONLY MonoDomain *
103104
mono_domain_from_appdomain (MonoAppDomain *appdomain);
104105

106+
MONO_API void
107+
mono_domain_jit_foreach (MonoDomain *domain, MonoJitInfoFunc func, void *user_data);
108+
105109
MONO_API void
106110
mono_domain_foreach (MonoDomainFunc func, void* user_data);
107111

mono/metadata/domain-internals.h

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

554+
void
555+
mono_jit_info_table_foreach (MonoDomain *domain, MonoDomainFunc func, void *user_data);
556+
554557
void
555558
mono_jit_info_table_remove (MonoDomain *domain, MonoJitInfo *ji);
556559

mono/metadata/domain.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,6 +1067,12 @@ mono_domain_ensure_entry_assembly (MonoDomain *domain, MonoAssembly *assembly)
10671067
}
10681068
}
10691069

1070+
MONO_API void
1071+
mono_domain_jit_foreach (MonoDomain *domain, MonoJitInfoFunc func, void *user_data)
1072+
{
1073+
mono_jit_info_table_foreach (domain, func, user_data);
1074+
}
1075+
10701076
MONO_API void
10711077
mono_domain_assembly_foreach (MonoDomain* domain, MonoDomainAssemblyFunc func, void* user_data)
10721078
{

mono/metadata/jit-info.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,25 @@ mono_jit_info_table_remove (MonoDomain *domain, MonoJitInfo *ji)
805805
*
806806
* Associate the AOT code range [start, end) with IMAGE in the JIT info table.
807807
*/
808+
void
809+
mono_jit_info_table_foreach (MonoDomain *domain, MonoDomainFunc func, void *user_data)
810+
{
811+
mono_domain_lock (domain);
812+
813+
MonoJitInfoTable *table = domain->jit_info_table;
814+
for (int chunk_index = 0; chunk_index < table->num_chunks; ++chunk_index) {
815+
for (int info_index = 0; info_index < table->chunks[chunk_index]->num_elements; ++info_index) {
816+
MonoJitInfo *ji = table->chunks[chunk_index]->data[info_index];
817+
if (IS_JIT_INFO_TOMBSTONE (ji) || ji->is_trampoline)
818+
continue;
819+
820+
func (domain, ji->d.method, ji);
821+
}
822+
}
823+
824+
mono_domain_unlock (domain);
825+
}
826+
808827
void
809828
mono_jit_info_add_aot_module (MonoImage *image, gpointer start, gpointer end)
810829
{

0 commit comments

Comments
 (0)