aboutsummaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorDavid Crawshaw <crawshaw@golang.org>2016-10-30 23:53:09 -0400
committerDavid Crawshaw <crawshaw@golang.org>2016-11-01 20:56:30 +0000
commitd0e408334be22158fbf58a4d02789a48f5cb911e (patch)
treefb60bd9dda17d4410751bd85bd028f12a4cac76f /misc
parente22c79660d96187b672a92622d171066a0d5c5c2 (diff)
downloadgo-d0e408334be22158fbf58a4d02789a48f5cb911e.tar.xz
cmd/link: support plugins with no exported symbols
A plugin with no exported symbols is still potentially very useful. Its init functions are called on load, and it so it can have visible side effects. Fixes #17681 Change-Id: Icdca31f48e5ab13c99020a2ef724f3de47dcd74b Reviewed-on: https://go-review.googlesource.com/32437 Run-TryBot: David Crawshaw <crawshaw@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'misc')
-rw-r--r--misc/cgo/testplugin/src/host/host.go8
-rw-r--r--misc/cgo/testplugin/src/plugin2/plugin2.go18
-rwxr-xr-xmisc/cgo/testplugin/test.bash1
3 files changed, 27 insertions, 0 deletions
diff --git a/misc/cgo/testplugin/src/host/host.go b/misc/cgo/testplugin/src/host/host.go
index 0fe28663c7..636655aa5c 100644
--- a/misc/cgo/testplugin/src/host/host.go
+++ b/misc/cgo/testplugin/src/host/host.go
@@ -84,5 +84,13 @@ func main() {
log.Fatalf(`plugin1.F()=%d, want 17`, gotf)
}
+ // plugin2 has no exported symbols, only an init function.
+ if _, err := plugin.Open("plugin2.so"); err != nil {
+ log.Fatalf("plugin.Open failed: %v", err)
+ }
+ if got, want := common.X, 2; got != want {
+ log.Fatalf("after loading plugin2, common.X=%d, want %d", got, want)
+ }
+
fmt.Println("PASS")
}
diff --git a/misc/cgo/testplugin/src/plugin2/plugin2.go b/misc/cgo/testplugin/src/plugin2/plugin2.go
new file mode 100644
index 0000000000..6c23a5e633
--- /dev/null
+++ b/misc/cgo/testplugin/src/plugin2/plugin2.go
@@ -0,0 +1,18 @@
+// Copyright 2016 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
+
+// // No C code required.
+import "C"
+
+import "common"
+
+func init() {
+ common.X = 2
+}
+
+func main() {
+ panic("plugin1.main called")
+}
diff --git a/misc/cgo/testplugin/test.bash b/misc/cgo/testplugin/test.bash
index 7a40934e0e..322d43901d 100755
--- a/misc/cgo/testplugin/test.bash
+++ b/misc/cgo/testplugin/test.bash
@@ -23,6 +23,7 @@ rm -rf pkg sub
mkdir sub
GOPATH=$(pwd) go build -buildmode=plugin plugin1
+GOPATH=$(pwd) go build -buildmode=plugin plugin2
GOPATH=$(pwd) go build -buildmode=plugin -o=sub/plugin1.so sub/plugin1
GOPATH=$(pwd) go build host