From 1a9972ec87de1eba7f9f71c8ed4afa88b0c122d4 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Mon, 28 Mar 2022 12:46:46 -0400 Subject: [PATCH] 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 --- src/cmd/internal/obj/objfile.go | 1 + 1 file changed, 1 insertion(+) 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]) } -- 2.50.0