Open hdonnay opened 4 months ago
I'm not sure who the right owner of this is. I see mainly Go command people have edited this package, so I'm directing to y'all. Please feel free to update the issue if I'm wrong.
CC @matloob @samthanawalla
I'm not opposed to this. I think it would require going through the proposal process because it's an API change to the standard library
@hdonnay do you want to turn this into a proposal issue?
Yeah, I'll attempt it when I get some time.
Go version
go1.23-9b43bfbc51
Output of
go env
in your module/workspace:What did you do?
Resorted to
//go:linkname
tricks to get at this value. (link)What did you see happen?
N/A
What did you expect to see?
Without exporting
buildinfo.errNotGoExe
, a user must effectively re-implement thedebug/buildinfo
package to determine if an executable is a Go executable and if so, read data to hand toruntime/debug.ParseBuildInfo
. If the user doesn't want to copy the logic that decodes the.go.buildinfo
(or equivalent) section, the executable ends up needing to be parsed twice to check for the section and magic string.[^1] Additionally, a user would be unable to use theinternal/saferio
helper.Returning an exported error (or an error that evaluates correctly to a sentinel error with
errors.Is
) allows a caller to distinguish between a file that should have valid build info (!errors.Is(err, buildinfo.errNotGoExe)
) and a file that's not expected to (errors.Is(err, buildinfo.errNotGoExe)
) when the process can't "know" that a-priori.[^1]: Because sections may be compressed, something like a bitstring search over the file isn't a reliable rule-in/rule-out criteria. To look for a Go-specific section (like
.go.buildinfo
or.note.go.buildid
in the case of ELF) requires parsing the binary and throwing that work away to havedebug/buildinfo
parse it again.