1
0
mirror of https://github.com/golang/go synced 2024-11-07 13:36:19 -07:00

cmd/cgo: include seed string with -frandom-seed for lto

cgo is built with -flto the symbols in runtime/cgo is going to include random numbers which would make builds unreproducible.

Settings -frandom-seeds ensures this is consistent across builds, and to ensure we always use a reproducible seed across builds we use the actionID as the seed string.

runtime/cgo built with "-frandom-seed=OFEc9OKoUMJwh3-5yFCH" would output the following:

    $ strings --all --bytes=8 $WORK/b055/_pkg_.a | grep "gnu.lto_.profile"
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797
    .gnu.lto_.profile.8403a797

Change-Id: I3c2d261a94f23c8227a922da9a7f81660905fd71
GitHub-Last-Rev: cec5162316
GitHub-Pull-Request: golang/go#58561
Reviewed-on: https://go-review.googlesource.com/c/go/+/468835
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Bryan Mills <bcmills@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
This commit is contained in:
Morten Linderud 2023-02-16 14:37:50 +00:00 committed by Gopher Robot
parent 990501e725
commit 37e893b1bd

View File

@ -39,6 +39,7 @@ import (
"cmd/go/internal/slices"
"cmd/go/internal/str"
"cmd/go/internal/trace"
"cmd/internal/buildid"
"cmd/internal/quoted"
"cmd/internal/sys"
)
@ -2544,6 +2545,12 @@ func (b *Builder) ccompile(a *Action, p *load.Package, outfile string, flags []s
}
}
// Tell gcc to not insert truly random numbers into the build process
// this ensures LTO won't create random numbers for symbols.
if b.gccSupportsFlag(compiler, "-frandom-seed=1") {
flags = append(flags, "-frandom-seed="+buildid.HashToString(a.actionID))
}
overlayPath := file
if p, ok := a.nonGoOverlay[overlayPath]; ok {
overlayPath = p