WARNING::BUILDID(7stap)
π WARNING::BUILDID π
okay so bestie, welcome to warning::buildid β the page about build-id verification failures π
. It lives in the 7stap manual (systemtap girlies rise up π«Ά), and it's basically the group chat where systemtap tells you "heyβ¦ this binary is not the one I thought it was."
β¨ DESCRIPTION β¨
So here's the tea β: systemtap's script translation / execution stages can happen at different times and different places. Like, translate here, run there, whenever, wherever β main character energy but make it distributed π. Because of that, sometimes it has to verify certain invariants. And one of those invariants is: if a script was informed by translate-time analysis of executables, then those same executables need to be used at run time. No substitutions, no swapsies, periodt β.
How does it check? Based on the build-id β a binary hash that modern (post-2007) compilers/toolchains add as an NT_GNU_BUILD_ID ELF note to object files and executables π. If you're curious (and honestly, iconic of you), use the readelf -n command to examine the build-ids of binaries. Go look, bestie, they're right there π.
Not every script cares, though. Only scripts are sensitive to executables' build-ids β generally those that perform deep analysis of the binaries or their debuginfo. For example:
- scripts that place
.functionor.statementprobes πΈ - scripts that use stack backtrace-related tapset functions
those ones may be sensitive. Other scripts that rely only on process.mark or kernel.trace probes do not require debuginfo, so they're just chilling π. See the DWARF DEBUGINFO section in the stapprobes(3stap) man page for the full lore.
π§ what actually happens under the hood
During translation, systemtap saves a copy of the relevant files' build-ids within the compiled modules πΎ. Then at run-time, the modules compare the saved ones to the actual run-time build-ids in memory. If the warning message pops up, that means they did not match π β so the module will decline placing a probe that was computed based upon obsolete data.
And that's actually a good thing!! Because placing them at an inappropriate address could crash the programs π. Safety first, always.
But ngl, it's not necessarily a fatal error β because probes unrelated to the mismatching binaries may still operate just fine. So it's giving "partial slay, partial oops" π.
π₯ why would this even happen
A build-id mismatch could be caused by a few different situations. The main one is when the executable versions or architecture were different between the systemtap translation and execution times/places π. Like:
- one may run a
stap-serveron a slightly different version of the OS distribution π¦ - someone may have rebuilt a new kernel image, but preserved the previous version numbers (sneaky!!)
- the kernel running on the workstation may be slightly different from the version being targeted β perhaps due to a pending kernel upgrade leaving different files on disk versus running in memory πΈ
- if your OS distribution uses separate debuginfo packages, the split
.debugfiles may not exactly match the main binaries π
π how to make it stop
To disable build-id verification warnings β if one is confident that they are an artefact of build accidents rather than a real mismatch β one might try the -DSTP_NO_BUILDID_CHECK option β¨.
fr fr though: only do that if you're sure it's just build chaos and not a real mismatch, bestie. Confidence required π.
π SEE ALSO π
http://fedoraproject.org/wiki/Releases/FeatureBuildIdstap(1)stapprobes(3stap)warning::debuginfo(7stap)error::reporting(7stap)
okay that's the whole page, you ate that reading it πβ¨ this was WARNING::BUILDID(7stap) from the 7stap manual section, so go forth and go be iconic with your build-ids ππ¦π
π¦ where this page comes from
- arch rolling: systemtap 5.6-1 Β· GPL-2.0-or-later
- centos-stream 10: systemtap-client 5.6-3.el10 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND GFDL-1.2-or-later AND BSD-2-Clause
- centos-stream 10: systemtap-devel 5.6-3.el10 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- centos-stream 10: systemtap-runtime 5.6-3.el10 Β· GPL-2.0-or-later
- centos-stream 10: systemtap-server 5.6-3.el10 Β· GPL-2.0-or-later
- centos-stream 9: systemtap-client 5.6-3.el9 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND GFDL-1.2-or-later AND BSD-2-Clause
- centos-stream 9: systemtap-devel 5.6-3.el9 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- centos-stream 9: systemtap-devel 5.6-3.el9 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- centos-stream 9: systemtap-runtime 5.6-3.el9 Β· GPL-2.0-or-later
- centos-stream 9: systemtap-server 5.6-3.el9 Β· GPL-2.0-or-later
- debian bookworm: systemtap-doc 4.8-2
- debian trixie: systemtap-doc 5.1-5
- fedora 43: systemtap-client 5.3-4.fc43 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND GFDL-1.2-or-later AND BSD-2-Clause
- fedora 43: systemtap-client 5.6-1.fc43 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND GFDL-1.2-or-later AND BSD-2-Clause
- fedora 43: systemtap-devel 5.3-4.fc43 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- fedora 43: systemtap-devel 5.3-4.fc43 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- fedora 43: systemtap-devel 5.6-1.fc43 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- fedora 43: systemtap-devel 5.6-1.fc43 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- fedora 43: systemtap-runtime 5.3-4.fc43 Β· GPL-2.0-or-later
- fedora 43: systemtap-runtime 5.6-1.fc43 Β· GPL-2.0-or-later
- fedora 43: systemtap-server 5.3-4.fc43 Β· GPL-2.0-or-later
- fedora 43: systemtap-server 5.6-1.fc43 Β· GPL-2.0-or-later
- fedora 44: systemtap-client 5.4-3.fc44 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND GFDL-1.2-or-later AND BSD-2-Clause
- fedora 44: systemtap-client 5.6-1.fc44 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND GFDL-1.2-or-later AND BSD-2-Clause
- fedora 44: systemtap-devel 5.4-3.fc44 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- fedora 44: systemtap-devel 5.4-3.fc44 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- fedora 44: systemtap-devel 5.6-1.fc44 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- fedora 44: systemtap-devel 5.6-1.fc44 Β· GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause
- fedora 44: systemtap-runtime 5.4-3.fc44 Β· GPL-2.0-or-later
- fedora 44: systemtap-runtime 5.6-1.fc44 Β· GPL-2.0-or-later
- fedora 44: systemtap-server 5.4-3.fc44 Β· GPL-2.0-or-later
- fedora 44: systemtap-server 5.6-1.fc44 Β· GPL-2.0-or-later
- nixos 26.05: systemtap 5.4
- nixpkgs unstable: systemtap 5.5
- opensuse-leap 16.0: systemtap 5.2-160000.2.2 Β· GPL-2.0-or-later
- opensuse-leap 16.0: systemtap 5.2-160000.2.2 Β· GPL-2.0-or-later
- opensuse-leap 16.0: systemtap 5.2-160000.2.2 Β· GPL-2.0-or-later
- opensuse-leap 16.0: systemtap 5.2-160000.2.2 Β· GPL-2.0-or-later
- ubuntu jammy: systemtap-doc 4.6-2
- ubuntu noble: systemtap-doc 5.0-2ubuntu1
- ubuntu questing: systemtap-doc 5.1-5
- ubuntu resolute: systemtap-doc 5.3-2
- ubuntu stonking: systemtap-doc 5.5-1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms