mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-21 08:12:09 -05:00
APS5_SAMPLE_WORKER=<file> now also writes <file stem>.collapsed.txt: one "frame;...;frame count" line per distinct stack of queue worker 0, root first, frames as module+0xRVA, which speedscope.app and flamegraph.pl open. Walks go up to 64 frames, and nothing allocates while the worker is suspended. The libraries are built with -fno-asynchronous-unwind-tables, so most of their functions have no .pdata entry, only a DWARF record in .ehfram, and a walk ended at the first such frame. The worker's walk now steps those frames through their record, with the CIE/FDE decoding and the call frame instructions of libc's unwinder, which move from Unwind.cpp into its header unchanged. A module is indexed after the worker resumes, the first time a walk meets it, and every register the step restores is read inside the worker's stack. The process sampler (APS5_SAMPLE_THREADS) keeps its 12 frames through .pdata. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>