[php-src] master: Use ZEND_OPCACHE_SHM_REATTACHMENT more commonly (#24085)
| From: | Nora Dossche via GitHub | Date: | Sat, 10 Oct 2026 10:24:33 +0000 |
| Subject: | [php-src] master: Use ZEND_OPCACHE_SHM_REATTACHMENT more commonly (#24085) | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-142154@lists.php.net to get a copy of this message | ||
Author: Nora Dossche (ndossche)
Committer: GitHub (web-flow)
Pusher: ndossche
Date: 2026-10-10T12:24:29+02:00
Commit: https://github.com/php/php-src/commit/3070be2b527d1065180f871018188aa5474e3c82
Raw diff: https://github.com/php/php-src/commit/3070be2b527d1065180f871018188aa5474e3c82.diff
Use ZEND_OPCACHE_SHM_REATTACHMENT more commonly (#24085)
Changed paths:
M Zend/Optimizer/zend_optimizer.c
M Zend/zend_inheritance.c
M ext/opcache/jit/zend_jit.c
M ext/opcache/jit/zend_jit_ir.c
Diff:
diff --git a/Zend/Optimizer/zend_optimizer.c b/Zend/Optimizer/zend_optimizer.c
index 6d5b5f541a90..db5cd03a4e44 100644
--- a/Zend/Optimizer/zend_optimizer.c
+++ b/Zend/Optimizer/zend_optimizer.c
@@ -108,7 +108,7 @@ zend_result zend_optimizer_eval_special_func_call(
if (func && func->type == ZEND_INTERNAL_FUNCTION
&& func->module->type == MODULE_PERSISTENT
-#ifdef ZEND_WIN32
+#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
&& func->module->handle == NULL
#endif
) {
@@ -129,7 +129,7 @@ zend_result zend_optimizer_eval_special_func_call(
}
if (m->type == MODULE_PERSISTENT
-#ifdef ZEND_WIN32
+#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
&& m->handle == NULL
#endif
) {
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index 22787d6af302..375acc45d6a9 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -390,8 +390,8 @@ static void track_class_dependency(zend_class_entry *ce, zend_string *class_name
return;
}
-#ifndef ZEND_WIN32
- /* On non-Windows systems, internal classes are always the same,
+#ifndef ZEND_OPCACHE_SHM_REATTACHMENT
+ /* On systems without reattachment, internal classes are always the same,
* so there is no need to explicitly track them. */
if (ce->type == ZEND_INTERNAL_CLASS) {
return;
@@ -3619,7 +3619,7 @@ ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce,
zend_string
}
}
-#ifndef ZEND_WIN32
+#ifndef ZEND_OPCACHE_SHM_REATTACHMENT
if (ce->ce_flags & ZEND_ACC_ENUM) {
/* We will add internal methods. */
is_cacheable = false;
diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c
index 80d3287a4204..e5d26096984b 100644
--- a/ext/opcache/jit/zend_jit.c
+++ b/ext/opcache/jit/zend_jit.c
@@ -709,7 +709,7 @@ static bool zend_jit_class_may_be_modified(const zend_class_entry *ce, const zen
uint32_t i;
if (ce->type == ZEND_INTERNAL_CLASS) {
-#ifdef _WIN32
+#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
/* ASLR */
return 1;
#else
@@ -757,7 +757,7 @@ static bool zend_jit_class_may_be_modified(const zend_class_entry *ce, const zen
static bool zend_jit_may_be_modified(const zend_function *func, const zend_op_array *called_from)
{
if (func->type == ZEND_INTERNAL_FUNCTION) {
-#ifdef _WIN32
+#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
/* ASLR */
return 1;
#else
diff --git a/ext/opcache/jit/zend_jit_ir.c b/ext/opcache/jit/zend_jit_ir.c
index c0cc673d25dc..eec5434cde74 100644
--- a/ext/opcache/jit/zend_jit_ir.c
+++ b/ext/opcache/jit/zend_jit_ir.c
@@ -8555,7 +8555,7 @@ static int zend_jit_push_call_frame(zend_jit_ctx *jit, const zend_op *opline,
co
if_enough_stack = ir_IF(ref);
ir_IF_FALSE_cold(if_enough_stack);
-#ifdef _WIN32
+#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
if (0) {
#else
if (opline->opcode == ZEND_INIT_FCALL && func && func->type ==
ZEND_INTERNAL_FUNCTION) {
@@ -8604,7 +8604,7 @@ static int zend_jit_push_call_frame(zend_jit_ctx *jit, const zend_op *opline,
co
// JIT: ZEND_SET_CALL_INFO(call, 0, call_info);
ir_STORE(jit_CALL(rx, This.u1.type_info), ir_CONST_U32(IS_UNDEF | ZEND_CALL_NESTED_FUNCTION));
}
-#ifdef _WIN32
+#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
if (0) {
#else
if (opline->opcode == ZEND_INIT_FCALL && func && func->type ==
ZEND_INTERNAL_FUNCTION) {
@@ -8741,7 +8741,7 @@ static int zend_jit_func_guard(zend_jit_ctx *jit, ir_ref func_ref, const
zend_fu
ir_LOAD_A(ir_ADD_OFFSET(func_ref, offsetof(zend_op_array, opcodes))),
ir_CONST_ADDR(opcodes)),
ir_CONST_ADDR(exit_addr));
-#ifdef ZEND_WIN32
+#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
} else if (func->type == ZEND_INTERNAL_FUNCTION) {
// ASLR may cause different addresses in different workers. Check for the internal function
handler.
// JIT: if (call->func.internal_function.handler != handler) goto exit_addr;
@@ -8814,7 +8814,7 @@ static int zend_jit_init_fcall(zend_jit_ctx *jit, const zend_op *opline,
uint32_
if (!func
&& trace
&& trace->op == ZEND_JIT_TRACE_INIT_CALL) {
-#ifdef _WIN32
+#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
/* ASLR */
if (trace->func->type != ZEND_INTERNAL_FUNCTION) {
func = (zend_function*)trace->func;
@@ -8824,7 +8824,7 @@ static int zend_jit_init_fcall(zend_jit_ctx *jit, const zend_op *opline,
uint32_
#endif
}
-#ifdef _WIN32
+#ifdef ZEND_OPCACHE_SHM_REATTACHMENT
if (0) {
#else
if (opline->opcode == ZEND_INIT_FCALL
@@ -10065,7 +10065,7 @@ static int zend_jit_do_fcall(zend_jit_ctx *jit, const zend_op *opline, const
zen
if (trace && !func) {
if (trace->op == ZEND_JIT_TRACE_DO_ICALL) {
ZEND_ASSERT(!trace->func || trace->func->type == ZEND_INTERNAL_FUNCTION);
-#ifndef ZEND_WIN32
+#ifndef ZEND_OPCACHE_SHM_REATTACHMENT
// TODO: ASLR may cause different addresses in different workers ???
func = trace->func;
if (JIT_G(current_frame) &&