Signed-off-by: Vegard Nossum <vegard.nos...@gmail.com>
---
 include/vm/gc.h |    1 +
 vm/gc.c         |    4 ++++
 vm/signal.c     |   21 +++++++++++++++++----
 3 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/include/vm/gc.h b/include/vm/gc.h
index 6c39996..82766ca 100644
--- a/include/vm/gc.h
+++ b/include/vm/gc.h
@@ -4,5 +4,6 @@
 extern void *gc_safepoint_page;
 
 void gc_init(void);
+void gc_safepoint(void);
 
 #endif
diff --git a/vm/gc.c b/vm/gc.c
index a8bf589..c1e6f42 100644
--- a/vm/gc.c
+++ b/vm/gc.c
@@ -10,3 +10,7 @@ void gc_init(void)
        if (!gc_safepoint_page)
                die("Couldn't allocate GC safepoint guard page");
 }
+
+void gc_safepoint(void)
+{
+}
diff --git a/vm/signal.c b/vm/signal.c
index 3e59480..094fec6 100644
--- a/vm/signal.c
+++ b/vm/signal.c
@@ -26,14 +26,15 @@
 
 #include "jit/exception.h"
 
-#include "vm/preload.h"
 #include "vm/backtrace.h"
-#include "vm/signal.h"
-#include "vm/stack-trace.h"
 #include "vm/call.h"
 #include "vm/class.h"
-#include "vm/object.h"
+#include "vm/gc.h"
 #include "vm/jni.h"
+#include "vm/object.h"
+#include "vm/preload.h"
+#include "vm/signal.h"
+#include "vm/stack-trace.h"
 
 #include "arch/signal.h"
 
@@ -73,6 +74,12 @@ static unsigned long rethrow_bh(unsigned long src_addr)
        return throw_from_signal_bh(src_addr);
 }
 
+static unsigned long gc_safepoint_bh(unsigned long addr)
+{
+       gc_safepoint();
+       return addr;
+}
+
 static void sigfpe_handler(int sig, siginfo_t *si, void *ctx)
 {
        if (signal_from_native(ctx))
@@ -109,6 +116,12 @@ static void sigsegv_handler(int sig, siginfo_t *si, void 
*ctx)
                goto exit;
        }
 
+       /* Garbage collection safepoint */
+       if (si->si_addr == gc_safepoint_page) {
+               install_signal_bh(ctx, gc_safepoint_bh);
+               return;
+       }
+
        /* Check if exception was triggered by exception guard */
        if (si->si_addr == exceptions_guard_page ||
            si->si_addr == trampoline_exceptions_guard_page) {
-- 
1.6.0.6


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to