SFrame: The Simple Frame Stack Trace Format
summary
A new on-disk unwind format encodes only the minimal fields CFA, FP, RA so a tracer reads .sframe, binary-searches fixed-length FDEs, then decodes variable-length FRE rows to get CFA/RA/FP offsets and iterate return addresses; support lands in Binutils 2.40 with a libsfame API, x86_64 and AArch64 support (PLT entries and pointer‑auth handled), typical .sframe size is ~80% of .eh_frame in tested binaries, and a kernel POC proves the approach viable though some issues remain.
AI-written summary · about
chapters (23)
- 0:00SFrame introduction
- 1:03Stack traces and use cases
- 2:48Frame pointer method
- 4:34EH frame challenges
- 7:03Custom stack formats
- 9:11Fast low-overhead tracing
- 9:52SFrame format explained
- 12:41SFrame section layout
- 14:27Function descriptor entries
- 15:28Frame row entries
- 16:30Why SFrame works
- 20:49SFrame with libsframe
- 23:17Stack walking with SFrame
- 24:19SFrame limitations
- 26:44SFrame applications
- 27:38Q&A: SFrame today
- 28:49Q&A: Multi-threaded tracing
- 29:51Q&A: Async stack tracing
- 31:43Q&A: Format comparison
- 33:39Q&A: Tracing tools
- 34:43Q&A: Architecture support
- 38:20Q&A: SFrame vs ORC
- 40:49Summary
related talks
23mCTF Frame in the Linux kernel
32mRISC-V ftrace: working with preemption
19meBPF User Stack Trace Issue and Solutions
35mRethinking Linux tools with Compact Debuginfo Formats
37mThe BTF file format, more than just debugging
23mMeet FRED: The Future Face of X86 Event Processing
41mLinux Tracing Techniques
48mGraphics Performance Analysis with FrameRetrace: A Responsive UI for ApiTrace
