return mono_gc_get_allocated_bytes_for_current_thread ();
}
+#ifdef ENABLE_NETCORE
guint64
ves_icall_System_GC_GetTotalAllocatedBytes (MonoBoolean precise, MonoError* error)
{
return mono_gc_get_total_allocated_bytes (precise);
}
+#endif
void
ves_icall_System_GC_RecordPressure (gint64 value)
#include <mono/metadata/mono-hash-internals.h>
#include <mono/metadata/mono-mlist.h>
#include <mono/metadata/threadpool.h>
+#include <mono/metadata/icall-decl.h>
#include <mono/utils/atomic.h>
#include <mono/utils/mono-threads.h>
#include <mono/utils/mono-lazy-init.h>
MONO_EE_CALLBACK (MonoInterpFrameHandle, frame_get_parent, (MonoInterpFrameHandle frame)) \
MONO_EE_CALLBACK (void, start_single_stepping, (void)) \
MONO_EE_CALLBACK (void, stop_single_stepping, (void)) \
+ MONO_EE_CALLBACK (void, free_context, (gpointer)) \
MONO_EE_CALLBACK (void, cleanup, (void)) \
typedef struct _MonoEECallbacks {
g_assert_not_reached ();
}
+static void
+stub_free_context (gpointer context)
+{
+ g_assert_not_reached ();
+}
+
#undef MONO_EE_CALLBACK
#define MONO_EE_CALLBACK(ret, name, sig) stub_ ## name,
}
static void
+interp_free_context (gpointer ctx)
+{
+ ThreadContext *context = (ThreadContext*)ctx;
+
+ g_free (context);
+}
+
+static void
mono_interp_error_cleanup (MonoError* error)
{
mono_error_cleanup (error); /* FIXME: don't swallow the error */
g_printerr ("Line=%d IP=0x%04lx, Aborted execution\n", line, ip-(const unsigned short *) header->code);
g_printerr ("0x%04x %02x\n", ip-(const unsigned short *) header->code, *ip);
mono_metadata_free_mh (header);
+ g_assert_not_reached ();
}
#define ves_abort() \
MINT_IN_BREAK;
}
- MINT_IN_CASE(MINT_TRACE_EXIT) {
+ MINT_IN_CASE(MINT_TRACE_EXIT)
+ MINT_IN_CASE(MINT_TRACE_EXIT_VOID) {
// Set retval
int const i32 = READ32 (ip + 1);
- --sp;
- if (i32 == -1)
- ;
- else if (i32)
+ if (i32 == -1) {
+ } else if (i32) {
+ sp--;
memcpy(frame->retval->data.p, sp->data.p, i32);
- else
+ } else {
+ sp--;
*frame->retval = *sp;
+ }
MonoProfilerCallContext *prof_ctx = g_alloca (sizeof (MonoProfilerCallContext));
prof_ctx->interp_frame = frame;
*/
OPDEF(MINT_PROF_ENTER, "prof_enter", 1, Pop0, Push0, MintOpNoArgs)
OPDEF(MINT_TRACE_ENTER, "trace_enter", 1, Pop0, Push0, MintOpNoArgs)
-OPDEF(MINT_TRACE_EXIT, "trace_exit", 3, Pop0, Push0, MintOpInt)
+OPDEF(MINT_TRACE_EXIT, "trace_exit", 3, Pop1, Push0, MintOpInt)
+OPDEF(MINT_TRACE_EXIT_VOID, "trace_exit_void", 3, Pop0, Push0, MintOpInt)
OPDEF(MINT_INTRINS_ENUM_HASFLAG, "intrins_enum_hasflag", 2, Pop2, Push1, MintOpClassToken)
OPDEF(MINT_INTRINS_GET_HASHCODE, "intrins_get_hashcode", 1, Pop1, Push1, MintOpNoArgs)
if (mono_jit_trace_calls != NULL && mono_trace_eval (method)) {
/* This does the return as well */
- interp_add_ins (td, MINT_TRACE_EXIT);
- if (ult->type == MONO_TYPE_VOID)
+ if (ult->type == MONO_TYPE_VOID) {
+ interp_add_ins (td, MINT_TRACE_EXIT_VOID);
vt_size = -1;
+ } else {
+ interp_add_ins (td, MINT_TRACE_EXIT);
+ }
WRITE32_INS (td->last_ins, 0, &vt_size);
++td->ip;
} else {
pid_t pid;
int status;
pid_t crashed_pid = getpid ();
- gchar *output = NULL;
- MonoStackHash hashes;
#ifndef DISABLE_CRASH_REPORTING
+ gchar *output = NULL;
+ MonoStackHash hashes;
MonoStateMem merp_mem;
memset (&merp_mem, 0, sizeof (merp_mem));
return;
mono_free_altstack (jit_tls);
+ if (jit_tls->interp_context)
+ mini_get_interp_callbacks ()->free_context (jit_tls->interp_context);
+
g_free (jit_tls->first_lmf);
- g_free (jit_tls->interp_context);
g_free (jit_tls);
}