MonoJitInfo *
mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
MonoJitInfo *res, MonoJitInfo *prev_ji, MonoContext *ctx,
- MonoContext *new_ctx, char **trace, MonoLMF **lmf,
- int *native_offset, gboolean *managed)
+ MonoContext *new_ctx, MonoLMF **lmf, gboolean *managed)
{
MonoJitInfo *ji;
gpointer ip = MONO_CONTEXT_GET_IP (ctx);
((guint8 *) ip <= ((guint8 *) prev_ji->code_start) + prev_ji->code_size)))
ji = prev_ji;
else
- ji = mono_jit_info_table_find (domain, ip);
-
- if (trace)
- *trace = NULL;
-
- if (native_offset)
- *native_offset = -1;
+ ji = mini_jit_info_table_find (domain, ip, NULL);
if (managed)
*managed = FALSE;
if (ji != NULL) {
- char *source_location, *tmpaddr, *fname;
- gint32 address, iloffset;
+ gint32 address;
*new_ctx = *ctx;
address = (char *)ip - (char *)ji->code_start;
- if (native_offset)
- *native_offset = address;
-
if (managed)
if (!ji->method->wrapper_type)
*managed = TRUE;
- if (trace) {
- source_location = mono_debug_source_location_from_address (ji->method, address, NULL, domain);
- iloffset = mono_debug_il_offset_from_address (ji->method, address, domain);
-
- if (iloffset < 0)
- tmpaddr = g_strdup_printf ("<0x%08x>", address);
- else
- tmpaddr = g_strdup_printf ("[0x%08x]", iloffset);
-
- fname = mono_method_full_name (ji->method, TRUE);
-
- if (source_location)
- *trace = g_strdup_printf ("in %s (at %s) %s", tmpaddr, source_location, fname);
- else
- *trace = g_strdup_printf ("in %s %s", tmpaddr, fname);
-
- g_free (fname);
- g_free (source_location);
- g_free (tmpaddr);
- }
sframe = (MonoS390StackFrame *) MONO_CONTEXT_GET_SP (ctx);
MONO_CONTEXT_SET_BP (new_ctx, sframe->prev);
sframe = (MonoS390StackFrame *) sframe->prev;
if (!(*lmf)->method)
return (gpointer)-1;
- if (trace)
- *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))) {
+ if ((ji = mini_jit_info_table_find (domain, (gpointer)(*lmf)->eip, NULL))) {
} else {
- memset (res, 0, sizeof (MonoJitInfo));
+ memset (res, 0, MONO_SIZEOF_JIT_INFO);
res->method = (*lmf)->method;
}
case 0x5d : /* Divide */
regNo = (code[2] & 0xf0 >> 8);
offset = *((guint16 *) code+2) & 0x0fff;
- operand = ctx->uc_mcontext.gregs[regNo] + offset;
+ operand = (guint32*)(ctx->uc_mcontext.gregs[regNo] + offset);
if (*operand == 0)
arithExc = FALSE;
break;
if (code[1] == 0x97) {
regNo = (code[2] & 0xf0 >> 8);
offset = *((guint32 *) code+1) & 0x000fffff;
- operand = ctx->uc_mcontext.gregs[regNo] + offset;
+ operand = (guint32*)(ctx->uc_mcontext.gregs[regNo] + offset);
if (*operand == 0)
arithExc = FALSE;
}
default:
arithExc = TRUE;
}
- ctx->uc_mcontext.psw.addr = code;
+ ctx->uc_mcontext.psw.addr = (guint32)code;
return (arithExc);
}