Skip to content

Commit 741c859

Browse files
authored
Merge pull request #1386 from Unity-Technologies/superluminal-support-staging
Superluminal support staging
2 parents 1190166 + 674307a commit 741c859

File tree

7 files changed

+50
-3
lines changed

7 files changed

+50
-3
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, void* user_data);
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/debug-mono-ppdb.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ typedef struct {
5454
gint32 signature;
5555
guint8 guid [16];
5656
gint32 age;
57+
char path [];
5758
} CodeviewDebugDirectory;
5859

5960
typedef struct {
@@ -63,7 +64,7 @@ typedef struct {
6364
} PdbStreamHeader;
6465

6566
static gboolean
66-
get_pe_debug_guid (MonoImage *image, guint8 *out_guid, gint32 *out_age, gint32 *out_timestamp)
67+
get_pe_debug_guid (MonoImage *image, const char** out_path, guint8 *out_guid, gint32 *out_age, gint32 *out_timestamp)
6768
{
6869
MonoPEDirEntry *debug_dir_entry;
6970
ImageDebugDirectory *debug_dir;
@@ -82,6 +83,11 @@ get_pe_debug_guid (MonoImage *image, guint8 *out_guid, gint32 *out_age, gint32 *
8283
memcpy (out_guid, dir->guid, 16);
8384
*out_age = dir->age;
8485
*out_timestamp = debug_dir->time_date_stamp;
86+
87+
if (out_path != NULL) {
88+
*out_path = g_strdup (dir->path);
89+
}
90+
8591
return TRUE;
8692
}
8793
}
@@ -109,6 +115,12 @@ create_ppdb_file (MonoImage *ppdb_image)
109115
return ppdb;
110116
}
111117

118+
gboolean
119+
mono_ppdb_get_signature(MonoImage *image, const char** out_path, guint8 *out_guid, gint32 *out_age, gint32 *out_timestamp)
120+
{
121+
return get_pe_debug_guid (image, out_path, out_guid, out_age, out_timestamp);
122+
}
123+
112124
MonoPPDBFile*
113125
mono_ppdb_load_file (MonoImage *image, const guint8 *raw_contents, int size)
114126
{
@@ -126,7 +138,7 @@ mono_ppdb_load_file (MonoImage *image, const guint8 *raw_contents, int size)
126138
return create_ppdb_file (image);
127139
}
128140

129-
if (!get_pe_debug_guid (image, pe_guid, &pe_age, &pe_timestamp)) {
141+
if (!get_pe_debug_guid (image, NULL, pe_guid, &pe_age, &pe_timestamp)) {
130142
mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Image '%s' has no debug directory.", image->name);
131143
return NULL;
132144
}

mono/metadata/debug-mono-ppdb.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
#include <mono/metadata/metadata-internals.h>
1818
#include <mono/metadata/mono-debug.h>
1919

20+
MONO_API gboolean
21+
mono_ppdb_get_signature (MonoImage *image, const char** out_path, guint8 *out_guid, gint32 *out_age, gint32 *out_timestamp);
22+
2023
MonoPPDBFile*
2124
mono_ppdb_load_file (MonoImage *image, const guint8 *raw_contents, int size);
2225

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, MonoJitInfoFunc 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, MonoJitInfoFunc 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, user_data);
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
{

mono/metadata/unity-utils.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ guint64 mono_unity_method_get_hash(MonoMethod *method, gboolean inflate);
9696
MonoMethod* mono_unity_method_get_aot_array_helper_from_wrapper(MonoMethod *method);
9797
MonoObject* mono_unity_method_convert_return_type_if_needed(MonoMethod *method, void *value);
9898
MONO_API gboolean unity_mono_method_is_inflated(MonoMethod* method);
99-
guint32 mono_unity_method_get_token(MonoMethod *method);
99+
MONO_API guint32 mono_unity_method_get_token(MonoMethod *method);
100100

101101
//domain
102102
void mono_unity_domain_install_finalize_runtime_invoke(MonoDomain* domain, RuntimeInvokeFunction callback);

0 commit comments

Comments
 (0)