Stop trace recording only on ENTER to FAKE_CLOSURE (continue on EXIT) (#16455)

This commit is contained in:
Dmitry Stogov 2024-10-16 12:26:40 +03:00 committed by GitHub
parent 99aa43a65a
commit 6d9f040d29
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -960,8 +960,7 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
jit_extension = jit_extension =
(zend_jit_op_array_trace_extension*)ZEND_FUNC_INFO(op_array); (zend_jit_op_array_trace_extension*)ZEND_FUNC_INFO(op_array);
if (UNEXPECTED(!jit_extension) if (UNEXPECTED(!jit_extension)
|| UNEXPECTED(!(jit_extension->func_info.flags & ZEND_FUNC_JIT_ON_HOT_TRACE)) || UNEXPECTED(!(jit_extension->func_info.flags & ZEND_FUNC_JIT_ON_HOT_TRACE))) {
|| (op_array->fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
stop = ZEND_JIT_TRACE_STOP_INTERPRETER; stop = ZEND_JIT_TRACE_STOP_INTERPRETER;
break; break;
} }
@ -995,6 +994,11 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
break; break;
} }
if (EX(func)->op_array.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
stop = ZEND_JIT_TRACE_STOP_INTERPRETER;
break;
}
TRACE_RECORD(ZEND_JIT_TRACE_ENTER, TRACE_RECORD(ZEND_JIT_TRACE_ENTER,
EX(return_value) != NULL ? ZEND_JIT_TRACE_RETURN_VALUE_USED : 0, EX(return_value) != NULL ? ZEND_JIT_TRACE_RETURN_VALUE_USED : 0,
op_array); op_array);