@@ -17058,11 +17058,15 @@ static int zend_jit_trace_handler(zend_jit_ctx *jit, const zend_op_array *op_arr
17058
17058
ref = ir_CALL_2(IR_ADDR, ir_CONST_FC_FUNC(handler), jit_FP(jit), jit_IP(jit));
17059
17059
if (opline->opcode == ZEND_RETURN ||
17060
17060
opline->opcode == ZEND_RETURN_BY_REF ||
17061
+ opline->opcode == ZEND_DO_UCALL ||
17062
+ opline->opcode == ZEND_DO_FCALL_BY_NAME ||
17063
+ opline->opcode == ZEND_DO_FCALL ||
17061
17064
opline->opcode == ZEND_GENERATOR_CREATE) {
17062
- // TODO: what other ops need this?
17063
- ref = ir_AND_A(ref, ir_CONST_ADDR(~ZEND_VM_ENTER_BIT));
17065
+
17066
+ jit_LOAD_IP(jit, ir_AND_A(ref, ir_CONST_ADDR(~ZEND_VM_ENTER_BIT)));
17067
+ } else {
17068
+ jit_LOAD_IP(jit, ref);
17064
17069
}
17065
- jit_LOAD_IP(jit, ref);
17066
17070
}
17067
17071
if (may_throw
17068
17072
&& opline->opcode != ZEND_RETURN
@@ -17102,10 +17106,8 @@ static int zend_jit_trace_handler(zend_jit_ctx *jit, const zend_op_array *op_arr
17102
17106
ir_GUARD(ir_NE(jit_IP(jit), ir_CONST_ADDR(zend_jit_halt_op)),
17103
17107
jit_STUB_ADDR(jit, jit_stub_trace_halt));
17104
17108
}
17105
- } else if (GCC_GLOBAL_REGS) {
17106
- ir_GUARD(jit_IP(jit), jit_STUB_ADDR(jit, jit_stub_trace_halt));
17107
17109
} else {
17108
- // TODO: check
17110
+ /* IP has been cleared of ZEND_VM_ENTER_BIT already */
17109
17111
ir_GUARD(jit_IP(jit), jit_STUB_ADDR(jit, jit_stub_trace_halt));
17110
17112
}
17111
17113
} else if (opline->opcode == ZEND_GENERATOR_RETURN ||
0 commit comments