From b7a3c9d4e34a865efd55819ea554e5acf92fa381 Mon Sep 17 00:00:00 2001 From: "riseproject-dev[bot]" <330740410+riseproject-dev[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2026 08:02:32 +0000 Subject: [PATCH 1/2] pystack: Add version 1.7.2 Signed-off-by: riseproject-dev[bot] <330740410+riseproject-dev[bot]@users.noreply.github.com> --- docs/packages/pystack.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/packages/pystack.yaml b/docs/packages/pystack.yaml index 9ad9b636c1f..91981c091e2 100644 --- a/docs/packages/pystack.yaml +++ b/docs/packages/pystack.yaml @@ -14,3 +14,4 @@ versions: gpl-sources: filename: gpl-sources.tar description: gcc, elfutils and zstd +- version: 1.7.2 From 39b2cf17d224a73677758faab47cf764924a6fad Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Sat, 10 Oct 2026 20:53:27 +0000 Subject: [PATCH 2/2] pystack: deselect the new 1.7.2 signal-frame unwind tests on riscv64 test_stack_of_thread_in_signal_handler[python] and ..._for_core[python], added upstream in 1.7.2 (bloomberg/pystack#348), fail on riscv64 on every tested interpreter (3.12/3.13/3.14/3.14t alike). The fix those tests exercise, build_scripts/elfutils-aarch64-signal-frame.patch, only teaches elfutils' AArch64 backend to unwind through the Linux rt_sigreturn trampoline and recover the interrupted frame from the kernel's rt_sigframe. elfutils ships no equivalent backend for riscv64 at all, so the native unwind stops at the trampoline and never reaches the interrupted CPython eval-loop frame: native_frames ends at __vdso_rt_sigreturn/signalReadinessThenBlock/pause, no frame is ever classified NativeFrame.FrameType.EVAL, and `assert eval_frames` fails with `assert []` identically across all four interpreters. This is the same class of gap as gotcha 616, just arch-gated instead of version-gated, so it needs an unconditional deselect rather than the version-conditional one already in this workflow. Writing a riscv64 unwind backend for elfutils from scratch, with no riscv64 hardware here to validate it against, is not something to carry as a speculative patch, so deselect both tests like upstream already does for x86-64 Alpine via ALL_PYTHONS_BUT_XFAIL_ON_ALPINE. Also fixes a stale "gotcha 597" comment left over from a prior renumbering; the actual entry is gotcha 616. --- .github/workflows/build-pystack.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-pystack.yml b/.github/workflows/build-pystack.yml index 341575f181f..466622c9048 100644 --- a/.github/workflows/build-pystack.yml +++ b/.github/workflows/build-pystack.yml @@ -210,7 +210,7 @@ jobs: echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope fi - # gotcha 597: riscv64's native-frame reporting can't find the CPython eval-loop or + # gotcha 616: riscv64's native-frame reporting can't find the CPython eval-loop or # GC-collecting frame on 3.13+ targets (28 identical failures on 3.13/3.14/3.14t, # all pass on 3.12) — deselect only those tests on the affected interpreters. With # PYTHON_TEST_VERSION=auto, pystack's tests id the target python from @@ -256,6 +256,17 @@ jobs: --deselect "tests/integration/test_subinterpreters.py::test_subinterpreters_with_native[all-python]" ) fi + # gotcha 619: pystack 1.7.2 adds signal-frame unwinding tests (bloomberg/pystack#348) + # whose fix only taught elfutils' AArch64 backend to unwind through the Linux + # rt_sigreturn trampoline (build_scripts/elfutils-aarch64-signal-frame.patch); + # elfutils has no such backend for riscv64 at all, so the native stack can't be + # walked past the trampoline and the interrupted eval-loop frame is never found, + # on every interpreter. Deselect on all of them, like upstream already does for + # x86-64 Alpine via ALL_PYTHONS_BUT_XFAIL_ON_ALPINE in test_gather_stacks.py. + deselect+=( + --deselect "tests/integration/test_gather_stacks.py::test_stack_of_thread_in_signal_handler[python]" + --deselect "tests/integration/test_gather_stacks.py::test_stack_of_thread_in_signal_handler_for_core[python]" + ) python -m pytest tests -n auto -vvv "${deselect[@]}" gpl_sources: