From be8bf64eb20977a4d247e616bbca486351897ea6 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Wed, 25 Sep 2013 07:53:10 +0000 Subject: [PATCH] added assertion in the JIT compiler which checks that we are not going outside of the compilation window --- src/runtime/c/pgf/jit.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/runtime/c/pgf/jit.c b/src/runtime/c/pgf/jit.c index fe3f4dcc2..edb2ec97b 100644 --- a/src/runtime/c/pgf/jit.c +++ b/src/runtime/c/pgf/jit.c @@ -14,6 +14,7 @@ struct PgfJitState { GuPool* pool; jit_state jit; jit_insn *buf; + char *save_ip_ptr; GuBuf* patches; }; @@ -71,10 +72,10 @@ pgf_jit_init(GuPool* tmp_pool, GuPool* pool) PgfJitState* state = gu_new(PgfJitState, tmp_pool); state->tmp_pool = tmp_pool; state->pool = pool; - state->buf = NULL; state->patches = gu_new_buf(PgfCallPatch, tmp_pool); pgf_jit_alloc_page(state); + state->save_ip_ptr = jit_get_ip().ptr; return state; } @@ -82,11 +83,15 @@ pgf_jit_init(GuPool* tmp_pool, GuPool* pool) static void pgf_jit_make_space(PgfJitState* state) { + assert (state->save_ip_ptr + JIT_CODE_WINDOW > jit_get_ip().ptr); + size_t page_size = getpagesize(); if (jit_get_ip().ptr + JIT_CODE_WINDOW > ((char*) state->buf) + page_size) { jit_flush_code(state->buf, jit_get_ip().ptr); pgf_jit_alloc_page(state); } + + state->save_ip_ptr = jit_get_ip().ptr; } void