mirror of
https://github.com/php/php-src.git
synced 2026-04-18 05:21:02 +02:00
Avoid Program Counter guard in side trace started from Fake Init Fcall guard.
This commit is contained in:
@@ -3569,7 +3569,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
|
||||
goto jit_failure;
|
||||
}
|
||||
if ((p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
|
||||
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
|
||||
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
|
||||
goto jit_failure;
|
||||
}
|
||||
}
|
||||
@@ -3581,7 +3581,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
|
||||
if ((opline->op1_type != IS_CONST
|
||||
|| opline->op2_type != IS_CONST)
|
||||
&& (p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
|
||||
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
|
||||
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
|
||||
goto jit_failure;
|
||||
}
|
||||
}
|
||||
@@ -3592,7 +3592,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
|
||||
}
|
||||
if (opline->op2_type != IS_CONST
|
||||
&& (p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
|
||||
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
|
||||
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
|
||||
goto jit_failure;
|
||||
}
|
||||
}
|
||||
@@ -3603,7 +3603,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
|
||||
}
|
||||
if (opline->op1_type != IS_CONST
|
||||
&& (p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
|
||||
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func)) {
|
||||
if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) {
|
||||
goto jit_failure;
|
||||
}
|
||||
}
|
||||
@@ -3952,7 +3952,7 @@ done:
|
||||
call_info = call_info->next_callee;
|
||||
}
|
||||
}
|
||||
if (!skip_guard && !zend_jit_init_fcall_guard(&dasm_state, NULL, p->func)) {
|
||||
if (!skip_guard && !zend_jit_init_fcall_guard(&dasm_state, NULL, p->func, ((zend_jit_trace_start_rec*)trace_buffer)->opline)) {
|
||||
goto jit_failure;
|
||||
}
|
||||
frame->call_level++;
|
||||
|
||||
@@ -7725,7 +7725,7 @@ static int zend_jit_needs_call_chain(zend_call_info *call_info, uint32_t b, cons
|
||||
}
|
||||
}
|
||||
|
||||
static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_op *opline, const zend_function *func)
|
||||
static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_op *opline, const zend_function *func, const zend_op *to_opline)
|
||||
{
|
||||
int32_t exit_point;
|
||||
const void *exit_addr;
|
||||
@@ -7745,7 +7745,7 @@ static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_op *opline, co
|
||||
return 0;
|
||||
}
|
||||
|
||||
exit_point = zend_jit_trace_get_exit_point(opline, opline ? (opline+1) : NULL, NULL);
|
||||
exit_point = zend_jit_trace_get_exit_point(opline, to_opline, NULL);
|
||||
exit_addr = zend_jit_trace_get_exit_addr(exit_point);
|
||||
if (!exit_addr) {
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user