Page MenuHomeFreeBSD

hwpmc(4): stop overwalking past _start on amd64 user callchains
ClosedPublic

Authored by nickbanks_netflix.com on Aug 27 2026, 7:32 PM.
Tags
None
Referenced Files
Unknown Object (File)
Wed, Oct 14, 6:29 AM
Unknown Object (File)
Sat, Oct 10, 7:00 AM
Unknown Object (File)
Tue, Oct 6, 8:44 PM
Unknown Object (File)
Tue, Oct 6, 3:08 PM
Unknown Object (File)
Mon, Oct 5, 8:59 AM
Unknown Object (File)
Thu, Oct 1, 11:38 AM
Unknown Object (File)
Mon, Sep 28, 12:08 PM
Unknown Object (File)
Sat, Sep 26, 8:41 AM
Subscribers

Details

Summary

pmc_save_user_callchain() emits the pc it just loaded before checking
whether fp is the ABI's zero frame-chain terminator. At the bottom of
a well-formed chain under _start, fp comes back 0 as expected, but the
paired pc is stale rtld data left on the stack -- a legal userspace VA
that still passes PMC_IN_USERSPACE(), so it gets emitted as a bogus
extra frame. This shows up in flame graphs as a spurious hex-valued
root frame below _start.

Check fp == 0 alongside the existing checks before emitting, matching
how arm/arm64/powerpc already load the next fp before their check.

Measured via 1kHz hwpmc sampling on an OCA: stacks with any unresolved
hex frame drop from 23.9% to 1.3%, and stacks with hex at the root drop
from 5.5% to 0.3%.

Sponsored by: Netflix

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable