github.com/hikaru7719/go@v0.0.0-20181025140707-c8b2ac68906a/misc/cgo/testplugin/test.bash (about) 1 #!/usr/bin/env bash 2 # Copyright 2016 The Go Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style 4 # license that can be found in the LICENSE file. 5 6 set -e 7 8 if [ ! -f src/host/host.go ]; then 9 cwd=$(pwd) 10 echo "misc/cgo/testplugin/test.bash is running in $cwd" 1>&2 11 exit 1 12 fi 13 14 goos=$(go env GOOS) 15 goarch=$(go env GOARCH) 16 17 function cleanup() { 18 rm -f plugin*.so unnamed*.so iface*.so life.so issue* 19 rm -rf host pkg sub iface 20 } 21 trap cleanup EXIT 22 23 rm -rf pkg sub 24 mkdir sub 25 26 GOPATH=$(pwd) go build -i -gcflags "$GO_GCFLAGS" -buildmode=plugin plugin1 27 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin plugin2 28 cp plugin2.so plugin2-dup.so 29 GOPATH=$(pwd)/altpath go build -gcflags "$GO_GCFLAGS" -buildmode=plugin plugin-mismatch 30 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o=sub/plugin1.so sub/plugin1 31 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o=unnamed1.so unnamed1/main.go 32 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o=unnamed2.so unnamed2/main.go 33 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" host 34 35 # test that DWARF sections are emitted for plugins and programs importing "plugin" 36 if [ $GOOS != "darwin" ]; then 37 # On macOS, for some reason, the linker doesn't add debug sections to .so, 38 # see issue #27502. 39 go run src/checkdwarf/main.go plugin2.so plugin2.UnexportedNameReuse 40 fi 41 go run src/checkdwarf/main.go host main.main 42 43 LD_LIBRARY_PATH=$(pwd) ./host 44 45 # Test that types and itabs get properly uniqified. 46 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin iface_a 47 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin iface_b 48 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" iface 49 LD_LIBRARY_PATH=$(pwd) ./iface 50 51 function _timeout() ( 52 set -e 53 $2 & 54 p=$! 55 (sleep $1; kill $p 2>/dev/null) & 56 p2=$! 57 wait $p 2>/dev/null 58 kill -0 $p2 2>/dev/null 59 ) 60 61 # Test for issue 18676 - make sure we don't add the same itab twice. 62 # The buggy code hangs forever, so use a timeout to check for that. 63 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o plugin.so src/issue18676/plugin.go 64 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue18676 src/issue18676/main.go 65 _timeout 10s ./issue18676 66 67 # Test for issue 19534 - that we can load a plugin built in a path with non-alpha 68 # characters 69 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -ldflags='-pluginpath=issue.19534' -o plugin.so src/issue19534/plugin.go 70 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue19534 src/issue19534/main.go 71 ./issue19534 72 73 # Test for issue 18584 74 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o plugin.so src/issue18584/plugin.go 75 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue18584 src/issue18584/main.go 76 ./issue18584 77 78 # Test for issue 19418 79 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin "-ldflags=-X main.Val=linkstr" -o plugin.so src/issue19418/plugin.go 80 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue19418 src/issue19418/main.go 81 ./issue19418 82 83 # Test for issue 19529 84 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o plugin.so src/issue19529/plugin.go 85 86 # Test for issue 22175 87 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o issue22175_plugin1.so src/issue22175/plugin1.go 88 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o issue22175_plugin2.so src/issue22175/plugin2.go 89 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue22175 src/issue22175/main.go 90 ./issue22175 91 92 # Test for issue 22295 93 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o issue.22295.so issue22295.pkg 94 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue22295 src/issue22295.pkg/main.go 95 ./issue22295 96 97 # Test for issue 24351 98 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o issue24351.so src/issue24351/plugin.go 99 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue24351 src/issue24351/main.go 100 ./issue24351 101 102 # Test for issue 25756 103 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o life.so issue25756/plugin 104 GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue25756 src/issue25756/main.go 105 # Fails intermittently, but 20 runs should cause the failure 106 for i in `seq 1 20`; 107 do 108 ./issue25756 > /dev/null 109 done