Skip to content

austin-dist: Add version 4.0.0 - #2148

Merged
luhenry merged 1 commit into
mainfrom
austin-dist
Sep 21, 2026
Merged

luhenry merged 1 commit into
mainfrom
austin-dist

Conversation

@luhenry

@luhenry luhenry commented Sep 21, 2026

Copy link
Copy Markdown
Member

Compiles austin, the C frame-stack sampling profiler for CPython, and packs the binary into the wheel with upstream's own scripts/build-wheel.py. Upstream publishes no riscv64 wheel.

Mirrors upstream's release_arch.yml and tests.yml.

Differs from upstream

  • Ships austin alone, as the musllinux wheels do - austinp segfaults while sampling on riscv64
  • No musllinux wheel - it needs a second image and upstream tests the musl binary nowhere

Matrix: one interpreter-agnostic wheel, tested on 3.12, 3.13 and 3.14 - upstream's 3.9-3.14 narrowed to this registry's interpreters.

Testing

  • upstream's functional and integrity suites against the wheel's own binary, unprivileged and as root
  • test_where_multiprocess deselected - upstream marks it flaky and its single-snapshot race is lost here
  • test/cunit left out - it compiles the C sources instead of exercising the wheel

License: Wheel ships a GPL-3.0-or-later binary, and upstream's wheels carry no licence text, so the build adds it.

austinp: two crashes, from core dumps of an unstripped build. mojo_event_handler__handle_new_frame (events.c:83) reads frame->scope->key through the UNKNOWN_SCOPE sentinel - an upstream bug whose fix took the suite from 34 to 36 passes - and _Uelf64_lookup_symbol_from_dynamic faults inside libunwind's own riscv64 symbol lookup.

Patches

  • 0001-build-wheel-add-a-riscv64-Linux-wheel-platform.patch - To upstream. The wheel platform table has no riscv64 entry.
  • 0002-build-wheel-ship-the-licence-files-in-the-wheel.patch - To upstream. The wheels carry no copy of the GPL.
  • 0003-test-tolerate-a-host-with-no-var-log-syslog.patch - To upstream. The suite opens /var/log/syslog after every austin call; journald-only hosts have none. Not riscv64-specific.

Built on cp312; 34 passed unprivileged, 42 as root.

luhenry added a commit that referenced this pull request Sep 21, 2026
Wheel is two compiled riscv64 C binaries packed by upstream's own
scripts/build-wheel.py; local QEMU rehearsal in the manylinux image produced an
836 KB wheel whose installed austin/austinp both run.
@github-actions

github-actions Bot commented Sep 21, 2026

Copy link
Copy Markdown
Contributor
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-09-21 11:27 UTC

luhenry added a commit that referenced this pull request Sep 21, 2026
All three interpreter legs pass upstream's functional and integrity suites
against the wheel's own binary (34 unprivileged, 42 as root) and the publish
dry-run is clean. The wheel ships austin alone; austinp's two riscv64 segfaults
are recorded on the PR and in the version's warning.
Builds austin, the C frame-stack sampling profiler for CPython, from the v4.0.0
tag in the manylinux riscv64 image and packs the binary into the wheel with
upstream's own scripts/build-wheel.py, the way release_arch.yml does for
aarch64, armv7 and ppc64le. The sampler reads its target through ptrace and
/proc/<pid>/mem and has no architecture-specific register or unwinder code of
its own, so nothing in it needed porting.

The wheel carries austin alone, which is the shape of upstream's own musllinux
wheels. austinp, the variant that also unwinds native stacks with libunwind,
segfaults on riscv64 in two independent places, both read from core dumps of an
unstripped build on the runner: events.c:83 dereferences UNKNOWN_SCOPE, the
(cached_string_t*)1 sentinel austin stores when libunwind cannot name a frame -
a latent upstream bug - and libunwind's own _Uelf64_lookup_symbol_from_dynamic
faults under _Uriscv_get_proc_name. Leaving austinp out also removes every
dependency it needed, so the build installs nothing beyond autoconf and
automake.

Three patches, none riscv64-specific except the first: the wheel platform table
has no riscv64 entry, the wheels ship no copy of the GPL for the binary they
carry, and the test suite opens /var/log/syslog after every austin call, which
a journald-only host does not have.

Upstream's functional and integrity suites run against the binary the wheel
installs, unprivileged and as root, on each of 3.12, 3.13 and 3.14.
test_where_multiprocess is deselected: upstream marks it flaky and its
single-snapshot race is lost on these runners.
@luhenry
luhenry marked this pull request as ready for review September 21, 2026 10:29
@luhenry
luhenry merged commit 682e72c into main Sep 21, 2026
13 checks passed
@luhenry
luhenry deleted the austin-dist branch September 21, 2026 11:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant