From 83b25d9342b0ce6620f38419ff74c6d16b43f554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aram=20H=C4=83v=C4=83rneanu?= Date: Mon, 30 Mar 2015 15:45:33 +0200 Subject: [PATCH] cmd/ld: make .rela and .rela.plt sections contiguous ELF normally requires this and Solaris runtime loader will crash if we don't do it. Fixes Solaris build. Change-Id: I0482eed890aff2d346136ae7f9caf8f094f502ed Reviewed-on: https://go-review.googlesource.com/8216 Reviewed-by: Ian Lance Taylor --- src/cmd/internal/ld/data.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/cmd/internal/ld/data.go b/src/cmd/internal/ld/data.go index 4650db0358..3194bd568e 100644 --- a/src/cmd/internal/ld/data.go +++ b/src/cmd/internal/ld/data.go @@ -1267,6 +1267,27 @@ func dodata() { datap = listsort(datap, datcmp, listnextp) + if Iself { + // Make .rela and .rela.plt contiguous, the ELF ABI requires this + // and Solaris actually cares. + var relplt *LSym + for l = &datap; *l != nil; l = &(*l).Next { + if (*l).Name == ".rel.plt" || (*l).Name == ".rela.plt" { + relplt = (*l) + *l = (*l).Next + break + } + } + if relplt != nil { + for s = datap; s != nil; s = s.Next { + if s.Name == ".rel" || s.Name == ".rela" { + relplt.Next = s.Next + s.Next = relplt + } + } + } + } + /* * allocate sections. list is sorted by type, * so we can just walk it for each piece we want to emit.