From f9bc9a7a2eb732beb1e838203d1763f14f7c07ac Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Tue, 7 Apr 2015 14:51:29 +1200 Subject: [PATCH] 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 --- src/cmd/internal/ld/symtab.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 { -- 2.48.1