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 --- misc/cgo/testplugin/src/issue22295.pkg/main.go | 28 ++++++++++++++++++++++++ misc/cgo/testplugin/src/issue22295.pkg/plugin.go | 16 ++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 misc/cgo/testplugin/src/issue22295.pkg/main.go create mode 100644 misc/cgo/testplugin/src/issue22295.pkg/plugin.go (limited to 'misc/cgo/testplugin/src') diff --git a/misc/cgo/testplugin/src/issue22295.pkg/main.go b/misc/cgo/testplugin/src/issue22295.pkg/main.go new file mode 100644 index 0000000000..6cb186e100 --- /dev/null +++ b/misc/cgo/testplugin/src/issue22295.pkg/main.go @@ -0,0 +1,28 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "log" + "plugin" +) + +func main() { + p, err := plugin.Open("issue.22295.so") + if err != nil { + log.Fatal(err) + } + f, err := p.Lookup("F") + if err != nil { + log.Fatal(err) + } + const want = 2503 + got := f.(func() int)() + if got != want { + log.Fatalf("got %d, want %d", got, want) + } +} diff --git a/misc/cgo/testplugin/src/issue22295.pkg/plugin.go b/misc/cgo/testplugin/src/issue22295.pkg/plugin.go new file mode 100644 index 0000000000..46b08a405b --- /dev/null +++ b/misc/cgo/testplugin/src/issue22295.pkg/plugin.go @@ -0,0 +1,16 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +var f *int + +func init() { + f = new(int) + *f = 2503 +} + +func F() int { return *f } + +func main() {} -- cgit v1.3