This patch adds a parameter "bool hidden" to the guard-page constructor,
which signals whether the page should be initially hidden or accessible.

Needed for GC, which wants an initially unhidden page.

Signed-off-by: Vegard Nossum <vegard.nos...@gmail.com>
---
 include/lib/guard-page.h |    4 +++-
 jit/exception.c          |    4 ++--
 lib/guard-page.c         |   11 ++++++-----
 vm/gc.c                  |    2 +-
 vm/jni-interface.c       |    2 +-
 vm/static.c              |    2 +-
 6 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/include/lib/guard-page.h b/include/lib/guard-page.h
index 0d20254..c227446 100644
--- a/include/lib/guard-page.h
+++ b/include/lib/guard-page.h
@@ -1,7 +1,9 @@
 #ifndef _LIB_GUARD_PAGE_
 #define _LIB_GUARD_PAGE_
 
-void *alloc_guard_page(void);
+#include <stdbool.h>
+
+void *alloc_guard_page(bool hidden);
 void *alloc_offset_guard(unsigned long valid_size, unsigned long 
overflow_size);
 int hide_guard_page(void *page_ptr);
 int unhide_guard_page(void *page_ptr);
diff --git a/jit/exception.c b/jit/exception.c
index 6fa7055..57de5e2 100644
--- a/jit/exception.c
+++ b/jit/exception.c
@@ -58,8 +58,8 @@ void *trampoline_exceptions_guard_page;
 
 void init_exceptions(void)
 {
-       exceptions_guard_page = alloc_guard_page();
-       trampoline_exceptions_guard_page = alloc_guard_page();
+       exceptions_guard_page = alloc_guard_page(true);
+       trampoline_exceptions_guard_page = alloc_guard_page(true);
 
        if (!exceptions_guard_page || !trampoline_exceptions_guard_page)
                die("failed to allocate exceptions guard page");
diff --git a/lib/guard-page.c b/lib/guard-page.c
index 40764e6..f1fdfea 100644
--- a/lib/guard-page.c
+++ b/lib/guard-page.c
@@ -66,15 +66,16 @@ void *alloc_offset_guard(unsigned long valid_size, unsigned 
long overflow_size)
        return result + offset;
 }
 
-void *alloc_guard_page(void)
+void *alloc_guard_page(bool hidden)
 {
        void *p = alloc_pages(1);
-
-       if (p == NULL)
+       if (!p)
                return NULL;
 
-       if (hide_guard_page(p))
-               return NULL;
+       if (hidden) {
+               if (hide_guard_page(p))
+                       return NULL;
+       }
 
        return p;
 }
diff --git a/vm/gc.c b/vm/gc.c
index f182eb6..a8bf589 100644
--- a/vm/gc.c
+++ b/vm/gc.c
@@ -6,7 +6,7 @@ void *gc_safepoint_page;
 
 void gc_init(void)
 {
-       gc_safepoint_page = alloc_guard_page();
+       gc_safepoint_page = alloc_guard_page(false);
        if (!gc_safepoint_page)
                die("Couldn't allocate GC safepoint guard page");
 }
diff --git a/vm/jni-interface.c b/vm/jni-interface.c
index 193a601..4bef032 100644
--- a/vm/jni-interface.c
+++ b/vm/jni-interface.c
@@ -1152,7 +1152,7 @@ static void *jni_not_implemented_trap;
 
 void vm_jni_init(void)
 {
-       jni_not_implemented_trap = alloc_guard_page();
+       jni_not_implemented_trap = alloc_guard_page(true);
        if (!jni_not_implemented_trap)
                die("guard page alloc failed");
 
diff --git a/vm/static.c b/vm/static.c
index d28a01c..d1899a1 100644
--- a/vm/static.c
+++ b/vm/static.c
@@ -18,7 +18,7 @@ void *static_guard_page;
 
 void static_fixup_init(void)
 {
-       static_guard_page = alloc_guard_page();
+       static_guard_page = alloc_guard_page(true);
        if (!static_guard_page)
                abort();
 }
-- 
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