Skip to content

Complete evidence-backed semaphore and pthread utility surface #43

Description

@millesant

Status: Verification

Parent: #37
Depends on: #38 and #41 (both satisfied).

Goal

Fill gaps in the common pthread/semaphore utility surface only where supplied ARM32 libraries or integration evidence require them, without turning the project into a blanket POSIX implementation.

Candidate APIs

Prioritize by observed imports/machine code before implementation:

  • sem_trywait, sem_getvalue, sem_timedwait;
  • mutex timed lock;
  • additional pthread attr getters/setters;
  • pthread_getattr_np-style queries if proven;
  • thread naming/scheduling helpers only if libraries require them.

Rules

  • Reuse existing semaphore/mutex/logical-thread state.
  • Timed functions use the accepted clock/deadline seam.
  • Query APIs return synthetic logical state, not host pthread internals.
  • Unsupported scheduling knobs may return verified Android errors rather than silently faking success when that is semantically safer.
  • Each added symbol must have evidence and bounded failure behavior.

Acceptance criteria

  • Maintain an evidence table in the issue/architecture docs mapping each implemented symbol to supplied binary or reproducible fixture evidence.
  • No duplicate synchronization state models.
  • Exact Android return/error behavior is documented for accepted calls.
  • Partial libc shim exports increase only for accepted symbols.
  • Existing 45-export pthread/libc fixture remains backward compatible.

Validation

Focused tests per accepted API, real ARM32 relocation/wrapper integration, and exact-head CI.

Evidence — supplied artifacts (2026-10-02)

  • ARM32 FMOD libfmod.so (sha256 982e994c46a7f797fbd6e10df31a98d544c2bf117fe33c2292f4d6cc454a6544) adds no utility imports beyond the already accepted lifecycle/mutex surface.
  • VLC APK VLC-Android-3.7.2-Beta-2-all-20260925-0117.apk (sha256 10da537a545d5c9aa111571bbab3d1aae4204d2c4a0d4a4cdc22efab6d71cbe5), scanning every lib/armeabi-v7a/*.so, finds new utility imports only in ARM32 libvlc.so: pthread_attr_getstacksize (already implemented), pthread_setname_np, pthread_setschedparam, and pthread_getschedparam.
  • Supplied libemu32.so is AArch64, not AArch32 (sha256 a467c34bc1543a2a193191ad42c4ac3a8e4a00181e83fa223abf7d42bc421119). Its sem_trywait, sem_getvalue, and pthread_attr_setschedparam imports do not justify expanding the AArch32 shim.
  • No supplied ARM32 artifact evidence was found for sem_trywait, sem_getvalue, sem_timedwait, pthread_mutex_timedlock, pthread_attr_setschedparam, or pthread_getattr_np; keep those out of this implementation slice.

Non-goals

Implementing every pthread/sem extension merely because Bionic exports it.

Activity

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