summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2020-07-10 12:51:19 +0300
committerDmitry Stogov <dmitry@zend.com>2020-07-10 12:51:19 +0300
commit8d15a2bc8eaa567539bea16c51028a002885a1bd (patch)
tree09b449a0270c0626ffa34a47979f9f512e31b455
parentef1de5e973f9bae9306e3e76e2247d19fb1a368b (diff)
downloadphp-git-8d15a2bc8eaa567539bea16c51028a002885a1bd.tar.gz
Restore registers
-rw-r--r--ext/opcache/jit/zend_jit_vm_helpers.c8
1 files changed, 8 insertions, 0 deletions
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;