diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/opcache/ZendAccelerator.c | 10 | ||||
-rw-r--r-- | ext/opcache/jit/zend_jit.c | 1 | ||||
-rw-r--r-- | ext/opcache/jit/zend_jit_x86.dasc | 19 | ||||
-rw-r--r-- | ext/zend_test/test.c | 12 | ||||
-rw-r--r-- | ext/zend_test/tests/observer_jit_01.phpt | 25 |
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'> |