goto jit_failure;
}
if ((p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
- if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
+ if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
goto jit_failure;
}
}
if ((opline->op1_type != IS_CONST
|| opline->op2_type != IS_CONST)
&& (p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
- if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
+ if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
goto jit_failure;
}
}
}
if (opline->op2_type != IS_CONST
&& (p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
- if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
+ if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
goto jit_failure;
}
}
}
if (opline->op1_type != IS_CONST
&& (p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
- if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
+ if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
goto jit_failure;
}
}
call_info = call_info->next_callee;
}
}
- if (!skip_guard && !zend_jit_init_fcall_guard(&dasm_state, NULL, p->func)) {
+ if (!skip_guard && !zend_jit_init_fcall_guard(&dasm_state, NULL, p->func, ((zend_jit_trace_start_rec*)trace_buffer)->opline)) {
goto jit_failure;
}
frame->call_level++;
}
}
-static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_op *opline, const zend_function *func)
+static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_op *opline, const zend_function *func, const zend_op *to_opline)
{
int32_t exit_point;
const void *exit_addr;
return 0;
}
- exit_point = zend_jit_trace_get_exit_point(opline, opline ? (opline+1) : NULL, NULL);
+ exit_point = zend_jit_trace_get_exit_point(opline, to_opline, NULL);
exit_addr = zend_jit_trace_get_exit_addr(exit_point);
if (!exit_addr) {
return 0;