#include <mono/metadata/debug-helpers.h>
#include <mono/metadata/exception.h>
#include <mono/metadata/mono-debug.h>
-#include <mono/metadata/gc-internal.h>
+#include <mono/metadata/gc-internals.h>
#include <mono/metadata/tokentype.h>
#include "mini.h"
if (mono_object_isinst (exc, mono_defaults.exception_class)) {
MonoException *mono_ex = (MonoException*)exc;
- if (!rethrow)
+ if (!rethrow) {
mono_ex->stack_trace = NULL;
+ mono_ex->trace_ips = NULL;
+ }
}
- mono_handle_exception (&ctx, exc, ip, FALSE);
+ mono_handle_exception (&ctx, exc);
restore_context (&ctx);
g_assert_not_reached ();
return start;
}
-/* mono_arch_find_jit_info:
+/* mono_arch_unwind_frame:
*
* This function is used to gather information from @ctx. It return the
* MonoJitInfo of the corresponding function, unwinds one stack frame and
* start of the function or -1 if that info is not available.
*/
gboolean
-mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
+mono_arch_unwind_frame (MonoDomain *domain, MonoJitTlsData *jit_tls,
MonoJitInfo *ji, MonoContext *ctx,
MonoContext *new_ctx, MonoLMF **lmf,
mgreg_t **save_locations,
*new_ctx = *ctx;
if (ji != NULL) {
- frame->type = FRAME_TYPE_MANAGED;
-
- if (*lmf && (MONO_CONTEXT_GET_BP (ctx) >= (gpointer)(*lmf)->ebp)) {
- /* remove any unused lmf */
- *lmf = (*lmf)->previous_lmf;
- }
+ if (ji->is_trampoline)
+ frame->type = FRAME_TYPE_TRAMPOLINE;
+ else
+ frame->type = FRAME_TYPE_MANAGED;
/* Restore ip and sp from the saved register window */
window = MONO_SPARC_WINDOW_ADDR (ctx->sp);
#ifdef __linux__
gboolean
-mono_arch_handle_exception (void *sigctx, gpointer obj, gboolean test_only)
+mono_arch_handle_exception (void *sigctx, gpointer obj)
{
MonoContext mctx;
struct sigcontext *sc = sigctx;
window = (gpointer*)(((guint8*)mctx.sp) + MONO_SPARC_STACK_BIAS);
mctx.fp = window [sparc_fp - 16];
- mono_handle_exception (&mctx, obj, mctx.ip, test_only);
+ mono_handle_exception (&mctx, obj);
#ifdef SPARCV9
sc->sigc_regs.tpc = (unsigned long) mctx.ip;
#else /* !__linux__ */
gboolean
-mono_arch_handle_exception (void *sigctx, gpointer obj, gboolean test_only)
+mono_arch_handle_exception (void *sigctx, gpointer obj)
{
MonoContext mctx;
ucontext_t *ctx = (ucontext_t*)sigctx;
window = (gpointer*)(((guint8*)mctx.sp) + MONO_SPARC_STACK_BIAS);
mctx.fp = window [sparc_fp - 16];
- mono_handle_exception (&mctx, obj, mctx.ip, test_only);
+ mono_handle_exception (&mctx, obj);
/* We can't use restore_context to return from a signal handler */
ctx->uc_mcontext.gregs [REG_PC] = mctx.ip;