From c6b8ba7c4a40e9a0933df2661332167d55c8bf80 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 12 Dec 2015 08:13:34 -0700 Subject: [PATCH] JIT: add missing checks for buffer space --- racket/src/racket/src/jitcommon.c | 1 + racket/src/racket/src/jitinline.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/racket/src/racket/src/jitcommon.c b/racket/src/racket/src/jitcommon.c index e58e30ec06..7c271f64b3 100644 --- a/racket/src/racket/src/jitcommon.c +++ b/racket/src/racket/src/jitcommon.c @@ -3967,6 +3967,7 @@ static int more_common1(mz_jit_state *jitter, void *_data) /* -3 here means "don't pop the arguments"; need regular argument handling via `reftop` for tail calls */ scheme_generate_non_tail_call(jitter, -3, 0, 1, multi_ok, 0, 0, 1, 0, 0, reftop); + CHECK_LIMIT(); scheme_jit_register_sub_func(jitter, code, scheme_false); } diff --git a/racket/src/racket/src/jitinline.c b/racket/src/racket/src/jitinline.c index f22d78a755..2e6e6b0a7b 100644 --- a/racket/src/racket/src/jitinline.c +++ b/racket/src/racket/src/jitinline.c @@ -2166,6 +2166,7 @@ int scheme_generate_two_args(Scheme_Object *rand1, Scheme_Object *rand2, mz_jit_ if (simple2 && !order_matters && already_in_register(rand1, jitter)) { scheme_generate(rand1, jitter, 0, 0, 0, JIT_R1, NULL, NULL); /* no sync... */ + CHECK_LIMIT(); scheme_generate(rand2, jitter, 0, 0, 0, JIT_R0, NULL, NULL); /* no sync... */ direction = -1; } else { @@ -3426,6 +3427,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i scheme_mz_unbox_save(jitter, &ubs); /* no unboxing of vector and index arguments */ scheme_generate_two_args(app->rand1, app->rand2, jitter, 1, 2); + CHECK_LIMIT(); scheme_mz_unbox_restore(jitter, &ubs); CHECK_LIMIT(); @@ -3468,6 +3470,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i is_u = IS_NAMED_PRIM(rator, "unsafe-u16vector-ref"); scheme_generate_two_args(app->rand1, app->rand2, jitter, 1, 2); + CHECK_LIMIT(); jit_ldxi_p(JIT_R0, JIT_R0, (intptr_t)&(((Scheme_Structure *)0x0)->slots[0])); jit_ldxi_p(JIT_R0, JIT_R0, (intptr_t)&SCHEME_CPTR_VAL(0x0)); @@ -3484,6 +3487,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i } else if (IS_NAMED_PRIM(rator, "list-ref") || IS_NAMED_PRIM(rator, "list-tail")) { scheme_generate_two_args(app->rand1, app->rand2, jitter, 1, 2); + CHECK_LIMIT(); mz_rs_sync(); if (IS_NAMED_PRIM(rator, "list-ref")) @@ -3518,6 +3522,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i } scheme_generate_two_args(app->rand1, app->rand2, jitter, 1, 2); + CHECK_LIMIT(); if (IS_NAMED_PRIM(rator, "unsafe-list-ref")) (void)jit_calli(sjc.list_ref_code); @@ -4255,6 +4260,7 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int scheme_generate(app->args[3], jitter, 0, 0, 0, JIT_R2, NULL, NULL); /* sync'd below */ else { scheme_generate_non_tail(app->args[3], jitter, 0, 1, 0); /* sync'd below */ + CHECK_LIMIT(); jit_movr_p(JIT_R2, JIT_R0); } } @@ -4451,6 +4457,7 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int got_two = 1; mz_runstack_skipped(jitter, 1); scheme_generate_app(app, NULL, 2, jitter, 0, 0, 0, 2); + CHECK_LIMIT(); } if (scheme_can_unbox_inline(app->args[3], 5, JIT_FPUSEL_FPR_NUM(extfl)-1, 1, extfl))