From: Jay Krell Date: Fri, 5 Jul 2019 13:46:10 +0000 (-0700) Subject: Readonly codemanager callbacks. (mono/mono#15538) X-Git-Tag: submit/tizen/20210909.063632~10331^2~5^2~1020 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ba61237b68c980d92da9b8be6025afd525d68898;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Readonly codemanager callbacks. (mono/mono#15538) Commit migrated from https://github.com/mono/mono/commit/4cf527f6d9ce224c8d1972c95e212f74a0c91043 --- diff --git a/src/mono/mono/mini/mini-runtime.c b/src/mono/mono/mini/mini-runtime.c index 7179fe2..3ee046f 100644 --- a/src/mono/mono/mini/mini-runtime.c +++ b/src/mono/mono/mini/mini-runtime.c @@ -3966,22 +3966,6 @@ mini_free_jit_domain_info (MonoDomain *domain) domain->runtime_info = NULL; } -#ifdef MONO_ARCH_HAVE_CODE_CHUNK_TRACKING - -static void -code_manager_chunk_new (void *chunk, int size) -{ - mono_arch_code_chunk_new (chunk, size); -} - -static void -code_manager_chunk_destroy (void *chunk) -{ - mono_arch_code_chunk_destroy (chunk); -} - -#endif - #ifdef ENABLE_LLVM static gboolean llvm_init_inner (void) @@ -4086,7 +4070,6 @@ mini_init (const char *filename, const char *runtime_version) MonoDomain *domain; MonoRuntimeCallbacks callbacks; MonoThreadInfoRuntimeCallbacks ticallbacks; - MonoCodeManagerCallbacks code_manager_callbacks; MONO_VES_INIT_BEGIN (); @@ -4198,12 +4181,18 @@ mini_init (const char *filename, const char *runtime_version) mono_code_manager_init (); - memset (&code_manager_callbacks, 0, sizeof (code_manager_callbacks)); #ifdef MONO_ARCH_HAVE_CODE_CHUNK_TRACKING - code_manager_callbacks.chunk_new = code_manager_chunk_new; - code_manager_callbacks.chunk_destroy = code_manager_chunk_destroy; -#endif + + static const MonoCodeManagerCallbacks code_manager_callbacks = { + +#undef MONO_CODE_MANAGER_CALLBACK +#define MONO_CODE_MANAGER_CALLBACK(ret, name, sig) mono_arch_code_ ## name, + MONO_CODE_MANAGER_CALLBACKS + + }; + mono_code_manager_install_callbacks (&code_manager_callbacks); +#endif mono_hwcap_init (); diff --git a/src/mono/mono/utils/mono-codeman.c b/src/mono/mono/utils/mono-codeman.c index 973ccc2..6bc0d0b 100644 --- a/src/mono/mono/utils/mono-codeman.c +++ b/src/mono/mono/utils/mono-codeman.c @@ -31,7 +31,7 @@ static uintptr_t code_memory_used = 0; static size_t dynamic_code_alloc_count; static size_t dynamic_code_bytes_count; static size_t dynamic_code_frees_count; -static MonoCodeManagerCallbacks code_manager_callbacks; +static const MonoCodeManagerCallbacks *code_manager_callbacks; /* * AMD64 processors maintain icache coherency only for pages which are @@ -179,9 +179,9 @@ mono_code_manager_cleanup (void) } void -mono_code_manager_install_callbacks (MonoCodeManagerCallbacks* callbacks) +mono_code_manager_install_callbacks (const MonoCodeManagerCallbacks* callbacks) { - code_manager_callbacks = *callbacks; + code_manager_callbacks = callbacks; } /** @@ -236,8 +236,8 @@ free_chunklist (CodeChunk *chunk) for (; chunk; ) { dead = chunk; MONO_PROFILER_RAISE (jit_chunk_destroyed, ((mono_byte *) dead->data)); - if (code_manager_callbacks.chunk_destroy) - code_manager_callbacks.chunk_destroy ((gpointer)dead->data); + if (code_manager_callbacks) + code_manager_callbacks->chunk_destroy (dead->data); chunk = chunk->next; if (dead->flags == CODE_FLAG_MMAP) { codechunk_vfree (dead->data, dead->size); @@ -421,8 +421,8 @@ new_codechunk (CodeChunk *last, int dynamic, int size) chunk->flags = flags; chunk->pos = bsize; chunk->bsize = bsize; - if (code_manager_callbacks.chunk_new) - code_manager_callbacks.chunk_new ((gpointer)chunk->data, chunk->size); + if (code_manager_callbacks) + code_manager_callbacks->chunk_new (chunk->data, chunk->size); MONO_PROFILER_RAISE (jit_chunk_created, ((mono_byte *) chunk->data, chunk->size)); code_memory_used += chunk_size; diff --git a/src/mono/mono/utils/mono-codeman.h b/src/mono/mono/utils/mono-codeman.h index 3128bdf..65f0a8a 100644 --- a/src/mono/mono/utils/mono-codeman.h +++ b/src/mono/mono/utils/mono-codeman.h @@ -9,9 +9,17 @@ typedef struct _MonoCodeManager MonoCodeManager; +#define MONO_CODE_MANAGER_CALLBACKS \ + MONO_CODE_MANAGER_CALLBACK (void, chunk_new, (void *chunk, int size)) \ + MONO_CODE_MANAGER_CALLBACK (void, chunk_destroy, (void *chunk)) \ + typedef struct { - void (*chunk_new) (void *chunk, int size); - void (*chunk_destroy) (void *chunk); + +#undef MONO_CODE_MANAGER_CALLBACK +#define MONO_CODE_MANAGER_CALLBACK(ret, name, sig) ret (*name) sig; + + MONO_CODE_MANAGER_CALLBACKS + } MonoCodeManagerCallbacks; MonoCodeManager* mono_code_manager_new (void); @@ -29,7 +37,7 @@ void mono_code_manager_commit (MonoCodeManager *cman, void *data, i int mono_code_manager_size (MonoCodeManager *cman, int *used_size); void mono_code_manager_init (void); void mono_code_manager_cleanup (void); -void mono_code_manager_install_callbacks (MonoCodeManagerCallbacks* callbacks); +void mono_code_manager_install_callbacks (const MonoCodeManagerCallbacks* callbacks); /* find the extra block allocated to resolve branches close to code */ typedef int (*MonoCodeManagerFunc) (void *data, int csize, int size, void *user_data);