GH-115419: Move setting the instruction pointer to error exit stubs (GH-118088)

This commit is contained in:
Mark Shannon 2024-04-24 14:41:30 +01:00 committed by GitHub
parent 77cd0428b6
commit 83235f7791
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 6 additions and 5 deletions

View file

@ -4226,7 +4226,8 @@ dummy_func(
EXIT_TO_TRACE();
}
tier2 op(_ERROR_POP_N, (unused[oparg] --)) {
tier2 op(_ERROR_POP_N, (target/2, unused[oparg] --)) {
frame->instr_ptr = ((_Py_CODEUNIT *)_PyFrame_GetCode(frame)->co_code_adaptive) + target;
SYNC_SP();
GOTO_UNWIND();
}

View file

@ -4210,6 +4210,8 @@
case _ERROR_POP_N: {
oparg = CURRENT_OPARG();
uint32_t target = (uint32_t)CURRENT_OPERAND();
frame->instr_ptr = ((_Py_CODEUNIT *)_PyFrame_GetCode(frame)->co_code_adaptive) + target;
stack_pointer += -oparg;
GOTO_UNWIND();
break;

View file

@ -978,6 +978,7 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length)
current_error_target = target;
make_exit(&buffer[next_spare], _ERROR_POP_N, 0);
buffer[next_spare].oparg = popped;
buffer[next_spare].operand = target;
next_spare++;
}
buffer[i].error_target = current_error;

View file

@ -554,9 +554,6 @@ remove_unneeded_uops(_PyUOpInstruction *buffer, int buffer_size)
needs_ip = true;
may_have_escaped = true;
}
if (_PyUop_Flags[opcode] & HAS_ERROR_FLAG) {
needs_ip = true;
}
if (needs_ip && last_set_ip >= 0) {
if (buffer[last_set_ip].opcode == _CHECK_VALIDITY) {
buffer[last_set_ip].opcode = _CHECK_VALIDITY_AND_SET_IP;