#define MONO_CONTEXT_GET_BP(ctx) ((gpointer)((ctx)->fp))
#define MONO_CONTEXT_GET_SP(ctx) ((gpointer)((ctx)->sp))
+#define MONO_INIT_CONTEXT_FROM_FUNC(ctx,start_func) do { \
+ mono_arch_flush_register_windows (); \
+ MONO_CONTEXT_SET_IP ((ctx), (start_func)); \
+ MONO_CONTEXT_SET_BP ((ctx), __builtin_frame_address (0)); \
+ } while (0)
+
#define MONO_ARCH_USE_SIGACTION 1
-//#define MONO_ARCH_SIGSEGV_ON_ALTSTACK
+#ifdef HAVE_WORKING_SIGALTSTACK
+#define MONO_ARCH_SIGSEGV_ON_ALTSTACK
+#endif
#define MONO_ARCH_EMULATE_FCONV_TO_I8 1
#define MONO_ARCH_EMULATE_LCONV_TO_R8 1
#define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
#define MONO_ARCH_EMULATE_FREM 1
#define MONO_ARCH_NEED_DIV_CHECK 1
+#define MONO_ARCH_HAVE_THROW_CORLIB_EXCEPTION 1
#ifdef SPARCV9
#define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS
asm("sub %i0, 1, %i0");
asm("tst %i0");
asm("bne retAddr_Start");
+#if SPARCV9
+ asm("ldx [%l0+2159], %l0");
+ asm("retAddr_End:");
+ asm("ldx [%l0+2167], %i0");
+#else
asm("ld [%l0+56], %l0");
asm("retAddr_End:");
asm("ld [%l0+60], %i0");
+#endif
}
static void * __builtin_frame_address(int depth)
asm("sub %i0, 1, %i0");
asm("tst %i0");
asm("bne frameAddr_Start");
+#if SPARCV9
+ asm("ldx [%l0+2159], %l0");
+ asm("frameAddr_End:");
+ asm("ldx [%l0+2159], %i0");
+#else
asm("ld [%l0+56], %l0");
asm("frameAddr_End:");
asm("ld [%l0+56], %i0");
+#endif
}
#endif