From: Michael Hudson-Doyle Date: Tue, 7 Apr 2015 02:51:29 +0000 (+1200) Subject: cmd/internal/ld: set moduledatasize correctly when -linkshared X-Git-Tag: go1.5beta1~1002 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f9bc9a7a2eb732beb1e838203d1763f14f7c07ac;p=gostls13.git cmd/internal/ld: set moduledatasize correctly when -linkshared Change-Id: I1ea4175466c9113c1f41b012ba8266ee2b06e3a3 Reviewed-on: https://go-review.googlesource.com/8522 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/internal/ld/symtab.go b/src/cmd/internal/ld/symtab.go index 055184a19b..4d57d87c49 100644 --- a/src/cmd/internal/ld/symtab.go +++ b/src/cmd/internal/ld/symtab.go @@ -425,7 +425,6 @@ func symtab() { // This code uses several global variables that are set by pcln.go:pclntab. moduledata := Linklookup(Ctxt, "runtime.firstmoduledata", 0) moduledata.Type = obj.SNOPTRDATA - moduledatasize := moduledata.Size moduledata.Size = 0 // truncate symbol back to 0 bytes to reinitialize moduledata.Reachable = true moduledata.Local = true @@ -465,8 +464,12 @@ func symtab() { adduint(Ctxt, moduledata, uint64(ntypelinks)) adduint(Ctxt, moduledata, uint64(ntypelinks)) // The rest of moduledata is zero initialized. - moduledata.Size = moduledatasize - Symgrow(Ctxt, moduledata, moduledatasize) + // When linking an object that does not contain the runtime we are + // creating the moduledata from scratch and it does not have a + // compiler-provided size, so read it from the type data. + moduledatatype := Linkrlookup(Ctxt, "type.runtime.moduledata", 0) + moduledata.Size = decodetype_size(moduledatatype) + Symgrow(Ctxt, moduledata, moduledata.Size) lastmoduledatap := Linklookup(Ctxt, "runtime.lastmoduledatap", 0) if lastmoduledatap.Type != obj.SDYNIMPORT {