-
Notifications
You must be signed in to change notification settings - Fork 18.3k
Description
What version of Go are you using (go version)?
go version : 1.15.7 ( However go version 1.14 and 1.16beta1 also show same error behaviour.)
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
OS: linux x86_64
What did you do?
A bug which occurs only in plugins with assembly code.
The package consists of a bn256 crypto implementation which has amd64 assembly code and also a generic implementation.
The assembly implementation is default and generic implementation can be enabled using the "generic" tag.
The plugin when compiled as a binary runs OK with both assembly and go implementation.
The plugin when compiled as a plugin FAILS with assembly code but runs OK with generic implementation.
TESTING:
#Run plugin directly to see correct result.
go run plugin/plugin.go
#Compile as plugin.
go build -buildmode=plugin -o /tmp/plugin.so ../compiler_bug/plugin/
#Running plugin will trigger error
go run runplugin/main.go
However, if the plugin is compiled with generic tag (To disable asm code, the bug doesn't occur), Some register corruption occurs due to wrong code being generated.
go build -buildmode=plugin -tags generic -o /tmp/plugin.so ../compiler_bug/plugin/
Running plugin will not cause an error.
go run runplugin/main.go
Repo to reproduce
https://github.com/DankFC/compile-bug
What did you expect to see?
./demo.sh
Actual a01f9bcc1208dee302769931ad378a4c0c4b2c21b0cfb3e752607e12d2b6fa6425
Expected a01f9bcc1208dee302769931ad378a4c0c4b2c21b0cfb3e752607e12d2b6fa6425
running plugin
Actual a01f9bcc1208dee302769931ad378a4c0c4b2c21b0cfb3e752607e12d2b6fa6425
Expected a01f9bcc1208dee302769931ad378a4c0c4b2c21b0cfb3e752607e12d2b6fa6425
What did you see instead?
./demo.sh
Actual a01f9bcc1208dee302769931ad378a4c0c4b2c21b0cfb3e752607e12d2b6fa6425
Expected a01f9bcc1208dee302769931ad378a4c0c4b2c21b0cfb3e752607e12d2b6fa6425
running plugin
panic: Decode point err bn256: malformed point err
goroutine 1 [running]:
_/tmp/compiler_bug/plugin.Export()
/tmp/compiler_bug/plugin/plugin.go:23 +0x2d7
main.main()
/tmp/compiler_bug/runplugin/main.go:24 +0x107
exit status 2
demo.sh is included in the repo to recreate the bug easily.