#define MONO_ARCH_HAVE_SETUP_RESUME_FROM_SIGNAL_HANDLER_CTX 1
#define MONO_ARCH_GSHARED_SUPPORTED 1
-/* XXX - a mystery, but it works */
-#define MONO_GET_CONTEXT \
- void *ctx = (void *)(((int)context)+24);
-
/* set the next to 0 once inssel-mips.brg is updated */
#define MIPS_PASS_STRUCTS_BY_VALUE 1
} MonoMipsStackFrame;
#define MONO_INIT_CONTEXT_FROM_FUNC(ctx,func) do { \
- guint32 sp, ra; \
- guint32 *code = (guint32 *)(void *)func; \
- short imm; \
- memset ((ctx), 0, sizeof (*(ctx))); \
- __asm__ volatile("addu %0,$0,$29" : "=r" (sp)); \
- /* Look for adjustment of sp */ \
- while ((*code & 0xffff0000) != 0x27bd0000) \
- ++code; \
- imm = (short) (*code & 0xffff); \
- MONO_CONTEXT_SET_BP ((ctx), sp + (-imm)); \
- ra = *(guint32 *)(sp + (-imm) + MIPS_RET_ADDR_OFFSET); \
- MONO_CONTEXT_SET_IP ((ctx),ra); \
- MONO_CONTEXT_SET_SP ((ctx), MONO_CONTEXT_GET_BP (ctx)); \
+ MONO_CONTEXT_SET_BP ((ctx), __builtin_frame_address (0)); \
+ MONO_CONTEXT_SET_SP ((ctx), __builtin_frame_address (0)); \
+ MONO_CONTEXT_SET_IP ((ctx), (func)); \
} while (0)
#define MONO_ARCH_INIT_TOP_LMF_ENTRY(lmf)