Imported Upstream version 5.12.0.223
Former-commit-id: c3840b30a5998a62e5368c8f88eef1601a6fc491
This commit is contained in:
parent
d611fefa02
commit
9e13e72606
@ -1 +1 @@
|
||||
9544823d03e71dc9059564b8c7fbe8be9483d0bc
|
||||
18fbfd8270e70f42071ea2077a1d057e42223842
|
@ -1 +1 @@
|
||||
28f60a5aa88f85c58ecdc32445f6a814f3a5fdbc
|
||||
d5bcc43ef87c733105d69a5bcde120c81608f89f
|
@ -34,7 +34,7 @@ static class Consts
|
||||
// Use these assembly version constants to make code more maintainable.
|
||||
//
|
||||
|
||||
public const string MonoVersion = "5.12.0.222";
|
||||
public const string MonoVersion = "5.12.0.223";
|
||||
public const string MonoCompany = "Mono development team";
|
||||
public const string MonoProduct = "Mono Common Language Infrastructure";
|
||||
public const string MonoCopyright = "(c) Various Mono authors";
|
||||
|
@ -1 +1 @@
|
||||
d28b6c3703a58531f125c423c27f8adbde573af9
|
||||
27fd453a8a108d8d59359580a637bd58c05565e9
|
@ -1 +1 @@
|
||||
3604c375f47486e552da59ed4a25284180b314e6
|
||||
2ef294e45a4cf7f14ae9063fa2ba18d20196dd5e
|
@ -1 +1 @@
|
||||
58d245d451489dbeea28505fea734a77300d3616
|
||||
80e0eec30e4bf790b0b02079dd2ad3124400ab89
|
@ -1 +1 @@
|
||||
4c6742c18b8578b8206b12de108cc6a6e225a4ec
|
||||
95e13d525c52bcd65bd86f6c66f306e4bfff7285
|
@ -1 +1 @@
|
||||
dd3b73736ed3fae602f5f62d52f593ca267d37e8
|
||||
d8e876168b44d4dc88a526a69165ef7e3b519740
|
@ -1 +1 @@
|
||||
06506c4a96a36fa5f17807f9c4d9047bc2fa413f
|
||||
45c7d8d59688f506db9d16ea9a1b854604d1ed6c
|
@ -1 +1 @@
|
||||
4ead486d5a9c37a72b0a4e192ba811c507c551f5
|
||||
f93e3dea1100aa00ec51aa2eb95a392c9be120e3
|
@ -1 +1 @@
|
||||
d28b6c3703a58531f125c423c27f8adbde573af9
|
||||
27fd453a8a108d8d59359580a637bd58c05565e9
|
@ -1 +1 @@
|
||||
3604c375f47486e552da59ed4a25284180b314e6
|
||||
2ef294e45a4cf7f14ae9063fa2ba18d20196dd5e
|
@ -1 +1 @@
|
||||
58d245d451489dbeea28505fea734a77300d3616
|
||||
80e0eec30e4bf790b0b02079dd2ad3124400ab89
|
@ -1 +1 @@
|
||||
4c6742c18b8578b8206b12de108cc6a6e225a4ec
|
||||
95e13d525c52bcd65bd86f6c66f306e4bfff7285
|
@ -1 +1 @@
|
||||
dd3b73736ed3fae602f5f62d52f593ca267d37e8
|
||||
d8e876168b44d4dc88a526a69165ef7e3b519740
|
@ -1 +1 @@
|
||||
06506c4a96a36fa5f17807f9c4d9047bc2fa413f
|
||||
45c7d8d59688f506db9d16ea9a1b854604d1ed6c
|
@ -1 +1 @@
|
||||
4ead486d5a9c37a72b0a4e192ba811c507c551f5
|
||||
f93e3dea1100aa00ec51aa2eb95a392c9be120e3
|
@ -1 +1 @@
|
||||
d28b6c3703a58531f125c423c27f8adbde573af9
|
||||
27fd453a8a108d8d59359580a637bd58c05565e9
|
@ -1 +1 @@
|
||||
3604c375f47486e552da59ed4a25284180b314e6
|
||||
2ef294e45a4cf7f14ae9063fa2ba18d20196dd5e
|
@ -1 +1 @@
|
||||
58d245d451489dbeea28505fea734a77300d3616
|
||||
80e0eec30e4bf790b0b02079dd2ad3124400ab89
|
@ -1 +1 @@
|
||||
4c6742c18b8578b8206b12de108cc6a6e225a4ec
|
||||
95e13d525c52bcd65bd86f6c66f306e4bfff7285
|
@ -1 +1 @@
|
||||
dd3b73736ed3fae602f5f62d52f593ca267d37e8
|
||||
d8e876168b44d4dc88a526a69165ef7e3b519740
|
@ -1 +1 @@
|
||||
06506c4a96a36fa5f17807f9c4d9047bc2fa413f
|
||||
45c7d8d59688f506db9d16ea9a1b854604d1ed6c
|
@ -1 +1 @@
|
||||
4ead486d5a9c37a72b0a4e192ba811c507c551f5
|
||||
f93e3dea1100aa00ec51aa2eb95a392c9be120e3
|
@ -121,7 +121,8 @@ typedef enum {
|
||||
/* Subtypes of MONO_WRAPPER_UNKNOWN */
|
||||
WRAPPER_SUBTYPE_GSHAREDVT_IN_SIG,
|
||||
WRAPPER_SUBTYPE_GSHAREDVT_OUT_SIG,
|
||||
WRAPPER_SUBTYPE_INTERP_IN
|
||||
WRAPPER_SUBTYPE_INTERP_IN,
|
||||
WRAPPER_SUBTYPE_INTERP_LMF
|
||||
} WrapperSubtype;
|
||||
|
||||
typedef struct {
|
||||
|
@ -286,6 +286,9 @@ DECL_OFFSET(CallContext, stack_size)
|
||||
DECL_OFFSET(CallContext, stack)
|
||||
#endif
|
||||
|
||||
DECL_OFFSET(MonoFtnDesc, arg)
|
||||
DECL_OFFSET(MonoFtnDesc, addr)
|
||||
|
||||
#endif //DISABLE_JIT_OFFSETS
|
||||
|
||||
#endif //USED_CROSS_COMPILER_OFFSETS
|
||||
|
@ -1 +1 @@
|
||||
0a964f9d46c0c1c78cb33cad45bd7be6f537dd4f
|
||||
dc6ccdd9e32db46edaceb26fd359a8890e0a4244
|
@ -1 +1 @@
|
||||
3897ff261c812f0c8b906c55bc59b56b9cd568db
|
||||
50774d9173c34a2729f12201de0a24fba264f540
|
@ -15,7 +15,7 @@
|
||||
#ifndef __MONO_EE_H__
|
||||
#define __MONO_EE_H__
|
||||
|
||||
#define MONO_EE_API_VERSION 0x1
|
||||
#define MONO_EE_API_VERSION 0x3
|
||||
|
||||
typedef struct _MonoInterpStackIter MonoInterpStackIter;
|
||||
|
||||
@ -27,6 +27,7 @@ struct _MonoInterpStackIter {
|
||||
typedef gpointer MonoInterpFrameHandle;
|
||||
|
||||
struct _MonoEECallbacks {
|
||||
void (*entry_from_trampoline) (gpointer ccontext, gpointer imethod);
|
||||
gpointer (*create_method_pointer) (MonoMethod *method, MonoError *error);
|
||||
MonoObject* (*runtime_invoke) (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error);
|
||||
void (*init_delegate) (MonoDelegate *del);
|
||||
@ -49,6 +50,7 @@ struct _MonoEECallbacks {
|
||||
void (*frame_arg_to_data) (MonoInterpFrameHandle frame, MonoMethodSignature *sig, int index, gpointer data);
|
||||
void (*data_to_frame_arg) (MonoInterpFrameHandle frame, MonoMethodSignature *sig, int index, gpointer data);
|
||||
gpointer (*frame_arg_to_storage) (MonoInterpFrameHandle frame, MonoMethodSignature *sig, int index);
|
||||
void (*frame_arg_set_storage) (MonoInterpFrameHandle frame, MonoMethodSignature *sig, int index, gpointer storage);
|
||||
MonoInterpFrameHandle (*frame_get_parent) (MonoInterpFrameHandle frame);
|
||||
void (*start_single_stepping) (void);
|
||||
void (*stop_single_stepping) (void);
|
||||
|
@ -458,7 +458,11 @@ mono_arch_unwind_frame (MonoDomain *domain, MonoJitTlsData *jit_tls,
|
||||
guint32 unwind_info_len;
|
||||
guint8 *unwind_info;
|
||||
|
||||
frame->type = FRAME_TYPE_MANAGED;
|
||||
|
||||
if (ji->is_trampoline)
|
||||
frame->type = FRAME_TYPE_TRAMPOLINE;
|
||||
else
|
||||
frame->type = FRAME_TYPE_MANAGED;
|
||||
|
||||
unwind_info = mono_jinfo_get_unwind_info (ji, &unwind_info_len);
|
||||
|
||||
|
@ -1 +1 @@
|
||||
cff128861e5b755a79ec07d1bce5fce43e427dad
|
||||
fc3b9aec0bea8849c001f3ef08f468f0f22b5485
|
@ -1 +1 @@
|
||||
91e1e78fbac343ad581d1761878b8f403ce84f1f
|
||||
293b7302145f5887e3be21fe4157f186f6c0bdc0
|
@ -1 +1 @@
|
||||
06e56484c1395a31e102aecbc301bfcb3f2ab7d2
|
||||
c4f30bb0b37fd257d5b466807cf1c977d6c0af40
|
@ -361,6 +361,8 @@ typedef struct MonoCompileArch {
|
||||
#define MONO_ARCH_HAVE_PATCH_CODE_NEW 1
|
||||
#define MONO_ARCH_HAVE_OP_GENERIC_CLASS_INIT 1
|
||||
|
||||
#define MONO_ARCH_HAVE_INTERP_ENTRY_TRAMPOLINE 1
|
||||
#define MONO_ARCH_HAVE_FTNPTR_ARG_TRAMPOLINE 1
|
||||
#define MONO_ARCH_HAVE_INTERP_PINVOKE_TRAMP 1
|
||||
|
||||
#if defined(TARGET_WATCHOS) || (defined(__linux__) && !defined(TARGET_ANDROID))
|
||||
|
@ -1 +1 @@
|
||||
a83e686bbdd60f7d511d5e1db1d4b014dafb1957
|
||||
c075fc0459f19d3168cab466518d1d12b02717cf
|
@ -134,6 +134,7 @@ typedef struct {
|
||||
#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1
|
||||
#define MONO_ARCH_HAVE_CONTEXT_SET_INT_REG 1
|
||||
#define MONO_ARCH_GSHARED_SUPPORTED 1
|
||||
#define MONO_ARCH_HAVE_INTERP_ENTRY_TRAMPOLINE 1
|
||||
#define MONO_ARCH_AOT_SUPPORTED 1
|
||||
#define MONO_ARCH_LLVM_SUPPORTED 1
|
||||
#define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1
|
||||
|
@ -593,7 +593,7 @@ mono_find_jit_info_ext (MonoDomain *domain, MonoJitTlsData *jit_tls,
|
||||
if (prev_ji && (ip > prev_ji->code_start && ((guint8*)ip < ((guint8*)prev_ji->code_start) + prev_ji->code_size)))
|
||||
ji = prev_ji;
|
||||
else
|
||||
ji = mini_jit_info_table_find (domain, (char *)ip, &target_domain);
|
||||
ji = mini_jit_info_table_find_ext (domain, (char *)ip, TRUE, &target_domain);
|
||||
|
||||
if (!target_domain)
|
||||
target_domain = domain;
|
||||
@ -1189,7 +1189,10 @@ mono_walk_stack_full (MonoJitStackWalk func, MonoContext *start_ctx, MonoDomain
|
||||
if (!res)
|
||||
return;
|
||||
|
||||
if ((unwind_options & MONO_UNWIND_LOOKUP_IL_OFFSET) && frame.ji && !frame.ji->is_trampoline) {
|
||||
if (frame.type == FRAME_TYPE_TRAMPOLINE)
|
||||
goto next;
|
||||
|
||||
if ((unwind_options & MONO_UNWIND_LOOKUP_IL_OFFSET) && frame.ji) {
|
||||
MonoDebugSourceLocation *source;
|
||||
|
||||
source = mono_debug_lookup_source_location (jinfo_get_method (frame.ji), frame.native_offset, domain);
|
||||
@ -1208,7 +1211,7 @@ mono_walk_stack_full (MonoJitStackWalk func, MonoContext *start_ctx, MonoDomain
|
||||
|
||||
frame.il_offset = il_offset;
|
||||
|
||||
if ((unwind_options & MONO_UNWIND_LOOKUP_ACTUAL_METHOD) && frame.ji && !frame.ji->is_trampoline) {
|
||||
if ((unwind_options & MONO_UNWIND_LOOKUP_ACTUAL_METHOD) && frame.ji) {
|
||||
frame.actual_method = get_method_from_stack_frame (frame.ji, get_generic_info_from_stack_frame (frame.ji, &ctx));
|
||||
} else {
|
||||
frame.actual_method = frame.method;
|
||||
@ -1220,6 +1223,7 @@ mono_walk_stack_full (MonoJitStackWalk func, MonoContext *start_ctx, MonoDomain
|
||||
if (func (&frame, &ctx, user_data))
|
||||
return;
|
||||
|
||||
next:
|
||||
if (get_reg_locations) {
|
||||
for (i = 0; i < MONO_MAX_IREGS; ++i)
|
||||
if (new_reg_locations [i])
|
||||
|
@ -1 +1 @@
|
||||
dff97edefd1576fbe199e3e8370bd0420aff5353
|
||||
72a502a095b99e5181288df5a5d9989a45882158
|
@ -1 +1 @@
|
||||
bf3d8b37974e590dfaa3878724c9ff2a8945448b
|
||||
30473fec52330026da763214017ba02e9686702a
|
@ -141,6 +141,7 @@ mono_create_static_rgctx_trampoline (MonoMethod *m, gpointer addr)
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
#else
|
||||
gpointer
|
||||
mono_create_static_rgctx_trampoline (MonoMethod *m, gpointer addr)
|
||||
@ -153,6 +154,25 @@ mono_create_static_rgctx_trampoline (MonoMethod *m, gpointer addr)
|
||||
}
|
||||
#endif
|
||||
|
||||
gpointer
|
||||
mono_create_ftnptr_arg_trampoline (gpointer arg, gpointer addr)
|
||||
{
|
||||
gpointer res;
|
||||
#ifdef MONO_ARCH_HAVE_FTNPTR_ARG_TRAMPOLINE
|
||||
if (mono_aot_only)
|
||||
g_error ("FIXME");
|
||||
else
|
||||
res = mono_arch_get_ftnptr_arg_trampoline (arg, addr);
|
||||
#else
|
||||
if (mono_aot_only)
|
||||
res = mono_aot_get_static_rgctx_trampoline (arg, addr);
|
||||
else
|
||||
res = mono_arch_get_static_rgctx_trampoline (arg, addr);
|
||||
#endif
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#define DEBUG_IMT(stmt) do { stmt; } while (0)
|
||||
#else
|
||||
|
@ -1 +1 @@
|
||||
042034c359ca78e6a61e590e4c9456e78cb4a5bb
|
||||
c9ef3d396433f9c5e079412d64ad4a673e61f988
|
@ -579,6 +579,36 @@ mono_arch_get_static_rgctx_trampoline (gpointer arg, gpointer addr)
|
||||
return start;
|
||||
}
|
||||
|
||||
/* Same as static rgctx trampoline, but clobbering ARMREG_IP, which is scratch */
|
||||
gpointer
|
||||
mono_arch_get_ftnptr_arg_trampoline (gpointer arg, gpointer addr)
|
||||
{
|
||||
guint8 *code, *start;
|
||||
GSList *unwind_ops;
|
||||
int buf_len = 16;
|
||||
MonoDomain *domain = mono_domain_get ();
|
||||
|
||||
start = code = mono_domain_code_reserve (domain, buf_len);
|
||||
|
||||
unwind_ops = mono_arch_get_cie_program ();
|
||||
|
||||
ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0);
|
||||
ARM_LDR_IMM (code, ARMREG_PC, ARMREG_PC, 0);
|
||||
*(guint32*)code = (guint32)arg;
|
||||
code += 4;
|
||||
*(guint32*)code = (guint32)addr;
|
||||
code += 4;
|
||||
|
||||
g_assert ((code - start) <= buf_len);
|
||||
|
||||
mono_arch_flush_icache (start, code - start);
|
||||
MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL));
|
||||
|
||||
mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), domain);
|
||||
|
||||
return start;
|
||||
}
|
||||
|
||||
gpointer
|
||||
mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info, gboolean aot)
|
||||
{
|
||||
@ -920,6 +950,79 @@ mono_arch_get_interp_to_native_trampoline (MonoTrampInfo **info)
|
||||
#endif /* DISABLE_INTERPRETER */
|
||||
}
|
||||
|
||||
gpointer
|
||||
mono_arch_get_native_to_interp_trampoline (MonoTrampInfo **info)
|
||||
{
|
||||
#ifndef DISABLE_INTERPRETER
|
||||
guint8 *start = NULL, *code;
|
||||
MonoJumpInfo *ji = NULL;
|
||||
GSList *unwind_ops = NULL;
|
||||
int buf_len, i;
|
||||
const int fp_reg = ARMREG_R7;
|
||||
int framesize;
|
||||
|
||||
buf_len = 512;
|
||||
start = code = (guint8 *) mono_global_codeman_reserve (buf_len);
|
||||
|
||||
unwind_ops = mono_arch_get_cie_program ();
|
||||
|
||||
/* iOS ABI */
|
||||
ARM_PUSH (code, (1 << fp_reg) | (1 << ARMREG_LR));
|
||||
mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 2 * sizeof (mgreg_t));
|
||||
mono_add_unwind_op_offset (unwind_ops, code, start, ARMREG_LR, -4);
|
||||
mono_add_unwind_op_offset (unwind_ops, code, start, fp_reg, -8);
|
||||
|
||||
ARM_MOV_REG_REG (code, fp_reg, ARMREG_SP);
|
||||
mono_add_unwind_op_def_cfa_reg (unwind_ops, code, start, fp_reg);
|
||||
|
||||
/* allocate the CallContext on the stack */
|
||||
framesize = ALIGN_TO (sizeof (CallContext), MONO_ARCH_FRAME_ALIGNMENT);
|
||||
ARM_SUB_REG_IMM8 (code, ARMREG_SP, ARMREG_SP, framesize);
|
||||
|
||||
/* save all general purpose registers into the CallContext */
|
||||
for (i = 0; i < PARAM_REGS; i++)
|
||||
ARM_STR_IMM (code, i, ARMREG_SP, MONO_STRUCT_OFFSET (CallContext, gregs) + i * sizeof (mgreg_t));
|
||||
|
||||
/* save all floating registers into the CallContext */
|
||||
for (i = 0; i < FP_PARAM_REGS; i++)
|
||||
ARM_FSTD (code, i * 2, ARMREG_SP, MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double));
|
||||
|
||||
/* set the stack pointer to the value at call site */
|
||||
ARM_ADD_REG_IMM8 (code, ARMREG_R0, fp_reg, 2 * sizeof (mgreg_t));
|
||||
ARM_STR_IMM (code, ARMREG_R0, ARMREG_SP, MONO_STRUCT_OFFSET (CallContext, stack));
|
||||
|
||||
/* call interp_entry with the ccontext and rmethod as arguments */
|
||||
ARM_MOV_REG_REG (code, ARMREG_R0, ARMREG_SP);
|
||||
ARM_LDR_IMM (code, ARMREG_R1, ARMREG_IP, MONO_STRUCT_OFFSET (MonoFtnDesc, arg));
|
||||
ARM_LDR_IMM (code, ARMREG_IP, ARMREG_IP, MONO_STRUCT_OFFSET (MonoFtnDesc, addr));
|
||||
ARM_BLX_REG (code, ARMREG_IP);
|
||||
|
||||
/* load the return values from the context */
|
||||
for (i = 0; i < PARAM_REGS; i++)
|
||||
ARM_LDR_IMM (code, i, ARMREG_SP, MONO_STRUCT_OFFSET (CallContext, gregs) + i * sizeof (mgreg_t));
|
||||
|
||||
for (i = 0; i < FP_PARAM_REGS; i++)
|
||||
ARM_FLDD (code, i * 2, ARMREG_SP, MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double));
|
||||
|
||||
/* reset stack and return */
|
||||
ARM_MOV_REG_REG (code, ARMREG_SP, fp_reg);
|
||||
ARM_POP (code, (1 << fp_reg) | (1 << ARMREG_PC));
|
||||
|
||||
g_assert (code - start < buf_len);
|
||||
|
||||
mono_arch_flush_icache (start, code - start);
|
||||
MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL));
|
||||
|
||||
if (info)
|
||||
*info = mono_tramp_info_create ("native_to_interp_trampoline", start, code - start, ji, unwind_ops);
|
||||
|
||||
return start;
|
||||
#else
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
#endif /* DISABLE_INTERPRETER */
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
guchar*
|
||||
@ -950,6 +1053,13 @@ mono_arch_get_static_rgctx_trampoline (gpointer arg, gpointer addr)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gpointer
|
||||
mono_arch_get_ftnptr_arg_trampoline (gpointer arg, gpointer addr)
|
||||
{
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gpointer
|
||||
mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info, gboolean aot)
|
||||
{
|
||||
@ -970,6 +1080,13 @@ mono_arch_get_interp_to_native_trampoline (MonoTrampInfo **info)
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gpointer
|
||||
mono_arch_get_native_to_interp_trampoline (MonoTrampInfo **info)
|
||||
{
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
}
|
||||
#endif /* DISABLE_JIT */
|
||||
|
||||
guint8*
|
||||
|
@ -721,6 +721,82 @@ mono_arch_get_interp_to_native_trampoline (MonoTrampInfo **info)
|
||||
#endif /* DISABLE_INTERPRETER */
|
||||
}
|
||||
|
||||
gpointer
|
||||
mono_arch_get_native_to_interp_trampoline (MonoTrampInfo **info)
|
||||
{
|
||||
#ifndef DISABLE_INTERPRETER
|
||||
guint8 *start = NULL, *code;
|
||||
MonoJumpInfo *ji = NULL;
|
||||
GSList *unwind_ops = NULL;
|
||||
int buf_len, i;
|
||||
int framesize, offset, ccontext_offset;
|
||||
|
||||
buf_len = 512;
|
||||
start = code = (guint8 *) mono_global_codeman_reserve (buf_len);
|
||||
|
||||
/* Allocate frame (FP + LR + CallContext) */
|
||||
offset = 2 * sizeof (mgreg_t);
|
||||
ccontext_offset = offset;
|
||||
offset += sizeof (CallContext);
|
||||
framesize = ALIGN_TO (offset, MONO_ARCH_FRAME_ALIGNMENT);
|
||||
|
||||
mono_add_unwind_op_def_cfa (unwind_ops, code, start, ARMREG_SP, 0);
|
||||
|
||||
arm_subx_imm (code, ARMREG_SP, ARMREG_SP, framesize);
|
||||
mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, framesize);
|
||||
|
||||
arm_stpx (code, ARMREG_FP, ARMREG_LR, ARMREG_SP, 0);
|
||||
mono_add_unwind_op_offset (unwind_ops, code, start, ARMREG_LR, -framesize + 8);
|
||||
mono_add_unwind_op_offset (unwind_ops, code, start, ARMREG_FP, -framesize);
|
||||
|
||||
arm_movspx (code, ARMREG_FP, ARMREG_SP);
|
||||
mono_add_unwind_op_def_cfa_reg (unwind_ops, code, start, ARMREG_FP);
|
||||
|
||||
/* save all general purpose registers into the CallContext */
|
||||
for (i = 0; i < PARAM_REGS + 1; i++)
|
||||
arm_strx (code, i, ARMREG_FP, ccontext_offset + MONO_STRUCT_OFFSET (CallContext, gregs) + i * sizeof (mgreg_t));
|
||||
|
||||
/* save all floating registers into the CallContext */
|
||||
for (i = 0; i < FP_PARAM_REGS; i++)
|
||||
arm_strfpx (code, i, ARMREG_FP, ccontext_offset + MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double));
|
||||
|
||||
/* set the stack pointer to the value at call site */
|
||||
arm_addx_imm (code, ARMREG_R0, ARMREG_FP, framesize);
|
||||
arm_strx (code, ARMREG_R0, ARMREG_FP, ccontext_offset + MONO_STRUCT_OFFSET (CallContext, stack));
|
||||
|
||||
/* call interp_entry with the ccontext and rmethod as arguments */
|
||||
arm_addx_imm (code, ARMREG_R0, ARMREG_FP, ccontext_offset);
|
||||
arm_ldrx (code, ARMREG_R1, MONO_ARCH_RGCTX_REG, MONO_STRUCT_OFFSET (MonoFtnDesc, arg));
|
||||
arm_ldrx (code, ARMREG_IP0, MONO_ARCH_RGCTX_REG, MONO_STRUCT_OFFSET (MonoFtnDesc, addr));
|
||||
arm_blrx (code, ARMREG_IP0);
|
||||
|
||||
/* load the return values from the context */
|
||||
for (i = 0; i < PARAM_REGS; i++)
|
||||
arm_ldrx (code, i, ARMREG_FP, ccontext_offset + MONO_STRUCT_OFFSET (CallContext, gregs) + i * sizeof (mgreg_t));
|
||||
|
||||
for (i = 0; i < FP_PARAM_REGS; i++)
|
||||
arm_ldrfpx (code, i, ARMREG_FP, ccontext_offset + MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double));
|
||||
|
||||
/* reset stack and return */
|
||||
arm_ldpx (code, ARMREG_FP, ARMREG_LR, ARMREG_SP, 0);
|
||||
arm_addx_imm (code, ARMREG_SP, ARMREG_SP, framesize);
|
||||
arm_retx (code, ARMREG_LR);
|
||||
|
||||
g_assert (code - start < buf_len);
|
||||
|
||||
mono_arch_flush_icache (start, code - start);
|
||||
MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL));
|
||||
|
||||
if (info)
|
||||
*info = mono_tramp_info_create ("native_to_interp_trampoline", start, code - start, ji, unwind_ops);
|
||||
|
||||
return start;
|
||||
#else
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
#endif /* DISABLE_INTERPRETER */
|
||||
}
|
||||
|
||||
#else /* DISABLE_JIT */
|
||||
|
||||
guchar*
|
||||
@ -778,4 +854,12 @@ mono_arch_get_interp_to_native_trampoline (MonoTrampInfo **info)
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gpointer
|
||||
mono_arch_get_native_to_interp_trampoline (MonoTrampInfo **info)
|
||||
{
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* !DISABLE_JIT */
|
||||
|
@ -1 +1 @@
|
||||
#define FULL_VERSION "explicit/9150941"
|
||||
#define FULL_VERSION "explicit/a022829"
|
||||
|
BIN
po/mcs/de.gmo
BIN
po/mcs/de.gmo
Binary file not shown.
@ -1 +1 @@
|
||||
900d8c124b72c4dd30803a8afb8e9a2a48614bd9
|
||||
568b60d27dfeed69de4e54005d0ab9bdb52630ee
|
BIN
po/mcs/es.gmo
BIN
po/mcs/es.gmo
Binary file not shown.
@ -1 +1 @@
|
||||
f7c2bb79bc946f6d4bd686ff44fe7ffe32e8dbf0
|
||||
7754ee7e80a58b21e676fdc99f60ff5d0fcbd1c8
|
BIN
po/mcs/ja.gmo
BIN
po/mcs/ja.gmo
Binary file not shown.
@ -1 +1 @@
|
||||
3245f7d49da55416c78d07f12d0b2ea70ced3b23
|
||||
76a6261ab5625732b3876fd8a766a0108a561f4d
|
@ -6,9 +6,9 @@
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mono 5.12.0.222\n"
|
||||
"Project-Id-Version: mono 5.12.0.223\n"
|
||||
"Report-Msgid-Bugs-To: http://www.mono-project.com/Bugs\n"
|
||||
"POT-Creation-Date: 2018-04-25 08:14+0000\n"
|
||||
"POT-Creation-Date: 2018-04-27 08:33+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
BIN
po/mcs/pt_BR.gmo
BIN
po/mcs/pt_BR.gmo
Binary file not shown.
@ -1 +1 @@
|
||||
58e85a4d934ff61d18241e3ecdebf3df6f88e9ba
|
||||
828a9fb8b9ca87d2b0bfa5228bad5c307559595d
|
Loading…
x
Reference in New Issue
Block a user