From 8dfebe8d125c7e91fb28ad4df9f348f5e1ff650f Mon Sep 17 00:00:00 2001 From: dearblue Date: Sun, 31 Mar 2024 11:53:09 +0900 Subject: [PATCH] Need to synchronize `dbg->regs` after VM call in `mrdb` VM inrush could invalidate addresses stored in `dbg->regs` by `stack_extend()`. --- mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c index 6516c50a9..0413c0be0 100644 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c @@ -640,6 +640,7 @@ mrb_code_fetch_hook(mrb_state *mrb, const mrb_irep *irep, const mrb_code *pc, mr static mrdb_exemode mrb_debug_break_hook(mrb_state *mrb, mrb_debug_context *dbg) { + ptrdiff_t regs_off = dbg->regs - mrb->c->ci->stack; debug_command *cmd; dbgcmd_state st = DBGST_CONTINUE; mrdb_state *mrdb = mrdb_state_get(mrb); @@ -651,6 +652,7 @@ mrb_debug_break_hook(mrb_state *mrb, mrb_debug_context *dbg) mrb_assert(cmd); st = cmd->func(mrb, mrdb); + dbg->regs = mrb->c->ci->stack + regs_off; if ((st == DBGST_CONTINUE) || (st == DBGST_RESTART)) break; }