Skip to content

Commit 4c3093a

Browse files
committed
Fixup after rebase
1 parent 05a6fc3 commit 4c3093a

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

Zend/zend_observer.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,12 @@ typedef struct _zend_observer_fcall_handlers {
4141
zend_observer_fcall_end_handler end;
4242
} zend_observer_fcall_handlers;
4343

44+
45+
#define ZEND_OBSERVER_HANDLE(function) (ZEND_USER_CODE((function)->type) \
46+
? zend_observer_fcall_op_array_extension : zend_observer_fcall_internal_function_extension)
47+
4448
#define ZEND_OBSERVER_DATA(function) \
45-
ZEND_OP_ARRAY_EXTENSION((&(function)->common), ZEND_USER_CODE((function)->type) \
46-
? zend_observer_fcall_op_array_extension : zend_observer_fcall_internal_function_extension)
49+
((zend_observer_fcall_begin_handler *)&ZEND_OP_ARRAY_EXTENSION((&(function)->common), ZEND_OBSERVER_HANDLE(function)))
4750

4851
#define ZEND_OBSERVER_NONE_OBSERVED ((void *) 3) // Neither begin nor end handler present
4952

@@ -99,7 +102,7 @@ static zend_always_inline bool zend_observer_fcall_has_no_observers(zend_execute
99102
return true;
100103
}
101104

102-
*handler = (zend_observer_fcall_begin_handler *)ZEND_MAP_PTR_GET(runtime_cache) + zend_observer_fcall_op_array_extension;
105+
*handler = (zend_observer_fcall_begin_handler *)ZEND_MAP_PTR_GET(runtime_cache) + ZEND_OBSERVER_HANDLE(function);
103106
return zend_observer_handler_is_unobserved(*handler);
104107
}
105108

ext/opcache/jit/zend_jit_ir.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4521,7 +4521,24 @@ static struct jit_observer_fcall_is_unobserved_data jit_observer_fcall_is_unobse
45214521
run_time_cache = ir_PHI_2(IR_ADDR, run_time_cache, run_time_cache2);
45224522
}
45234523
}
4524-
*observer_handler = ir_ADD_OFFSET(run_time_cache, zend_observer_fcall_op_array_extension * sizeof(void *));
4524+
if (func) {
4525+
*observer_handler = ir_ADD_OFFSET(run_time_cache, ZEND_OBSERVER_HANDLE(func) * sizeof(void *));
4526+
} else {
4527+
// JIT: if (ZEND_USER_CODE(func->type)) {
4528+
ir_ref tmp = ir_LOAD_U8(ir_ADD_OFFSET(func_ref, offsetof(zend_function, type)));
4529+
ir_ref if_internal_func = ir_IF(ir_AND_U8(tmp, ir_CONST_U8(1)));
4530+
ir_IF_TRUE(if_internal_func);
4531+
4532+
ir_ref observer_handler_internal = ir_ADD_OFFSET(run_time_cache, zend_observer_fcall_internal_function_extension * sizeof(void *));
4533+
4534+
ir_ref if_internal_func_end = ir_END();
4535+
ir_IF_FALSE(if_internal_func);
4536+
4537+
ir_ref observer_handler_user = ir_ADD_OFFSET(run_time_cache, zend_observer_fcall_op_array_extension * sizeof(void *));
4538+
4539+
ir_MERGE_WITH(if_internal_func_end);
4540+
*observer_handler = ir_PHI_2(IR_ADDR, observer_handler_internal, observer_handler_user);
4541+
}
45254542

45264543
data.if_unobserved = ir_IF(ir_EQ(ir_LOAD_A(*observer_handler), ir_CONST_ADDR(ZEND_OBSERVER_NONE_OBSERVED)));
45274544
ir_IF_FALSE(data.if_unobserved);

0 commit comments

Comments
 (0)