(Although normally lfstack nodes should not be heap allocated in the first 
place?)


On Tuesday, November 8, 2022 at 4:32:11 PM UTC-8 Keith Randall wrote:

> I don't think checkptr is intended to be applied blindly inside the 
> runtime. The lfstack code is definitely doing things that checkptr was 
> designed to catch and flag.
> Maybe the lfstack routines need a go:nocheckptr annotation?
>
> On Tuesday, November 8, 2022 at 11:21:30 AM UTC-8 David Pacheco wrote:
>
>> Hello,
>>
>> I’m trying to track down an issue reported by the Go memory allocator.  
>> Most of the failure modes look like this one:
>> https://github.com/golang/go/issues/53289#issuecomment-1292744833
>> but some of them look like:
>> https://github.com/golang/go/issues/53289#issuecomment-1289743609
>>
>> It looks to me like these could be different manifestations of the same 
>> issue.  Following the advice in the second message, I tried to build Go and 
>> run the test suite with `export GO_GCFLAGS="-d=checkptr"` in src/make.bash. 
>>  With that, I saw checkptr fail:
>>
>> fatal error: checkptr: pointer arithmetic result points to invalid 
>> allocation
>>
>>     goroutine 23171 [running]:
>>     runtime.throw({0x8198ae?, 0xc0001560cf?})
>>             
>> /home/dap/gotest/gocrash-1667603796953/thread-0-run-0/goroot/src/runtime/panic.go:1047
>>  
>> +0x5d fp=0xc0029f4e70 sp=0xc0029f4e40 pc=0x43c95d
>>     runtime.checkptrArithmetic(0x770f40?, {0x0, 0x0, 0x0?})
>>             
>> /home/dap/gotest/gocrash-1667603796953/thread-0-run-0/goroot/src/runtime/checkptr.go:70
>>  
>> +0xea fp=0xc0029f4eb0 sp=0xc0029f4e70 pc=0x40856a
>>     runtime.lfstackUnpack(...)
>>             
>> /home/dap/gotest/gocrash-1667603796953/thread-0-run-0/goroot/src/runtime/lfstack_64bit.go:52
>>     runtime.(*lfstack).pop(...)
>>             
>> /home/dap/gotest/gocrash-1667603796953/thread-0-run-0/goroot/src/runtime/lfstack.go:47
>>     runtime.LFStackPop(...)
>>             
>> /home/dap/gotest/gocrash-1667603796953/thread-0-run-0/goroot/src/runtime/export_test.go:70
>>     runtime_test.TestLFStack(0xc000d26b60)
>>             
>> /home/dap/gotest/gocrash-1667603796953/thread-0-run-0/goroot/src/runtime/lfstack_test.go:52
>>  
>> +0x2de fp=0xc0029f4f70 sp=0xc0029f4eb0 pc=0x6deb9e
>>     testing.tRunner(0xc000d26b60, 0x820dc0)
>>             
>> /home/dap/gotest/gocrash-1667603796953/thread-0-run-0/goroot/src/testing/testing.go:1446
>>  
>> +0x10b fp=0xc0029f4fc0 sp=0xc0029f4f70 pc=0x4fd94b
>>     testing.(*T).Run.func1()
>>             
>> /home/dap/gotest/gocrash-1667603796953/thread-0-run-0/goroot/src/testing/testing.go:1493
>>  
>> +0x2a fp=0xc0029f4fe0 sp=0xc0029f4fc0 pc=0x4fe7ea
>>     runtime.goexit()
>>             
>> /home/dap/gotest/gocrash-1667603796953/thread-0-run-0/goroot/src/runtime/asm_amd64.s:1594
>>  
>> +0x1 fp=0xc0029f4fe8 sp=0xc0029f4fe0 pc=0x476121
>>     created by testing.(*T).Run
>>
>> That points to this code:
>>
>> https://github.com/golang/go/blob/39ac1fbd1393deed8888245dcf653220b14376f6/src/runtime/lfstack_64bit.go#L52
>>
>> So I dug into the checkptr check and added some more printlns and I found 
>> that this appears to be a heap address (0xc0001560c0), and “originals” is 
>> empty (in checkptrArithmetic).  Given that, I’m not sure how this could 
>> ever work, since “originals” seems to come from the compiler (so it doesn’t 
>> depend on runtime state).  Can someone point me in the right direction to 
>> better understanding what’s wrong here?  Alternatively, is there other 
>> information that would be useful to debug this problem?
>>
>> Thanks,
>> Dave
>>
>

-- 
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/8f0ba721-12bd-4b8a-953c-046f77f8906dn%40googlegroups.com.

Reply via email to