[3.14] gh-141579: Fix perf_jit backend in sys.activate_stack_trampoline() (GH-141580) (#141581)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
This commit is contained in:
Miss Islington (bot) 2025-11-15 03:49:54 +01:00 committed by GitHub
parent d582b6f1ab
commit 17e7aad5e3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 28 additions and 8 deletions

View file

@ -231,6 +231,24 @@ class TestPerfTrampoline(unittest.TestCase):
"""
assert_python_ok("-c", code, PYTHON_JIT="0")
def test_sys_api_perf_jit_backend(self):
code = """if 1:
import sys
sys.activate_stack_trampoline("perf_jit")
assert sys.is_stack_trampoline_active() is True
sys.deactivate_stack_trampoline()
assert sys.is_stack_trampoline_active() is False
"""
assert_python_ok("-c", code, PYTHON_JIT="0")
def test_sys_api_with_existing_perf_jit_trampoline(self):
code = """if 1:
import sys
sys.activate_stack_trampoline("perf_jit")
sys.activate_stack_trampoline("perf_jit")
"""
assert_python_ok("-c", code, PYTHON_JIT="0")
def is_unwinding_reliable_with_frame_pointers():
cflags = sysconfig.get_config_var("PY_CORE_CFLAGS")

View file

@ -0,0 +1,2 @@
Fix :func:`sys.activate_stack_trampoline` to properly support the
``perf_jit`` backend. Patch by Pablo Galindo.

View file

@ -2373,14 +2373,14 @@ sys_activate_stack_trampoline_impl(PyObject *module, const char *backend)
return NULL;
}
}
else if (strcmp(backend, "perf_jit") == 0) {
_PyPerf_Callbacks cur_cb;
_PyPerfTrampoline_GetCallbacks(&cur_cb);
if (cur_cb.write_state != _Py_perfmap_jit_callbacks.write_state) {
if (_PyPerfTrampoline_SetCallbacks(&_Py_perfmap_jit_callbacks) < 0 ) {
PyErr_SetString(PyExc_ValueError, "can't activate perf jit trampoline");
return NULL;
}
}
else if (strcmp(backend, "perf_jit") == 0) {
_PyPerf_Callbacks cur_cb;
_PyPerfTrampoline_GetCallbacks(&cur_cb);
if (cur_cb.write_state != _Py_perfmap_jit_callbacks.write_state) {
if (_PyPerfTrampoline_SetCallbacks(&_Py_perfmap_jit_callbacks) < 0 ) {
PyErr_SetString(PyExc_ValueError, "can't activate perf jit trampoline");
return NULL;
}
}
}