Hi,

On an embedded 16 core arm device we have been observing infrequent runtime 
crashes, with different signatures every time.

One examples is this:

unexpected fault address 0x6b6fc6da
fatal error: fault
[signal SIGSEGV: segmentation violation code=0x1 addr=0x6b6fc6da pc=0x7f72c]

goroutine 1 [running, locked to thread]:
runtime.throw(0xc3074, 0x5)
    /usr/local/go/src/runtime/panic.go:1116 +0x54 fp=0x4000072c20 
sp=0x4000072bf0 pc=0x3dcc4
runtime.sigpanic()
    /usr/local/go/src/runtime/signal_unix.go:749 +0x3b8 fp=0x4000072c50 
sp=0x4000072c20 pc=0x51b48
reflect.(*rtype).Method(0xc55fe, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, ...)
    /usr/local/go/src/reflect/type.go:809 +0xcc fp=0x4000072de0 
sp=0x4000072c60 pc=0x7f72c
runtime: unexpected return pc for runtime.doInit called from 0x4000098060
stack: frame={sp:0x4000072de0, fp:0x4000072e20} 
stack=[0x4000072000,0x4000073000)
0000004000072ce0:  000000400009a4e0  000000400009c340
0000004000072cf0:  0000000000000006  000000400009c3a8
0000004000072d00:  000000400009c3f8  000000400009c410
0000004000072d10:  0000000000000002  000000400009c438
0000004000072d20:  000000400009c4a8  0000004000072d58
0000004000072d30:  000000000001fb14 <runtime.mapassign_faststr+804> 
 00000000000ae3e0
0000004000072d40:  0000004000098060  0000000000000000
0000004000072d50:  00000040000a4d00  0000004000072dc8
0000004000072d60:  000000000007d790 <unicode.init+16592>  00000000000ae3e0
0000004000072d70:  0000004000098060  0000000000000001
0000004000072d80:  000000400009a4e0  0000000000002001
0000004000072d90:  000000400009806e  0000004000072dc8
0000004000072da0:  000000000007d4c0 <unicode.init+15872>  6e97779bde52831f
0000004000072db0:  0000000000000001  0000000000000000
0000004000072dc0:  000000400009c410  0000004000072e28
0000004000072dd0:  000000000004d02c <runtime.doInit+156>  00000000000ae3e0
0000004000072de0: <0000004000098060  00000000000c55fe
0000004000072df0:  0000000000000014  0000000000000000
0000004000072e00:  0000000000000000  0000000000000000
0000004000072e10:  0000000000000000  0000000000000000
0000004000072e20: >0000000000000000  0000000000000000
0000004000072e30:  0000000000000000  0000000000000000
0000004000072e40:  0000000000000000  0000004000072e78
0000004000072e50:  0000000000000000  0000000000000000
0000004000072e60:  0000000000150e98  0000004000072ea8
0000004000072e70:  000000000004cfe8 <runtime.doInit+88>  0000000000150e80
0000004000072e80:  000000000004d02c <runtime.doInit+156>  00000000000c45db
0000004000072e90:  000000000000000e  0000000000000002
0000004000072ea0:  0000004000096010  0000004000072ee8
0000004000072eb0:  000000000004cfe8 <runtime.doInit+88>  0000000000151ec0
0000004000072ec0:  0000000000000060  0000007f9bd197d0
0000004000072ed0:  0000000000000000  0000000000000000
0000004000072ee0:  00000000001518e8  0000004000072f28
0000004000072ef0:  000000000004cfe8 <runtime.doInit+88>  0000000000151500
0000004000072f00:  0000000000000000  000000400004c738
0000004000072f10:  0000000000025004 <runtime.gcenable+148>  0000000000000002
runtime.doInit(0x0)
    /usr/local/go/src/runtime/proc.go:5652 +0x9c fp=0x4000072e20 
sp=0x4000072de0 pc=0x4d02c

goroutine 2 [force gc (idle)]:
runtime.gopark(0xcaff8, 0x165dd0, 0x1411, 0x1)
    /usr/local/go/src/runtime/proc.go:306 +0xd0 fp=0x400004cfa0 
sp=0x400004cf80 pc=0x40540
runtime.goparkunlock(...)
    /usr/local/go/src/runtime/proc.go:312
runtime.forcegchelper()
    /usr/local/go/src/runtime/proc.go:255 +0xc4 fp=0x400004cfd0 
sp=0x400004cfa0 pc=0x403f4
runtime.goexit()
    /usr/local/go/src/runtime/asm_arm64.s:1136 +0x4 fp=0x400004cfd0 
sp=0x400004cfd0 pc=0x6b8f4
created by runtime.init.5
    /usr/local/go/src/runtime/proc.go:243 +0x30

goroutine 3 [GC sweep wait]:
runtime.gopark(0xcaff8, 0x165ee0, 0x140c, 0x1)
    /usr/local/go/src/runtime/proc.go:306 +0xd0 fp=0x400004d7a0 
sp=0x400004d780 pc=0x40540
runtime.goparkunlock(...)
    /usr/local/go/src/runtime/proc.go:312
runtime.bgsweep(0x400006a000)
    /usr/local/go/src/runtime/mgcsweep.go:163 +0xb0 fp=0x400004d7d0 
sp=0x400004d7a0 pc=0x2e880
runtime.goexit()
    /usr/local/go/src/runtime/asm_arm64.s:1136 +0x4 fp=0x400004d7d0 
sp=0x400004d7d0 pc=0x6b8f4
created by runtime.gcenable
    /usr/local/go/src/runtime/mgc.go:217 +0x54

goroutine 4 [GC scavenge wait]:
runtime.gopark(0xcaff8, 0x165f80, 0x140d, 0x1)
    /usr/local/go/src/runtime/proc.go:306 +0xd0 fp=0x400004df70 
sp=0x400004df50 pc=0x40540
runtime.goparkunlock(...)
    /usr/local/go/src/runtime/proc.go:312
runtime.bgscavenge(0x400006a000)
    /usr/local/go/src/runtime/mgcscavenge.go:265 +0xec fp=0x400004dfd0 
sp=0x400004df70 pc=0x2cd4c
runtime.goexit()
    /usr/local/go/src/runtime/asm_arm64.s:1136 +0x4 fp=0x400004dfd0 
sp=0x400004dfd0 pc=0x6b8f4
created by runtime.gcenable
    /usr/local/go/src/runtime/mgc.go:218 +0x74

The source code for the app is at: https://github.com/stavrospen/gomemverify

This is with go version go1.15.11 linux/amd64, cross compiling for arm64. 
CGO disabled.

We also use upx version 3.95

The background is that we have been seeing our go application crash, and 
were suspecting some external entity corrupting the memory, so created this 
small utility to try to catch memory corruption. We never managed to catch 
any corruption in the heap, but we keep seeing these random crashes with 
what seems to be stack corruption.

I should note here, that we also have C++ application running side by side, 
but we have never seen any similar crash there.

Was wondering if someone has any idea on how to debug this further, or what 
Go tools we can use to try to capture the possible corruption. We have 
tried 'GODEBUG="efence=1"' but didn't seem to catch anything.


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/11628ac8-eb65-452a-8845-941806e4b38cn%40googlegroups.com.

Reply via email to