提交 c1c22ca8 编写于 作者: Z Zoltan Varga

2005-01-28 Zoltan Varga <vargaz@freemail.hu>

	* mini.c mini-exceptions.c aot.c exceptions-*.c: Update after 
	MonoJitInfo changes.

svn path=/trunk/mono/; revision=39710
上级 9e4a50e5
2005-01-28 Zoltan Varga <vargaz@freemail.hu>
* mini.c mini-exceptions.c aot.c exceptions-*.c: Update after
MonoJitInfo changes.
2005-01-27 Zoltan Varga <vargaz@freemail.hu>
* mini-exceptions.c (mono_handle_exception): Compute the stack trace
......
......@@ -574,15 +574,8 @@ mono_aot_get_method_inner (MonoDomain *domain, MonoMethod *method)
/* This method was already loaded in another appdomain */
/* Duplicate jinfo */
jinfo = mono_mempool_alloc0 (domain->mp, sizeof (MonoJitInfo));
memcpy (jinfo, minfo->info, sizeof (MonoJitInfo));
if (jinfo->clauses) {
MonoMethodHeader *header = mono_method_get_header (method);
jinfo->clauses =
mono_mempool_alloc0 (domain->mp, sizeof (MonoJitExceptionInfo) * header->num_clauses);
memcpy (jinfo->clauses, minfo->info->clauses, sizeof (MonoJitExceptionInfo) * header->num_clauses);
}
jinfo = mono_mempool_alloc0 (domain->mp, sizeof (MonoJitInfo) + (minfo->info->num_clauses * sizeof (MonoJitExceptionInfo)));
memcpy (jinfo, minfo->info, sizeof (MonoJitInfo) + (minfo->info->num_clauses * sizeof (MonoJitExceptionInfo)));
return jinfo;
}
......@@ -627,7 +620,6 @@ mono_aot_load_method (MonoDomain *domain, MonoAotModule *aot_module, MonoMethod
minfo = g_new0 (MonoAotMethod, 1);
minfo->domain = domain;
jinfo = mono_mempool_alloc0 (domain->mp, sizeof (MonoJitInfo));
p = (char*)info;
code_len = decode_value (p, &p);
......@@ -647,8 +639,8 @@ mono_aot_load_method (MonoDomain *domain, MonoAotModule *aot_module, MonoMethod
has_clauses = decode_value (p, &p);
if (has_clauses) {
MonoMethodHeader *header = mono_method_get_header (method);
jinfo->clauses =
mono_mempool_alloc0 (domain->mp, sizeof (MonoJitExceptionInfo) * header->num_clauses);
jinfo =
mono_mempool_alloc0 (domain->mp, sizeof (MonoJitInfo) + (sizeof (MonoJitExceptionInfo) * header->num_clauses));
jinfo->num_clauses = header->num_clauses;
for (i = 0; i < header->num_clauses; ++i) {
......@@ -668,6 +660,8 @@ mono_aot_load_method (MonoDomain *domain, MonoAotModule *aot_module, MonoMethod
ei->handler_start = code + decode_value (p, &p);
}
}
else
jinfo = mono_mempool_alloc0 (domain->mp, sizeof (MonoJitInfo));
if (aot_module->opts & MONO_OPT_SHARED)
used_strings = decode_value (p, &p);
......
......@@ -569,8 +569,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
new_ctx->SC_ESP += stack_to_pop;
}
*res = *ji;
return res;
return ji;
} else if (*lmf) {
*new_ctx = *ctx;
......@@ -579,7 +578,6 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
return (gpointer)-1;
if ((ji = mono_jit_info_table_find (domain, (gpointer)(*lmf)->rip))) {
*res = *ji;
} else {
memset (res, 0, sizeof (MonoJitInfo));
res->method = (*lmf)->method;
......@@ -600,8 +598,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
*lmf = (*lmf)->previous_lmf;
return res;
return ji ? ji : res;
}
return NULL;
......
......@@ -568,8 +568,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
/* we substract 4, so that the IP points into the call instruction */
MONO_CONTEXT_SET_IP (new_ctx, sframe->lr - 4);
*res = *ji;
return res;
return ji;
} else if (*lmf) {
*new_ctx = *ctx;
......@@ -585,7 +584,6 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
}
if ((ji = mono_jit_info_table_find (domain, (gpointer)(*lmf)->eip))) {
*res = *ji;
} else {
memset (res, 0, sizeof (MonoJitInfo));
res->method = (*lmf)->method;
......@@ -600,8 +598,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
memcpy (&new_ctx->fregs, (*lmf)->fregs, sizeof (double) * MONO_SAVED_FREGS);
*lmf = (*lmf)->previous_lmf;
return res;
return ji ? ji : res;
}
return NULL;
......
......@@ -504,8 +504,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
sframe = (MonoS390StackFrame *) sframe->prev;
MONO_CONTEXT_SET_IP (new_ctx, sframe->return_address);
memcpy (&new_ctx->uc_mcontext.gregs[6], sframe->regs, (8*sizeof(gint32)));
*res = *ji;
return res;
return ji;
} else if (*lmf) {
*new_ctx = *ctx;
......@@ -517,7 +516,6 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
*trace = g_strdup_printf ("in (unmanaged) %s", mono_method_full_name ((*lmf)->method, TRUE));
if ((ji = mono_jit_info_table_find (domain, (gpointer)(*lmf)->eip))) {
*res = *ji;
} else {
memset (res, 0, sizeof (MonoJitInfo));
res->method = (*lmf)->method;
......@@ -530,8 +528,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
MONO_CONTEXT_SET_IP (new_ctx, (*lmf)->eip);
*lmf = (*lmf)->previous_lmf;
return res;
return ji ? ji : res;
}
return NULL;
......
......@@ -718,13 +718,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
sframe = (MonoS390StackFrame *) sframe->prev;
MONO_CONTEXT_SET_IP (new_ctx, sframe->return_address);
memcpy (&new_ctx->uc_mcontext.gregs[6], sframe->regs, (8*sizeof(gint32)));
*res = *ji;
return res;
#ifdef MONO_USE_EXC_TABLES
} else if ((ji = s390_unwind_native_frame (domain, jit_tls, ctx, new_ctx, *lmf, trace))) {
*res = *ji;
return res;
#endif
return ji;
} else if (*lmf) {
*new_ctx = *ctx;
......@@ -736,7 +730,6 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
*trace = g_strdup_printf ("in (unmanaged) %s", mono_method_full_name ((*lmf)->method, TRUE));
if ((ji = mono_jit_info_table_find (domain, (gpointer)(*lmf)->eip))) {
*res = *ji;
} else {
memset (res, 0, sizeof (MonoJitInfo));
res->method = (*lmf)->method;
......@@ -753,8 +746,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
MONO_CONTEXT_SET_IP (new_ctx, (*lmf)->eip);
*lmf = (*lmf)->previous_lmf;
return res;
return ji ? ji : res;
}
return NULL;
......
......@@ -392,8 +392,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
new_ctx->sp = (gpointer*)(window [sparc_i6 - 16]);
new_ctx->fp = (gpointer*)(MONO_SPARC_WINDOW_ADDR (new_ctx->sp) [sparc_i6 - 16]);
*res = *ji;
return res;
return ji;
}
else {
if (!(*lmf))
......@@ -405,7 +404,6 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
return (gpointer)-1;
if ((ji = mono_jit_info_table_find (domain, (gpointer)(*lmf)->ip))) {
*res = *ji;
} else {
memset (res, 0, sizeof (MonoJitInfo));
res->method = (*lmf)->method;
......@@ -417,7 +415,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
*lmf = (*lmf)->previous_lmf;
return res;
return ji ? ji : res;
}
}
......
......@@ -512,13 +512,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
new_ctx->SC_ESP += stack_to_pop;
}
*res = *ji;
return res;
#ifdef MONO_USE_EXC_TABLES
} else if ((ji = x86_unwind_native_frame (domain, jit_tls, ctx, new_ctx, *lmf, trace))) {
*res = *ji;
return res;
#endif
return ji;
} else if (*lmf) {
*new_ctx = *ctx;
......@@ -527,7 +521,6 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
return (gpointer)-1;
if ((ji = mono_jit_info_table_find (domain, (gpointer)(*lmf)->eip))) {
*res = *ji;
} else {
memset (res, 0, sizeof (MonoJitInfo));
res->method = (*lmf)->method;
......@@ -544,8 +537,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
*lmf = (*lmf)->previous_lmf;
return res;
return ji ? ji : res;
}
return NULL;
......
......@@ -636,8 +636,6 @@ mono_handle_exception (MonoContext *ctx, gpointer obj, gpointer original_ip, gbo
if ((free_stack > (64 * 1024)) && ji->num_clauses) {
int i;
g_assert (ji->clauses);
for (i = 0; i < ji->num_clauses; i++) {
MonoJitExceptionInfo *ei = &ji->clauses [i];
gboolean filtered = FALSE;
......
......@@ -8950,9 +8950,9 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, gbool
}
if (cfg->method->dynamic)
jinfo = g_new0 (MonoJitInfo, 1);
jinfo = g_malloc0 (sizeof (MonoJitInfo) + (header->num_clauses * sizeof (MonoJitExceptionInfo)));
else
jinfo = mono_mempool_alloc0 (cfg->domain->mp, sizeof (MonoJitInfo));
jinfo = mono_mempool_alloc0 (cfg->domain->mp, sizeof (MonoJitInfo) + (header->num_clauses * sizeof (MonoJitExceptionInfo)));
jinfo->method = method;
jinfo->code_start = cfg->native_code;
......@@ -8965,8 +8965,6 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, gbool
int i;
jinfo->num_clauses = header->num_clauses;
jinfo->clauses = mono_mempool_alloc0 (cfg->domain->mp,
sizeof (MonoJitExceptionInfo) * header->num_clauses);
for (i = 0; i < header->num_clauses; i++) {
MonoExceptionClause *ec = &header->clauses [i];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册