Skip to content

Commit 9d869f2

Browse files
committed
Avoid Program Counter guard in side trace started from Fake Init Fcall guard.
1 parent 038502b commit 9d869f2

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3569,7 +3569,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
35693569
goto jit_failure;
35703570
}
35713571
if ((p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
3572-
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
3572+
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
35733573
goto jit_failure;
35743574
}
35753575
}
@@ -3581,7 +3581,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
35813581
if ((opline->op1_type != IS_CONST
35823582
|| opline->op2_type != IS_CONST)
35833583
&& (p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
3584-
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
3584+
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
35853585
goto jit_failure;
35863586
}
35873587
}
@@ -3592,7 +3592,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
35923592
}
35933593
if (opline->op2_type != IS_CONST
35943594
&& (p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
3595-
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
3595+
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
35963596
goto jit_failure;
35973597
}
35983598
}
@@ -3603,7 +3603,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
36033603
}
36043604
if (opline->op1_type != IS_CONST
36053605
&& (p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
3606-
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
3606+
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
36073607
goto jit_failure;
36083608
}
36093609
}
@@ -3952,7 +3952,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
39523952
call_info = call_info->next_callee;
39533953
}
39543954
}
3955-
if (!skip_guard && !zend_jit_init_fcall_guard(&dasm_state, NULL, p->func)) {
3955+
if (!skip_guard && !zend_jit_init_fcall_guard(&dasm_state, NULL, p->func, ((zend_jit_trace_start_rec*)trace_buffer)->opline)) {
39563956
goto jit_failure;
39573957
}
39583958
frame->call_level++;

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7725,7 +7725,7 @@ static int zend_jit_needs_call_chain(zend_call_info *call_info, uint32_t b, cons
77257725
}
77267726
}
77277727

7728-
static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_op *opline, const zend_function *func)
7728+
static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_op *opline, const zend_function *func, const zend_op *to_opline)
77297729
{
77307730
int32_t exit_point;
77317731
const void *exit_addr;
@@ -7745,7 +7745,7 @@ static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_op *opline, co
77457745
return 0;
77467746
}
77477747

7748-
exit_point = zend_jit_trace_get_exit_point(opline, opline ? (opline+1) : NULL, NULL);
7748+
exit_point = zend_jit_trace_get_exit_point(opline, to_opline, NULL);
77497749
exit_addr = zend_jit_trace_get_exit_addr(exit_point);
77507750
if (!exit_addr) {
77517751
return 0;

0 commit comments

Comments
 (0)