summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/opcache/ZendAccelerator.c10
-rw-r--r--ext/opcache/jit/zend_jit.c1
-rw-r--r--ext/opcache/jit/zend_jit_x86.dasc19
-rw-r--r--ext/zend_test/test.c12
-rw-r--r--ext/zend_test/tests/observer_jit_01.phpt25
5 files changed, 26 insertions, 41 deletions
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c
index 46363acb7b..71af3203dc 100644
--- a/ext/opcache/ZendAccelerator.c
+++ b/ext/opcache/ZendAccelerator.c
@@ -44,7 +44,6 @@
#include "zend_accelerator_util_funcs.h"
#include "zend_accelerator_hash.h"
#include "zend_file_cache.h"
-#include "zend_observer.h"
#include "ext/pcre/php_pcre.h"
#include "ext/standard/md5.h"
#include "ext/hash/php_hash.h"
@@ -2998,15 +2997,6 @@ static zend_result accel_post_startup(void)
}
}
-#ifdef HAVE_JIT
- /* TODO Observer support for JIT */
- if (ZEND_OBSERVER_ENABLED) {
- JIT_G(enabled) = 0;
- JIT_G(on) = 0;
- zend_accel_error(ACCEL_LOG_INFO, "Observer extension present. Disabling JIT.");
- }
-#endif
-
/* Initialize zend_func_info_rid */
zend_optimizer_startup();
diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c
index 3dad8e4f91..094f4d56d6 100644
--- a/ext/opcache/jit/zend_jit.c
+++ b/ext/opcache/jit/zend_jit.c
@@ -24,6 +24,7 @@
#include "Zend/zend_constants.h"
#include "Zend/zend_closures.h"
#include "Zend/zend_ini.h"
+#include "Zend/zend_observer.h"
#include "zend_smart_str.h"
#include "jit/zend_jit.h"
diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc
index daff6fb641..c689359272 100644
--- a/ext/opcache/jit/zend_jit_x86.dasc
+++ b/ext/opcache/jit/zend_jit_x86.dasc
@@ -9689,6 +9689,10 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
if (!trace && op_array == &func->op_array) {
/* recursive call */
+ if (ZEND_OBSERVER_ENABLED) {
+ | mov FCARG1a, FP
+ | EXT_CALL zend_observer_fcall_begin, r0
+ }
#ifdef CONTEXT_THREADED_JIT
| call >1
|.cold_code
@@ -9793,6 +9797,11 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
|3:
}
+ if (ZEND_OBSERVER_ENABLED) {
+ | mov FCARG1a, FP
+ | EXT_CALL zend_observer_fcall_begin, r0
+ }
+
if (trace) {
if (!func && (opline->opcode != ZEND_DO_UCALL)) {
| jmp >9
@@ -11170,6 +11179,11 @@ static int zend_jit_return(dasm_State **Dst, const zend_op *opline, const zend_o
if (return_value_used == 0) {
|9:
+ if (ZEND_OBSERVER_ENABLED) {
+ | xor FCARG2a, FCARG2a
+ | mov FCARG1a, FP
+ | EXT_CALL zend_observer_fcall_end, r0
+ }
return 1;
}
@@ -11232,6 +11246,11 @@ static int zend_jit_return(dasm_State **Dst, const zend_op *opline, const zend_o
}
|9:
+ if (ZEND_OBSERVER_ENABLED) {
+ | LOAD_ZVAL_ADDR FCARG2a, ret_addr
+ | mov FCARG1a, FP
+ | EXT_CALL zend_observer_fcall_end, r0
+ }
return 1;
}
diff --git a/ext/zend_test/test.c b/ext/zend_test/test.c
index 0e4040d1bd..4ca98a3c08 100644
--- a/ext/zend_test/test.c
+++ b/ext/zend_test/test.c
@@ -317,7 +317,7 @@ PHP_INI_BEGIN()
STD_PHP_INI_BOOLEAN("zend_test.observer.show_return_value", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_show_return_value, zend_zend_test_globals, zend_test_globals)
PHP_INI_END()
-static zend_observer_fcall observer_fcall_init(zend_function *fbc);
+static zend_observer_fcall_handlers observer_fcall_init(zend_function *fbc);
PHP_MINIT_FUNCTION(zend_test)
{
@@ -498,20 +498,20 @@ static void observer_show_init(zend_function *fbc)
}
}
-static zend_observer_fcall observer_fcall_init(zend_function *fbc)
+static zend_observer_fcall_handlers observer_fcall_init(zend_function *fbc)
{
if (ZT_G(observer_show_output)) {
observer_show_init(fbc);
}
if (ZT_G(observer_observe_all)) {
- return (zend_observer_fcall){observer_begin, observer_end};
+ return (zend_observer_fcall_handlers){observer_begin, observer_end};
} else if (ZT_G(observer_observe_includes) && !fbc->common.function_name) {
- return (zend_observer_fcall){observer_begin, observer_end};
+ return (zend_observer_fcall_handlers){observer_begin, observer_end};
} else if (ZT_G(observer_observe_functions) && fbc->common.function_name) {
- return (zend_observer_fcall){observer_begin, observer_end};
+ return (zend_observer_fcall_handlers){observer_begin, observer_end};
}
- return (zend_observer_fcall){NULL, NULL};
+ return (zend_observer_fcall_handlers){NULL, NULL};
}
PHP_RINIT_FUNCTION(zend_test)
diff --git a/ext/zend_test/tests/observer_jit_01.phpt b/ext/zend_test/tests/observer_jit_01.phpt
deleted file mode 100644
index f489986b6e..0000000000
--- a/ext/zend_test/tests/observer_jit_01.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-Observer: JIT is disabled when observer extension is present
---SKIPIF--
-<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
-<?php if (!extension_loaded('Zend OPcache')) die('skip: OPcache extension required'); ?>
-<?php if (!isset(opcache_get_status()['jit'])) die('skip: Build with JIT required'); ?>
---INI--
-zend_test.observer.enabled=1
-zend_test.observer.observe_all=1
-opcache.enable=1
-opcache.enable_cli=1
-opcache.jit=1
-opcache.jit_buffer_size=1M
---FILE--
-<?php
-$status = opcache_get_status();
-echo 'JIT enabled: ' . ($status['jit']['enabled'] ? 'yes' : 'no') . PHP_EOL;
-echo 'JIT on: ' . ($status['jit']['on'] ? 'yes' : 'no') . PHP_EOL;
-?>
---EXPECTF--
-<!-- init '%s/observer_jit_%d.php' -->
-<file '%s/observer_jit_%d.php'>
-JIT enabled: no
-JIT on: no
-</file '%s/observer_jit_%d.php'>