]> granicus.if.org Git - php/commitdiff
Fixed tracing JIT for CALL VM
authorDmitry Stogov <dmitry@zend.com>
Wed, 27 May 2020 12:59:29 +0000 (15:59 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 27 May 2020 12:59:29 +0000 (15:59 +0300)
ext/opcache/jit/zend_jit_x86.dasc

index abee45b95cec6e4649bda729db64a0ac26c08847..f76175a7d78755d4b5cb3ac8e0c87b8af8b177ac 100644 (file)
@@ -2433,7 +2433,11 @@ static int zend_jit_trace_exit_stub(dasm_State **Dst)
        }
 
        |1:
-       |       jl ->trace_halt
+       if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) {
+               |       jl ->trace_halt
+       } else {
+               |       jl >2
+       }
 
        |       // execute_data = EG(current_execute_data)
        |       MEM_OP2_2_ZTS mov, FP, aword, executor_globals, current_execute_data, r0
@@ -2456,6 +2460,9 @@ static int zend_jit_trace_exit_stub(dasm_State **Dst)
                |       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)]
                |       jmp aword [IP + r0]
+               |2:
+               |       add r4, SPAD // stack alignment
+               |       ret
        } else {
                |       mov IP, aword EX->opline
                |       mov FCARG1a, FP
@@ -2468,6 +2475,9 @@ static int zend_jit_trace_exit_stub(dasm_State **Dst)
                |       add r4, NR_SPAD // stack alignment
                |       mov r0, 1 // ZEND_VM_ENTER
                |       ret
+               |2:
+               |       add r4, NR_SPAD // stack alignment
+               |       ret
        }
 
        return 1;