if (ZCSG(preload_script)) {
preload_restart();
}
+
+#ifdef HAVE_JIT
+ zend_jit_restart();
+#endif
+
ZCSG(accelerator_enabled) = ZCSG(cache_status_before_restart);
if (ZCSG(last_restart_time) < ZCG(request_time)) {
ZCSG(last_restart_time) = ZCG(request_time);
}
#endif
- dasm_ptr = dasm_end = (void*)(((char*)dasm_buf) + size - sizeof(*dasm_ptr));
+ dasm_ptr = dasm_end = (void*)(((char*)dasm_buf) + size - sizeof(*dasm_ptr) * 2);
if (!reattached) {
zend_jit_unprotect();
*dasm_ptr = dasm_buf;
return FAILURE;
}
+ /* save JIT buffer pos */
+ zend_jit_unprotect();
+ dasm_ptr[1] = dasm_ptr[0];
+ zend_jit_protect();
+
return SUCCESS;
}
}
}
+ZEND_EXT_API void zend_jit_restart(void)
+{
+ if (dasm_buf) {
+ zend_jit_unprotect();
+
+ /* restore JIT buffer pos */
+ dasm_ptr[0] = dasm_ptr[1];
+
+ zend_jit_trace_restart();
+
+ zend_jit_protect();
+ }
+}
+
#endif /* HAVE_JIT */
ZEND_EXT_API void zend_jit_activate(void);
ZEND_EXT_API void zend_jit_deactivate(void);
ZEND_EXT_API void zend_jit_status(zval *ret);
+ZEND_EXT_API void zend_jit_restart(void);
typedef struct _zend_lifetime_interval zend_lifetime_interval;
typedef struct _zend_life_range zend_life_range;
static void zend_jit_trace_reset_caches(void)
{
}
+
+static void zend_jit_trace_restart(void)
+{
+ ZEND_JIT_TRACE_NUM = 1;
+ ZEND_JIT_COUNTER_NUM = 0;
+ ZEND_JIT_EXIT_NUM = 0;
+ ZEND_JIT_EXIT_COUNTERS = 0;
+
+ zend_jit_trace_init_caches();
+}