From: Cherry Mui Date: Mon, 28 Mar 2022 16:46:46 +0000 (-0400) Subject: cmd/internal/obj: sort relocations X-Git-Tag: go1.19beta1~896 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1a9972ec87de1eba7f9f71c8ed4afa88b0c122d4;p=gostls13.git cmd/internal/obj: sort relocations At least on some platforms (e.g. PE dynamic loader) relocations need to be sorted in address order. Currently we don't always emit relocations in address order: e.g. for array literal with out-of- order element initializers, or out-of-order DATA instructions in assembly code. Sort them. No test for now as I can't reproduce the failure for #51923. Fixes #51923. Change-Id: Ifec5d3476e027bb927bcefd6e45c40ebeccee4ba Reviewed-on: https://go-review.googlesource.com/c/go/+/396195 Trust: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Gopher Robot Reviewed-by: Than McIntosh --- diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go index e7bc45ccdf..7bae31f343 100644 --- a/src/cmd/internal/obj/objfile.go +++ b/src/cmd/internal/obj/objfile.go @@ -173,6 +173,7 @@ func WriteObjFile(ctxt *Link, b *bio.Writer) { h.Offsets[goobj.BlkReloc] = w.Offset() for _, list := range lists { for _, s := range list { + sort.Sort(relocByOff(s.R)) // some platforms (e.g. PE) requires relocations in address order for i := range s.R { w.Reloc(&s.R[i]) }