From fdb19337f0d8ad0f61b17bfcfb81b0d9c1ea6994 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sun, 9 Oct 2016 23:46:56 -0400 Subject: Allocate two pages of stack for jrp --- .bin/jrp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to '.bin') diff --git a/.bin/jrp.c b/.bin/jrp.c index cde2fcce..de137cf7 100755 --- a/.bin/jrp.c +++ b/.bin/jrp.c @@ -133,10 +133,10 @@ static void jitInit(void) { } static void stackInit(void) { - stack.base = mmap(0, getpagesize(), PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); + stack.base = mmap(0, 2 * getpagesize(), PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); if (stack.base == MAP_FAILED) err(EX_OSERR, "mmap"); stack.limit = stack.base + getpagesize() / sizeof(qvalue); - stack.ptr = stack.limit - 1; + stack.ptr = stack.limit; } static void jitExec(void) { @@ -144,6 +144,7 @@ static void jitExec(void) { error = mprotect(code.base, getpagesize(), PROT_READ | PROT_EXEC); if (error) err(EX_OSERR, "mprotect"); stack.ptr = ((jitFn)code.base)(stack.ptr); + if (stack.ptr > stack.limit) stack.ptr = stack.limit; error = mprotect(code.base, getpagesize(), PROT_READ | PROT_WRITE); if (error) err(EX_OSERR, "mprotect"); } @@ -215,6 +216,7 @@ static char *prompt(EditLine *el __attribute((unused))) { } } buf[0] = '['; + if (bufPtr == buf) bufPtr++; *bufPtr++ = ']'; *bufPtr++ = ' '; *bufPtr = 0; -- cgit 1.4.1