From 6355d6c7e2e8f4ea4cfd3fed8da6677106937f66 Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Sat, 21 Oct 2017 07:29:46 -0400 Subject: cmd/link, plugin: always encode path Both the linker and the plugin package were inconsistent about when they applied the path encoding defined in objabi.PathToPrefix. As a result, only some symbols from a package path that required encoding were being found. So always encoding the path. Fixes #22295 Change-Id: Ife86c79ca20b2e9307008ed83885e193d32b7dc4 Reviewed-on: https://go-review.googlesource.com/72390 Run-TryBot: David Crawshaw TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/cmd/link/internal/ld/data.go | 3 ++- src/cmd/link/internal/ld/deadcode.go | 2 +- src/cmd/link/internal/ld/symtab.go | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) (limited to 'src/cmd') diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 3572d7309d..459a75e8ac 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -782,10 +782,11 @@ func addstrdata1(ctxt *Link, arg string) { if eq < 0 || dot < 0 { Exitf("-X flag requires argument of the form importpath.name=value") } - pkg := objabi.PathToPrefix(arg[:dot]) + pkg := arg[:dot] if ctxt.BuildMode == BuildModePlugin && pkg == "main" { pkg = *flagPluginPath } + pkg = objabi.PathToPrefix(pkg) addstrdata(ctxt, pkg+arg[dot:eq], arg[eq+1:]) } diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go index c065146fcd..600c49aa12 100644 --- a/src/cmd/link/internal/ld/deadcode.go +++ b/src/cmd/link/internal/ld/deadcode.go @@ -230,7 +230,7 @@ func (d *deadcodepass) init() { } names = append(names, *flagEntrySymbol) if d.ctxt.BuildMode == BuildModePlugin { - names = append(names, *flagPluginPath+".init", *flagPluginPath+".main", "go.plugin.tabs") + names = append(names, objabi.PathToPrefix(*flagPluginPath)+".init", objabi.PathToPrefix(*flagPluginPath)+".main", "go.plugin.tabs") // We don't keep the go.plugin.exports symbol, // but we do keep the symbols it refers to. diff --git a/src/cmd/link/internal/ld/symtab.go b/src/cmd/link/internal/ld/symtab.go index 20ac6b7139..bb8c1992ba 100644 --- a/src/cmd/link/internal/ld/symtab.go +++ b/src/cmd/link/internal/ld/symtab.go @@ -586,7 +586,7 @@ func (ctxt *Link) symtab() { moduledata.AddUint(ctxt.Arch, 0) } if ctxt.BuildMode == BuildModePlugin { - addgostring(ctxt, moduledata, "go.link.thispluginpath", *flagPluginPath) + addgostring(ctxt, moduledata, "go.link.thispluginpath", objabi.PathToPrefix(*flagPluginPath)) pkghashes := ctxt.Syms.Lookup("go.link.pkghashes", 0) pkghashes.Attr |= sym.AttrReachable -- cgit v1.3