1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-30 17:00:23 +02:00

Correctly handle overflow when emitting literal pools

This commit is contained in:
Andy Wingo 2019-05-27 09:03:39 +02:00
parent 7c73f5f949
commit 909c0077cc

View file

@ -96,10 +96,6 @@ static struct jit_literal_pool* alloc_literal_pool(jit_state_t *_jit,
size_t capacity); size_t capacity);
static void reset_literal_pool(jit_state_t *_jit, static void reset_literal_pool(jit_state_t *_jit,
struct jit_literal_pool *pool); struct jit_literal_pool *pool);
static void grow_literal_pool(jit_state_t *_jit);
static jit_bool_t add_literal_pool_entry(jit_state_t *_jit,
struct jit_literal_pool_entry entry,
uint32_t max_offset);
static jit_bool_t add_pending_literal(jit_state_t *_jit, jit_reloc_t src, static jit_bool_t add_pending_literal(jit_state_t *_jit, jit_reloc_t src,
uint8_t max_offset_bits); uint8_t max_offset_bits);
static void remove_pending_literal(jit_state_t *_jit, jit_reloc_t src); static void remove_pending_literal(jit_state_t *_jit, jit_reloc_t src);
@ -1279,9 +1275,11 @@ static jit_bool_t
add_literal_pool_entry(jit_state_t *_jit, struct jit_literal_pool_entry entry, add_literal_pool_entry(jit_state_t *_jit, struct jit_literal_pool_entry entry,
uint32_t max_offset) uint32_t max_offset)
{ {
if (_jit->overflow)
return 1;
if (max_offset <= literal_pool_byte_size(_jit->pool)) { if (max_offset <= literal_pool_byte_size(_jit->pool)) {
emit_literal_pool(_jit, GUARD_NEEDED); emit_literal_pool(_jit, GUARD_NEEDED);
ASSERT(_jit->pool->size == 0);
return 0; return 0;
} }