From: Aram Hăvărneanu Date: Mon, 30 Mar 2015 13:45:33 +0000 (+0200) Subject: cmd/ld: make .rela and .rela.plt sections contiguous X-Git-Tag: go1.5beta1~726 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=83b25d9342b0ce6620f38419ff74c6d16b43f554;p=gostls13.git 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 --- 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.