Closed jiftle closed 1 year ago
I'll need some more information.
It looks like a null pointer dereference. But without any code I can't tell you why
I'll need some more information.
1. Does it happen with CGO_ENABLED=0 & 1?
amd64 and aarch64 will panic together. CGO_ENABLED=0, this is my Makefile
linux-arm64: CGO_ENABLED=0 \ GOOS=linux \ GOARCH=arm64 \ go build -ldflags \ " -s -w \ -X '${AppName}/version.BuildTime=${BUILD_TIME}' \ -X '${AppName}/version.Version=${Version}' \ -X '${AppName}/version.Author=${BUILD_AUTHOR}' \ -X '${AppName}/version.Hash=${BUILD_HASH}' \ " \ -o build/bin/linux/arm64/${OutAppName}
2. Do you have a reproducible case you can show?
var nOpen func() int32
libc, err := purego.Dlopen(libname, purego.RTLD_NOW|purego.RTLD_GLOBAL) if err != nil { g.Log().Warningf("lib load fail, %v", err) return }
g.Log().Infof("lib [%v] open success.", libname) purego.RegisterLibFunc(&nOpen, libc, "LibWrap_Open")
func Open() (err error) { defer func() { if err := recover(); err != nil { g.Log().Errorf("lib_linux Open panic, %v", err) // it isn't work } }() if connected { err = fmt.Errorf("device is connected") return } g.Log().Debugf("nOpen, # %p", &nOpen) ret := nOpen() // it is panic g.Log().Debugf("nOpen, > ret= %v", ret) if ret != 0 { err = fmt.Errorf("ret=%v", ret) return } connected = true return }
lib, .h
extern "C" { int LibWrap_Open(); } ``
3. Are you using callbacks or just calling into C functions?
It is just C function call, but I think my C function maybe has bug. I will try look lib code.
note: my c code is no problem.
It looks like a null pointer dereference. But without any code I can't tell you why
child process. ● nhardserv.service - nhardserv Loaded: loaded (/lib/systemd/system/nhardserv.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2023-09-27 17:20:08 CST; 6s ago Main PID: 366815 (nhardserv) Tasks: 47 (limit: 33423) Memory: 26.2M CGroup: /system.slice/nhardserv.service ├─366815 /usr/local/nhardserv/nctdevdaemon ├─366832 ./libserv
segmentation violation !!! this maybe bug.
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x7f2e4f83a501]
runtime stack:
runtime.throw({0xc7d0a3?, 0x0?})
/opt/my-apps/go/src/runtime/panic.go:1047 +0x5d fp=0x7f2e258debf8 sp=0x7f2e258debc8 pc=0x436efd
runtime.sigpanic()
/opt/my-apps/go/src/runtime/signal_unix.go:821 +0x3e9 fp=0x7f2e258dec58 sp=0x7f2e258debf8 pc=0x44db49
goroutine 117 [syscall]:
runtime.cgocall(0xa691e0, 0xc00021e0b0)
/opt/my-apps/go/src/runtime/cgocall.go:157 +0x5c fp=0xc000152f30 sp=0xc000152ef8 pc=0x4051dc
github.com/ebitengine/purego.RegisterFunc.func1({0x12f5788?, 0x0?, 0x0?})
/data/repo/golang/gopath/pkg/mod/github.com/ebitengine/purego@v0.5.0-rc.2/func.go:249 +0xa31 fp=0xc0001532a0 sp=0xc000152f30 pc=0xa68951
reflect.callReflect(0xc000509560, 0xc000153808, 0xc0001536e0, 0xc0001536e8)
/opt/my-apps/go/src/reflect/value.go:772 +0x568 fp=0xc000153690 sp=0xc0001532a0 pc=0x49f048
reflect.callReflect(0xc000509560, 0xc000153808, 0xc0001536e0, 0xc0001536e8)
<autogenerated>:1 +0x4b fp=0xc0001536c0 sp=0xc000153690 pc=0x4b206b
Does this crash happen with CGO_ENABLED=1?
I'm sorry, the season is found. This is my c lib bug. Thanks for everyone.
go version: go1.20.1
my service run on aarch64 linux, panic.
this is error: