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