diff options
| author | Morten Linderud <morten@linderud.pw> | 2023-02-16 14:37:50 +0000 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2023-02-17 20:39:34 +0000 |
| commit | 37e893b1bd7bb57b169224486e1f3f5eef264340 (patch) | |
| tree | c4daeb193191c065d4521a50b06d60fdd8cdbb27 /src/cmd | |
| parent | 990501e725cebcd7c1d6e01013db312198d2babc (diff) | |
| download | go-37e893b1bd7bb57b169224486e1f3f5eef264340.tar.xz | |
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: cec5162316d33d8f652948706ce0a5f8c6794a6e
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>
Diffstat (limited to 'src/cmd')
| -rw-r--r-- | src/cmd/go/internal/work/exec.go | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go index b211680e1c..9c8b14df00 100644 --- a/src/cmd/go/internal/work/exec.go +++ b/src/cmd/go/internal/work/exec.go @@ -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 |
