From: Dmitry Stogov Date: Fri, 10 Jul 2020 09:51:19 +0000 (+0300) Subject: Restore registers X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8d15a2bc8eaa567539bea16c51028a002885a1bd;p=php Restore registers --- diff --git a/ext/opcache/jit/zend_jit_vm_helpers.c b/ext/opcache/jit/zend_jit_vm_helpers.c index 9e52c47be7..be6ecce0b5 100644 --- a/ext/opcache/jit/zend_jit_vm_helpers.c +++ b/ext/opcache/jit/zend_jit_vm_helpers.c @@ -590,6 +590,10 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex, if (UNEXPECTED(opline->opcode == ZEND_HANDLE_EXCEPTION)) { /* Abort trace because of exception */ +#ifdef HAVE_GCC_GLOBAL_REGS + execute_data = save_execute_data; + opline = save_opline; +#endif return ZEND_JIT_TRACE_STOP_EXCEPTION; } @@ -609,6 +613,10 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex, if (prev_call) { int ret = zend_jit_trace_record_fake_init_call(prev_call, trace_buffer, idx, is_megamorphic, &megamorphic, ret_level + level); if (ret < 0) { +#ifdef HAVE_GCC_GLOBAL_REGS + execute_data = save_execute_data; + opline = save_opline; +#endif return ZEND_JIT_TRACE_STOP_BAD_FUNC; } idx = ret;