From 49ebfb04ef10f249d3db435ffcf87b5fa2de3a11 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Wed, 7 Feb 2024 14:02:27 +0100 Subject: [PATCH] Fix JMP_FRAMELESS with ZEND_USE_ABS_JMP_ADDR which is used on 32-bit machines. --- ext/opcache/jit/zend_jit_trace.c | 1 + ext/opcache/zend_file_cache.c | 2 ++ ext/opcache/zend_persist.c | 1 + 3 files changed, 4 insertions(+) diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 5fcc2577ab6..5ccea0149bc 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -300,6 +300,7 @@ static int zend_jit_trace_may_exit(const zend_op_array *op_array, const zend_op case ZEND_SWITCH_STRING: case ZEND_MATCH: case ZEND_BIND_INIT_STATIC_OR_JMP: + case ZEND_JMP_FRAMELESS: /* branch opcodes */ return 1; case ZEND_NEW: diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c index edcaf689ab7..05a1fec2b63 100644 --- a/ext/opcache/zend_file_cache.c +++ b/ext/opcache/zend_file_cache.c @@ -557,6 +557,7 @@ static void zend_file_cache_serialize_op_array(zend_op_array *op_arra case ZEND_ASSERT_CHECK: case ZEND_JMP_NULL: case ZEND_BIND_INIT_STATIC_OR_JMP: + case ZEND_JMP_FRAMELESS: SERIALIZE_PTR(opline->op2.jmp_addr); break; case ZEND_CATCH: @@ -1408,6 +1409,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr case ZEND_ASSERT_CHECK: case ZEND_JMP_NULL: case ZEND_BIND_INIT_STATIC_OR_JMP: + case ZEND_JMP_FRAMELESS: UNSERIALIZE_PTR(opline->op2.jmp_addr); break; case ZEND_CATCH: diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c index b10e5a8046a..0d9ad4b6188 100644 --- a/ext/opcache/zend_persist.c +++ b/ext/opcache/zend_persist.c @@ -579,6 +579,7 @@ static void zend_persist_op_array_ex(zend_op_array *op_array, zend_persistent_sc case ZEND_ASSERT_CHECK: case ZEND_JMP_NULL: case ZEND_BIND_INIT_STATIC_OR_JMP: + case ZEND_JMP_FRAMELESS: opline->op2.jmp_addr = &new_opcodes[opline->op2.jmp_addr - op_array->opcodes]; break; case ZEND_CATCH: