Commit 43d25a61 authored by Cherry Zhang's avatar Cherry Zhang

[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 <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarThan McIntosh <thanm@google.com>
parent 851b1f40
...@@ -58,6 +58,7 @@ import ( ...@@ -58,6 +58,7 @@ import (
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"runtime" "runtime"
"sort"
"strings" "strings"
"sync" "sync"
) )
...@@ -540,6 +541,7 @@ func setupdynexp(ctxt *Link) { ...@@ -540,6 +541,7 @@ func setupdynexp(ctxt *Link) {
s := ctxt.Syms.Lookup(exp, 0) s := ctxt.Syms.Lookup(exp, 0)
dynexp = append(dynexp, s) dynexp = append(dynexp, s)
} }
sort.Sort(byName(dynexp))
// Resolve ABI aliases in the list of cgo-exported functions. // Resolve ABI aliases in the list of cgo-exported functions.
// This is necessary because we load the ABI0 symbol for all // This is necessary because we load the ABI0 symbol for all
......
...@@ -99,3 +99,10 @@ func contains(s []string, v string) bool { ...@@ -99,3 +99,10 @@ func contains(s []string, v string) bool {
} }
return false 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 }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment