From bef8c4d0f8be27b61bedc1110f14034e4e70d709 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Fri, 14 Jul 2017 15:39:16 -0400 Subject: [PATCH] [llvm] Reserve the proper number of got entries in the llvm got instead of 16 which used to be enough in the past. Hopefully fixes #56111. (#5207) --- mono/mini/aot-compiler.c | 2 +- mono/mini/mini-llvm-loaded.c | 6 +++--- mono/mini/mini-llvm.c | 4 ++-- mono/mini/mini-llvm.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mono/mini/aot-compiler.c b/mono/mini/aot-compiler.c index a9a477767b6..b9c86a44c89 100644 --- a/mono/mini/aot-compiler.c +++ b/mono/mini/aot-compiler.c @@ -11631,7 +11631,7 @@ mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options) #ifdef ENABLE_LLVM if (acfg->llvm) { llvm_acfg = acfg; - mono_llvm_create_aot_module (acfg->image->assembly, acfg->global_prefix, TRUE, acfg->aot_opts.static_link, acfg->aot_opts.llvm_only); + mono_llvm_create_aot_module (acfg->image->assembly, acfg->global_prefix, acfg->nshared_got_entries, TRUE, acfg->aot_opts.static_link, acfg->aot_opts.llvm_only); } #endif diff --git a/mono/mini/mini-llvm-loaded.c b/mono/mini/mini-llvm-loaded.c index a5c0397221b..fb1dcac9813 100644 --- a/mono/mini/mini-llvm-loaded.c +++ b/mono/mini/mini-llvm-loaded.c @@ -14,7 +14,7 @@ typedef struct { void (*cleanup)(void); void (*emit_method)(MonoCompile *cfg); void (*emit_call)(MonoCompile *cfg, MonoCallInst *call); - void (*create_aot_module)(MonoAssembly *assembly, const char *global_prefix, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only); + void (*create_aot_module)(MonoAssembly *assembly, const char *global_prefix, int initial_got_size, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only); void (*emit_aot_module)(const char *filename, const char *cu_name); void (*check_method_supported)(MonoCompile *cfg); void (*emit_aot_file_info)(MonoAotFileInfo *info, gboolean has_jitted_code); @@ -50,9 +50,9 @@ mono_llvm_emit_call (MonoCompile *cfg, MonoCallInst *call) } void -mono_llvm_create_aot_module (MonoAssembly *assembly, const char *global_prefix, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only) +mono_llvm_create_aot_module (MonoAssembly *assembly, const char *global_prefix, int initial_got_size, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only) { - backend.create_aot_module (assembly, global_prefix, emit_dwarf, static_link, llvm_only); + backend.create_aot_module (assembly, global_prefix, initial_got_size, emit_dwarf, static_link, llvm_only); } void diff --git a/mono/mini/mini-llvm.c b/mono/mini/mini-llvm.c index 75e60e6dcd9..81c12dfe779 100644 --- a/mono/mini/mini-llvm.c +++ b/mono/mini/mini-llvm.c @@ -8429,7 +8429,7 @@ mono_llvm_free_domain_info (MonoDomain *domain) } void -mono_llvm_create_aot_module (MonoAssembly *assembly, const char *global_prefix, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only) +mono_llvm_create_aot_module (MonoAssembly *assembly, const char *global_prefix, int initial_got_size, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only) { MonoLLVMModule *module = &aot_module; @@ -8453,7 +8453,7 @@ mono_llvm_create_aot_module (MonoAssembly *assembly, const char *global_prefix, module->static_link = static_link; module->llvm_only = llvm_only; /* The first few entries are reserved */ - module->max_got_offset = 16; + module->max_got_offset = initial_got_size; module->context = LLVMGetGlobalContext (); if (llvm_only) diff --git a/mono/mini/mini-llvm.h b/mono/mini/mini-llvm.h index 483729d1c3b..0942c9a7d42 100644 --- a/mono/mini/mini-llvm.h +++ b/mono/mini/mini-llvm.h @@ -13,7 +13,7 @@ void mono_llvm_init (void) MONO_LLVM_INTERNAL; void mono_llvm_cleanup (void) MONO_LLVM_INTERNAL; void mono_llvm_emit_method (MonoCompile *cfg) MONO_LLVM_INTERNAL; void mono_llvm_emit_call (MonoCompile *cfg, MonoCallInst *call) MONO_LLVM_INTERNAL; -void mono_llvm_create_aot_module (MonoAssembly *assembly, const char *global_prefix, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only) MONO_LLVM_INTERNAL; +void mono_llvm_create_aot_module (MonoAssembly *assembly, const char *global_prefix, int initial_got_size, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only) MONO_LLVM_INTERNAL; void mono_llvm_emit_aot_module (const char *filename, const char *cu_name) MONO_LLVM_INTERNAL; void mono_llvm_emit_aot_file_info (MonoAotFileInfo *info, gboolean has_jitted_code) MONO_LLVM_INTERNAL; void mono_llvm_emit_aot_data (const char *symbol, guint8 *data, int data_len) MONO_LLVM_INTERNAL; -- 2.25.1