From: Josh Bleecher Snyder Date: Sun, 13 Mar 2016 17:13:03 +0000 (-0700) Subject: cmd/internal/obj: sort relocs by off when printing X-Git-Tag: go1.7beta1~1363 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=af1c29c1c1051a26de4cc72454827dd01e578b45;p=gostls13.git cmd/internal/obj: sort relocs by off when printing This makes the output of compiling with -S more stable in the face of unimportant variation in the order in which relocs are generated. It is also more pleasant to read the relocs when they are sorted. Also, do some minor cleanup. For #14786 Change-Id: Id92020b13fd21777dfb5b29c2722c3b2eb27001b Reviewed-on: https://go-review.googlesource.com/20641 Reviewed-by: Matthew Dempsky --- diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go index fff2b9d14e..c2a55aa2b0 100644 --- a/src/cmd/internal/obj/objfile.go +++ b/src/cmd/internal/obj/objfile.go @@ -104,6 +104,7 @@ import ( "fmt" "log" "path/filepath" + "sort" "strings" ) @@ -417,11 +418,9 @@ func writesym(ctxt *Link, b *Biobuf, s *LSym) { i += 16 } - var r *Reloc - var name string - for i := 0; i < len(s.R); i++ { - r = &s.R[i] - name = "" + sort.Sort(relocByOff(s.R)) // generate stable output + for _, r := range s.R { + name := "" if r.Sym != nil { name = r.Sym.Name } @@ -562,3 +561,10 @@ func wrsym(b *Biobuf, s *LSym) { wrstring(b, s.Name) wrint(b, int64(s.Version)) } + +// relocByOff sorts relocations by their offsets. +type relocByOff []Reloc + +func (x relocByOff) Len() int { return len(x) } +func (x relocByOff) Less(i, j int) bool { return x[i].Off < x[j].Off } +func (x relocByOff) Swap(i, j int) { x[i], x[j] = x[j], x[i] }