From 43d25a61c16bfe263c61d36237ee1b51a545b8cf Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Wed, 30 Oct 2019 18:07:55 -0400 Subject: [PATCH] [dev.link] cmd/link: ensure deterministic order in dynexp dynexp is used for generating the dynamic symbol table. It is created from a map. Sort it to ensure deterministic order. Should fix solaris build. Change-Id: I561b9da3a4136a7ea41139073f76c98fb069d4fa Reviewed-on: https://go-review.googlesource.com/c/go/+/204378 Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot Reviewed-by: Than McIntosh --- src/cmd/link/internal/ld/lib.go | 2 ++ src/cmd/link/internal/ld/util.go | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index 4017ea1c79c..1cbfc10ab05 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -58,6 +58,7 @@ import ( "os/exec" "path/filepath" "runtime" + "sort" "strings" "sync" ) @@ -540,6 +541,7 @@ func setupdynexp(ctxt *Link) { s := ctxt.Syms.Lookup(exp, 0) dynexp = append(dynexp, s) } + sort.Sort(byName(dynexp)) // Resolve ABI aliases in the list of cgo-exported functions. // This is necessary because we load the ABI0 symbol for all diff --git a/src/cmd/link/internal/ld/util.go b/src/cmd/link/internal/ld/util.go index b5b02296a14..488386fec21 100644 --- a/src/cmd/link/internal/ld/util.go +++ b/src/cmd/link/internal/ld/util.go @@ -99,3 +99,10 @@ func contains(s []string, v string) bool { } return false } + +// implements sort.Interface, for sorting symbols by name. +type byName []*sym.Symbol + +func (s byName) Len() int { return len(s) } +func (s byName) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s byName) Less(i, j int) bool { return s[i].Name < s[j].Name }