-/* src/vm/jit/x86_64/md-trap.h - i386 hardware traps
+/* src/vm/jit/i386/md-trap.h - i386 hardware traps
Copyright (C) 2008
CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
/* Don't use 8 (could be a normal load offset). */
TRAP_COMPILER = 9,
+ TRAP_COUNTDOWN = 10,
TRAP_END
};
+
+/**
+* Macro to fixup a compiler stub.
+* PV : The PV from the compiler stub is equal to the XPC.
+* RA : We use a framesize of zero here because the call pushed
+* the return addres onto the stack.
+* SP : Skip the RA on the stack.
+* XPC: The XPC is the RA minus 2, because the RA points to the
+* instruction after the call.
+*/
+#define MD_TRAP_COMPILER_FIXUP(xpc, ra, sp, pv) \
+ do { \
+ (pv) = (xpc); \
+ (ra) = md_stacktrace_get_returnaddress((sp), 0); \
+ (sp) = (void*) (((uintptr_t) (sp)) + 1 * SIZEOF_VOID_P); \
+ (xpc) = (void*) (((uintptr_t) (ra)) - 2); \
+ } while(0)
+
+
#endif /* _MD_TRAP_H */