Skip to content

libSceAmpr: _Cnd_signal and _Cnd_init_with_name are stubs after #3079; fix branch ready #3342

Closed

Description

@screamm

_Cnd_signal and _Cnd_init_with_name (libSceAmpr, Export.cpp) are NotImplemented_nid_no_patch stubs now that #3079 gave libc the Dinkumware _Cnd_* family. Deathloop (PPSA01670), Minecraft Legends and GTA III Definitive Edition import them.

Fix branch ready: screamm:feat/ampr-cnd-signal (e21484de, one commit on main a4b0b16b). I cannot open it as a PR because of the intake check; anyone eligible is welcome to carry it, keeping the commit as is.

  • _Cnd_signal(pthread_cond**) uses the pointer-to-slot ABI the feat(libc): implement Dinkumware mutex and condition exports #3079 review established and a new libc helper SignalCondition_nid_no_patch (in Threads.cpp) that wakes one waiter of the condition objects libc's _Cnd_init creates and returns _Thrd_success, like the merged _Cnd_broadcast; bad handles throw the same invalid_argument as libc. _Cnd_init_with_name(pthread_cond**, const char*) calls libc's _Cnd_init and ignores the name, following fpPS4's reverse-engineered PS4 _Mtx_init_with_name where the name only names the pthread object. _Thrd_id keeps throwing: no public source settles the PS5 return form. All recorded in TechnicalDebt.
  • guest_ampr_threads gains a waiter woken by signal on a named condition, two waiters where one signal wakes exactly one, signal with no waiters, a null name, a plain _Cnd_init handle, interop with libc _Cnd_broadcast/_Cnd_destroy, and the error cases.

Tested on Windows 11 Pro 26220, WinLibs MinGW-w64 GCC 15.2.0 r7, Ninja, Release, BUILD_TESTING=ON, full build including libs: guest_ampr_threads and guest_libc_threads 3/3; ctest -j8 -E "^agc_driver_|^video_out_flip" 507/507 (with the #3329 test fix applied locally so the tree builds); with main's Export.cpp the extended Ampr test fails; tools/check_conventions.py --base main and git diff --check pass. Not run on Linux. The "wakes exactly one" check uses a 50 ms window and would misfire only on a spurious host wakeup.

Written with Claude Code assistance (implementation by a subagent, reviewed and validated in this session).

Activity

  1. blawesom commented on Oct 11, 2026

    @blawesom
    Contributor

    Independent verification on Linux (the gap noted in the report): CachyOS, kernel 7.2.9, GCC 16.2.1, Ninja, Release, BUILD_TESTING=ON.

    • Rebased e21484de onto current main (the branch was 150+ commits behind): the commit applies cleanly, no conflicts.
    • tools/check_conventions.py --base origin/main and git diff --check pass.
    • guest_ampr_threads and guest_libc_threads pass (the 50 ms "wakes exactly one" window held).
    • Full suite mirroring the Windows run (ctest -j8 -E "^agc_driver_|^video_out_flip"): 520/520 passed.

    The rebased branch is available at blawesom:verify/3342 for anyone carrying — the commit is otherwise unchanged.

  2. MarcZX10 commented on Oct 11, 2026

    @MarcZX10
    Contributor

    I carried David’s implementation from #3499 into a current-main branch with his commit authorship preserved, then added bounded waiter setup (5 seconds) and a 20-second CTest timeout. The focused Linux/GCC 12.2 Release test passes 3/3. The #3657 PR had already been closed as a duplicate; GitHub will not reopen it after its branch was force-pushed, so I have not opened a replacement while #3499 remains open. I asked #3499’s author whether they would prefer the consolidated branch as the review target; otherwise the timeout change can be cherry-picked into #3499. The Windows/full-suite evidence in this issue remains attributed to its reporters.

  3. oneandonlydean commented on Oct 11, 2026

    @oneandonlydean
    Collaborator

    Closing: fixed by #3499.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions