Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a00e4a3

Browse files
committed
Merge branch 'PHP-8.2'
2 parents 897b13a + ce2000d commit a00e4a3

File tree

5 files changed

+74
-10
lines changed

5 files changed

+74
-10
lines changed

‎ext/opcache/jit/zend_jit_arm64.dasc‎

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9586,13 +9586,17 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
95869586

95879587
zend_jit_reset_last_valid_opline();
95889588

9589-
| // fbc->internal_function.handler(call, ret);
9589+
| // (zend_execute_internal ? zend_execute_internal : fbc->internal_function.handler)(call, ret);
95909590
| mov FCARG1x, RX
9591-
if (func) {
9592-
| EXT_CALL func->internal_function.handler, REG0
9591+
if (zend_execute_internal) {
9592+
| EXT_CALL zend_execute_internal, REG0
95939593
} else {
9594-
| ldr TMP1, [REG0, #offsetof(zend_internal_function, handler)]
9595-
| blr TMP1
9594+
if (func) {
9595+
| EXT_CALL func->internal_function.handler, REG0
9596+
} else {
9597+
| ldr TMP1, [REG0, #offsetof(zend_internal_function, handler)]
9598+
| blr TMP1
9599+
}
95969600
}
95979601

95989602
if (ZEND_OBSERVER_ENABLED) {

‎ext/opcache/jit/zend_jit_x86.dasc‎

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10294,12 +10294,23 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
1029410294

1029510295
zend_jit_reset_last_valid_opline();
1029610296

10297-
| // fbc->internal_function.handler(call, ret);
10298-
| mov FCARG1a, RX
10299-
if (func) {
10300-
| EXT_CALL func->internal_function.handler, r0
10297+
| // (zend_execute_internal ? zend_execute_internal : fbc->internal_function.handler)(call, ret);
10298+
if (zend_execute_internal) {
10299+
|.if X64
10300+
| // CARG2 and FCARG2a are identical
10301+
| mov CARG1, RX
10302+
|.else
10303+
| mov aword A2, FCARG2a
10304+
| mov aword A1, RX
10305+
|.endif
10306+
| EXT_CALL zend_execute_internal, r0
1030110307
} else {
10302-
| call aword [r0 + offsetof(zend_internal_function, handler)]
10308+
| mov FCARG1a, RX
10309+
if (func) {
10310+
| EXT_CALL func->internal_function.handler, r0
10311+
} else {
10312+
| call aword [r0 + offsetof(zend_internal_function, handler)]
10313+
}
1030310314
}
1030410315

1030510316
if (ZEND_OBSERVER_ENABLED) {

‎ext/zend_test/observer.c‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,27 @@ void declared_class_observer(zend_class_entry *ce, zend_string *name) {
268268
}
269269
}
270270

271+
static void (*zend_test_prev_execute_internal)(zend_execute_data *execute_data, zval *return_value);
272+
static void zend_test_execute_internal(zend_execute_data *execute_data, zval *return_value) {
273+
zend_function *fbc = execute_data->func;
274+
275+
if (fbc->common.function_name) {
276+
if (fbc->common.scope) {
277+
php_printf("%*s<!-- internal enter %s::%s() -->\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
278+
} else {
279+
php_printf("%*s<!-- internal enter %s() -->\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->common.function_name));
280+
}
281+
} else {
282+
php_printf("%*s<!-- internal enter '%s' -->\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->op_array.filename));
283+
}
284+
285+
if (zend_test_prev_execute_internal) {
286+
zend_test_prev_execute_internal(execute_data, return_value);
287+
} else {
288+
fbc->internal_function.handler(execute_data, return_value);
289+
}
290+
}
291+
271292
static ZEND_INI_MH(zend_test_observer_OnUpdateCommaList)
272293
{
273294
zend_array **p = (zend_array **) ZEND_INI_GET_ADDR();
@@ -323,6 +344,7 @@ PHP_INI_BEGIN()
323344
STD_PHP_INI_BOOLEAN("zend_test.observer.fiber_init", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_fiber_init, zend_zend_test_globals, zend_test_globals)
324345
STD_PHP_INI_BOOLEAN("zend_test.observer.fiber_switch", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_fiber_switch, zend_zend_test_globals, zend_test_globals)
325346
STD_PHP_INI_BOOLEAN("zend_test.observer.fiber_destroy", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_fiber_destroy, zend_zend_test_globals, zend_test_globals)
347+
STD_PHP_INI_BOOLEAN("zend_test.observer.execute_internal", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_execute_internal, zend_zend_test_globals, zend_test_globals)
326348
PHP_INI_END()
327349

328350
void zend_test_observer_init(INIT_FUNC_ARGS)
@@ -351,6 +373,11 @@ void zend_test_observer_init(INIT_FUNC_ARGS)
351373
zend_observer_function_declared_register(declared_function_observer);
352374
zend_observer_class_linked_register(declared_class_observer);
353375
}
376+
377+
if (ZT_G(observer_execute_internal)) {
378+
zend_test_prev_execute_internal = zend_execute_internal;
379+
zend_execute_internal = zend_test_execute_internal;
380+
}
354381
}
355382

356383
void zend_test_observer_shutdown(SHUTDOWN_FUNC_ARGS)

‎ext/zend_test/php_test.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ ZEND_BEGIN_MODULE_GLOBALS(zend_test)
4949
int observer_fiber_init;
5050
int observer_fiber_switch;
5151
int observer_fiber_destroy;
52+
int observer_execute_internal;
5253
HashTable global_weakmap;
5354
int replace_zend_execute_ex;
5455
int register_passes;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
--TEST--
2+
Test zend_execute_internal being called
3+
--EXTENSIONS--
4+
zend_test
5+
--INI--
6+
zend_test.observer.execute_internal=1
7+
--FILE--
8+
<?php
9+
10+
function f($a) {
11+
var_dump(array_sum($a));
12+
}
13+
14+
f(time() > 0 ? [1, 2, 3] : []);
15+
16+
?>
17+
--EXPECT--
18+
<!-- internal enter time() -->
19+
<!-- internal enter array_sum() -->
20+
<!-- internal enter var_dump() -->
21+
int(6)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /