]> granicus.if.org Git - php/commitdiff
Fixed tracing JIT for CALL VM without global register variables
authorDmitry Stogov <dmitry@zend.com>
Thu, 7 May 2020 20:41:48 +0000 (23:41 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 7 May 2020 20:41:48 +0000 (23:41 +0300)
ext/opcache/jit/zend_jit_x86.dasc

index 642fb702111825969e044f2eb0d4ebb8355e6fec..a46d0777897a8d7d8be73d9be4d1521ce2e71746 100644 (file)
@@ -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;