Page MenuHomeFreeBSD

sockstat: Fix build reproducibility
ClosedPublic

Authored by cperciva on Oct 10 2025, 8:25 PM.
Tags
None
Referenced Files
Unknown Object (File)
Dec 16 2025, 7:57 AM
Unknown Object (File)
Dec 1 2025, 8:01 AM
Unknown Object (File)
Nov 29 2025, 7:13 PM
Unknown Object (File)
Nov 28 2025, 7:17 AM
Unknown Object (File)
Nov 26 2025, 9:29 AM
Unknown Object (File)
Nov 25 2025, 1:08 PM
Unknown Object (File)
Nov 21 2025, 5:49 PM
Unknown Object (File)
Nov 15 2025, 8:37 PM
Subscribers

Details

Summary
Both usr.bin/sockstat and usr.bin/sockstat/tests build the file
src/usr.bin/sockstat/sockstat.c.  Unfortunately, they place the
resulting object file in the same place, but produce different
files due to paths appearing in the .debug files; this results
in different binaries depending on how the race between the two
builds ends.

Use .PATH to tell make to find sockstat.c in the parent directory
but place the object file in the current object directory, rather
than placing '..' into the name of the source file.

Suggested by:   bdrewery, emaste, jrtc27
MFC after:      5 minutes (15.0 build fix)
Sponsored by:   https://www.patreon.com/cperciva
Differential Revision:  https://reviews.freebsd.org/D53032

Diff Detail

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

Event Timeline

bdrewery added inline comments.
usr.bin/sockstat/tests/Makefile
2–3

Try just .PATH: ${.CURDIR:H} (which is .PATH: ${.CURDIR}/... It should keep 1 copy of the source file but have per-dir object files.

usr.bin/sockstat/tests/Makefile
2–3

To be clear, keep your patch as-is except remove the cp target. Add .PATH line anywhere.

usr.bin/sockstat/tests/Makefile
3

My example had some unintended excess spaces after .PATH:. Is your spacing intended?

usr.bin/sockstat/tests/Makefile
3

It's a single tab character, phabricator just mangles it.

This revision is now accepted and ready to land.Oct 10 2025, 8:49 PM