From b67c4ed1e1d42610e82d1bdbba3a9df44995449d Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Tue, 21 May 2019 16:05:03 +0200 Subject: [PATCH] Avoid recursive pool emit for aarch64; add another overflow check --- lightening/aarch64-cpu.c | 7 ++++--- lightening/lightening.c | 5 +++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lightening/aarch64-cpu.c b/lightening/aarch64-cpu.c index 50f2b9dc3..1e727008c 100644 --- a/lightening/aarch64-cpu.c +++ b/lightening/aarch64-cpu.c @@ -994,10 +994,11 @@ static void emit_veneer(jit_state_t *_jit, jit_pointer_t target) { jit_gpr_t tmp = get_temp_gpr(_jit); - uint32_t inst = encode_ox19(A64_LDRI_LITERAL, jit_gpr_regno(tmp)); + uint32_t ldr = encode_ox19(A64_LDRI_LITERAL, jit_gpr_regno(tmp)); + uint32_t br = write_Rn_bitfield(A64_BR, jit_gpr_regno(tmp)); uint32_t *loc = _jit->pc.ui; - emit_u32(_jit, inst); - BR(_jit, jit_gpr_regno(tmp)); + emit_u32(_jit, ldr); + emit_u32(_jit, br); unget_temp_gpr(_jit); if (_jit->overflow) return; diff --git a/lightening/lightening.c b/lightening/lightening.c index 5050a35b0..bf9d9edbd 100644 --- a/lightening/lightening.c +++ b/lightening/lightening.c @@ -1331,8 +1331,6 @@ emit_literal_pool(jit_state_t *_jit, enum guard_pool guard) if (_jit->overflow) return; - _jit->pool->deadline = -1; - if (!_jit->pool->size) return; @@ -1368,6 +1366,9 @@ emit_literal_pool(jit_state_t *_jit, enum guard_pool guard) } } + if (_jit->overflow) + return; + if (guard == GUARD_NEEDED) patch_jmp_without_veneer(_jit, patch_loc);