diff options
| author | Richard Henderson | 2021-06-19 15:32:03 +0200 |
|---|---|---|
| committer | Richard Henderson | 2021-06-19 23:51:51 +0200 |
| commit | 732d58979c9d6ab1b955b65264a15d0696ea477e (patch) | |
| tree | 476ed04dbf18cd7a2431d3c2202174c8437f45da | |
| parent | tcg: Allocate sufficient storage in temp_allocate_frame (diff) | |
| download | qemu-732d58979c9d6ab1b955b65264a15d0696ea477e.tar.gz qemu-732d58979c9d6ab1b955b65264a15d0696ea477e.tar.xz qemu-732d58979c9d6ab1b955b65264a15d0696ea477e.zip | |
tcg: Restart when exhausting the stack frame
Assume that we'll have fewer temps allocated after
restarting with a fewer number of instructions.
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
| -rw-r--r-- | tcg/tcg.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -3038,7 +3038,11 @@ static void temp_allocate_frame(TCGContext *s, TCGTemp *ts) assert(align <= TCG_TARGET_STACK_ALIGN); off = ROUND_UP(s->current_frame_offset, align); - assert(off + size <= s->frame_end); + + /* If we've exhausted the stack frame, restart with a smaller TB. */ + if (off + size > s->frame_end) { + tcg_raise_tb_overflow(s); + } s->current_frame_offset = off + size; ts->mem_offset = off; |
