vm_invoke_builtin() accesses VM stack via cfp->sp. However, MJIT
can use their own stack. To access them appropriately, we need to
use STACK_ADDR_FROM_TOP().
This commit is contained in:
Koichi Sasada 2019-11-09 16:15:17 +09:00
Родитель 50bc7e7e9f
Коммит 43ceedecc0
2 изменённых файлов: 2 добавлений и 3 удалений

Просмотреть файл

@ -1497,7 +1497,7 @@ invokebuiltin
// attr bool leaf = false; /* anything can happen inside */
// attr rb_snum_t sp_inc = 1 - bf->argc;
{
ret = vm_invoke_builtin(ec, reg_cfp, bf);
ret = vm_invoke_builtin(ec, reg_cfp, bf, STACK_ADDR_FROM_TOP(bf->argc));
}
/* call specific function with args (same parameters) */

Просмотреть файл

@ -4981,9 +4981,8 @@ invoke_bf(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_b
}
static VALUE
vm_invoke_builtin(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function* bf)
vm_invoke_builtin(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function* bf, const VALUE *argv)
{
const VALUE *argv = cfp->sp - bf->argc;
return invoke_bf(ec, cfp, bf, argv);
}