From: Dmitry Stogov Date: Thu, 7 May 2020 20:41:48 +0000 (+0300) Subject: Fixed tracing JIT for CALL VM without global register variables X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5d9063a546245dba4782b40280a3ab741c31d27e;p=php Fixed tracing JIT for CALL VM without global register variables --- diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 642fb70211..a46d077789 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -3021,12 +3021,18 @@ static int zend_jit_trace_return(dasm_State **Dst, zend_bool original_handler) | jmp aword [IP + r0] } } else { + if (original_handler) { + | mov FCARG1a, FP + | mov r0, EX->func + | mov r0, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])] + | mov r0, aword [r0 + offsetof(zend_jit_op_array_trace_extension, offset)] + | call aword [IP + r0] + } | mov FP, aword T2 // restore FP | mov RX, aword T3 // restore IP | add r4, NR_SPAD // stack alignment | mov r0, 2 // ZEND_VM_LEAVE | ret - // TODO: support for "original_handler" ???? } #endif return 1;