]> Cypherpunks repositories - gostls13.git/commit
cmd/link: allow deriving GNU build ID from Go build ID ID
authorPatrick Steinhardt <ps@pks.im>
Sat, 16 Sep 2023 11:12:12 +0000 (11:12 +0000)
committerCherry Mui <cherryyz@google.com>
Mon, 18 Sep 2023 16:34:01 +0000 (16:34 +0000)
commit089cc6867619da6d6a901b3835475206759c47a2
treec7dbcfbf7feee918997a1c9bfd22fbf28cac47c2
parentd516aa6bdceb4d0a0bf4f714ef4a432a3896c6d7
cmd/link: allow deriving GNU build ID from Go build ID ID

While it is possible to embed a GNU build ID into the linked
executable by passing `-B 0xBUILDID` to the linker, the build ID will
need to be precomputed by the build system somehow. This makes it
unnecessarily complex to generate a deterministic build ID as it
either requires the build system to hash all inputs manually or to
build the binary twice, once to compute its hash and once with the GNU
build ID derived from that hash. Despite being complex, it is also
inefficient as it requires the build system to duplicate some of the
work that the Go linker already performs anyway.

Introduce a new argument "gobuildid" that can be passed to `-B` that
causes the linker to automatically derive the GNU build ID from the Go
build ID. Given that the Go build ID is deterministically computed
from all of its inputs, the resulting GNU build ID should be
deterministic in the same way, which is the desired behaviour.

Furthermore, given that the `-B` flag currently requires a "0x" prefix
for all values passed to it, using "gobuildid" as value is a backwards
compatible change.

An alternative would be to unconditionally calculate the GNU build ID
unless otherwise specified. This would require some larger rework
though because building the Go toolchain would not converge anymore
due the GNU build ID changing on every stage, which in turn would
cause the Go build ID to change as well.

Fixes #41004

Change-Id: I707c5fc321749c00761643d6cc79d44bf2cd744d
GitHub-Last-Rev: 5483305a8566937836e5f39149a3df805d94580b
GitHub-Pull-Request: golang/go#61469
Reviewed-on: https://go-review.googlesource.com/c/go/+/511475
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
src/cmd/link/doc.go
src/cmd/link/elf_test.go
src/cmd/link/internal/ld/elf.go
src/cmd/link/internal/ld/main.go