mirror of
https://github.com/burrowers/garble.git
synced 2025-12-24 12:58:05 +08:00
Go 1.21.0 was released in August 2023, so our upcoming release will no longer support the Go 1.20 release series. The first Go 1.22 release candidate is also due in December 2023, less than a month from now, so dropping 1.20 will simplify 1.22 work.
67 lines
1.4 KiB
Plaintext
67 lines
1.4 KiB
Plaintext
skip # TODO: get plugins working properly. See issue #87
|
|
|
|
[windows] skip 'Go plugins are not supported on Windows'
|
|
|
|
exec garble build -buildmode=plugin ./plugin
|
|
binsubstr plugin.so 'PublicVar' 'PublicFunc'
|
|
! binsubstr plugin.so 'privateFunc'
|
|
|
|
# Note that we need -trimpath; see the caveat section in the README.
|
|
go build -trimpath
|
|
exec ./main
|
|
cmp stderr main.stderr
|
|
binsubstr main$exe 'PublicVar' 'PublicFunc'
|
|
|
|
[short] stop # no need to verify this with -short
|
|
|
|
# This used to fail, since in this case the package path for the ad-hoc plugin
|
|
# package isn't "main", but "plugin/unnamed-*".
|
|
exec garble build -buildmode=plugin plugin/main.go
|
|
|
|
go build -buildmode=plugin ./plugin
|
|
binsubstr plugin.so 'PublicVar' 'PublicFunc' 'privateFunc'
|
|
go build
|
|
exec ./main
|
|
cmp stderr main.stderr
|
|
-- go.mod --
|
|
module test/main
|
|
|
|
go 1.21
|
|
-- plugin/main.go --
|
|
package main
|
|
|
|
import "test/main/plugin/lib"
|
|
|
|
var PublicVar int = lib.ImportedFunc()
|
|
|
|
func privateFunc(n int) { println("Hello, number", n) }
|
|
|
|
func PublicFunc() { privateFunc(PublicVar) }
|
|
-- plugin/lib/lib.go --
|
|
package lib
|
|
|
|
func ImportedFunc() int { return 4 }
|
|
-- main.go --
|
|
package main
|
|
|
|
import "plugin"
|
|
|
|
func main() {
|
|
p, err := plugin.Open("plugin.so")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
v, err := p.Lookup("PublicVar")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
f, err := p.Lookup("PublicFunc")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
*v.(*int) = 7
|
|
f.(func())()
|
|
}
|
|
-- main.stderr --
|
|
Hello, number 7
|