* src/vm/jit/i386/linux/md-os.c: Simplified signal handlers.
[cacao.git] / src / vm / jit / i386 / md-trap.h
index 0c39650967eae2db07d0c9449b5e361b9cdae55f..6cf2bbf20b99acfa7da6d9c3c28d72758f7d93e3 100644 (file)
@@ -1,4 +1,4 @@
-/* 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
@@ -58,9 +58,29 @@ enum {
        /* 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 */