Skip to content

Commit b44cf93

Browse files
committed
Allow tracing JIT cooperate with function JIT.
1 parent f3c58a5 commit b44cf93

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5788,6 +5788,7 @@ static zend_jit_trace_stop zend_jit_compile_root_trace(zend_jit_trace_rec *trace
57885788
{
57895789
zend_jit_trace_stop ret;
57905790
const void *handler;
5791+
uint8_t orig_trigger;
57915792
zend_jit_trace_info *t = NULL;
57925793
zend_jit_trace_exit_info exit_info[ZEND_JIT_TRACE_MAX_EXITS];
57935794

@@ -5818,8 +5819,13 @@ static zend_jit_trace_stop zend_jit_compile_root_trace(zend_jit_trace_rec *trace
58185819
t->exit_info = exit_info;
58195820
t->stack_map = NULL;
58205821

5822+
orig_trigger = JIT_G(trigger);
5823+
JIT_G(trigger) = ZEND_JIT_ON_HOT_TRACE;
5824+
58215825
handler = zend_jit_trace(trace_buffer, 0, 0);
58225826

5827+
JIT_G(trigger) = orig_trigger;
5828+
58235829
if (handler) {
58245830
zend_jit_trace_exit_info *shared_exit_info = NULL;
58255831

@@ -6407,6 +6413,7 @@ static zend_jit_trace_stop zend_jit_compile_side_trace(zend_jit_trace_rec *trace
64076413
{
64086414
zend_jit_trace_stop ret;
64096415
const void *handler;
6416+
uint8_t orig_trigger;
64106417
zend_jit_trace_info *t;
64116418
zend_jit_trace_exit_info exit_info[ZEND_JIT_TRACE_MAX_EXITS];
64126419

@@ -6439,8 +6446,13 @@ static zend_jit_trace_stop zend_jit_compile_side_trace(zend_jit_trace_rec *trace
64396446
t->exit_info = exit_info;
64406447
t->stack_map = NULL;
64416448

6449+
orig_trigger = JIT_G(trigger);
6450+
JIT_G(trigger) = ZEND_JIT_ON_HOT_TRACE;
6451+
64426452
handler = zend_jit_trace(trace_buffer, parent_num, exit_num);
64436453

6454+
JIT_G(trigger) = orig_trigger;
6455+
64446456
if (handler) {
64456457
zend_jit_trace_exit_info *shared_exit_info = NULL;
64466458

ext/opcache/jit/zend_jit_vm_helpers.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,9 @@ static int zend_jit_trace_record_fake_init_call_ex(zend_execute_data *call, zend
465465
&& (func->op_array.fn_flags & ZEND_ACC_CLOSURE)) {
466466
jit_extension =
467467
(zend_jit_op_array_trace_extension*)ZEND_FUNC_INFO(&func->op_array);
468-
if (UNEXPECTED(!jit_extension || (func->op_array.fn_flags & ZEND_ACC_FAKE_CLOSURE))) {
468+
if (UNEXPECTED(!jit_extension
469+
|| !(jit_extension->func_info.flags & ZEND_FUNC_JIT_ON_HOT_TRACE)
470+
|| (func->op_array.fn_flags & ZEND_ACC_FAKE_CLOSURE))) {
469471
return -1;
470472
}
471473
func = (zend_function*)jit_extension->op_array;
@@ -765,8 +767,9 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
765767
op_array = &EX(func)->op_array;
766768
jit_extension =
767769
(zend_jit_op_array_trace_extension*)ZEND_FUNC_INFO(op_array);
768-
if (UNEXPECTED(!jit_extension)) {
769-
stop = ZEND_JIT_TRACE_STOP_BAD_FUNC;
770+
if (UNEXPECTED(!jit_extension)
771+
|| UNEXPECTED(!(jit_extension->func_info.flags & ZEND_FUNC_JIT_ON_HOT_TRACE))) {
772+
stop = ZEND_JIT_TRACE_STOP_INTERPRETER;
770773
break;
771774
}
772775
offset = jit_extension->offset;
@@ -902,7 +905,9 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
902905
&& (func->op_array.fn_flags & ZEND_ACC_CLOSURE)) {
903906
jit_extension =
904907
(zend_jit_op_array_trace_extension*)ZEND_FUNC_INFO(&func->op_array);
905-
if (UNEXPECTED(!jit_extension) || (func->op_array.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
908+
if (UNEXPECTED(!jit_extension)
909+
|| !(jit_extension->func_info.flags & ZEND_FUNC_JIT_ON_HOT_TRACE)
910+
|| (func->op_array.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
906911
stop = ZEND_JIT_TRACE_STOP_INTERPRETER;
907912
break;
908913
}

0 commit comments

Comments
 (0)