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