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 <iant@golang.org>
This commit is contained in:
Aram Hăvărneanu 2015-03-30 15:45:33 +02:00
parent c94f1f791b
commit 83b25d9342

View File

@ -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.