Skip to content
This repository has been archived by the owner on Nov 1, 2020. It is now read-only.

[armel] GC fails #6021

Open
jkotas opened this issue Jun 27, 2018 · 1 comment
Open

[armel] GC fails #6021

jkotas opened this issue Jun 27, 2018 · 1 comment

Comments

@jkotas
Copy link
Member

jkotas commented Jun 27, 2018

From @BredPet on June 27, 2018 12:20

When I run applications with a small memory consumption, about 5 mb, everything is fine. But when consumption increases at least to 15, everything falls.

Thread 1 "usage2" received signal SIGSEGV, Segmentation fault.
GcInfoDecoder::SetIsInterruptibleCB (startOffset=3204414512, stopOffset=2138451712, hCallback=0x1) at /corert/src/Native/Runtime/Full/../coreclr/gcinfodecoder.cpp:77
77      /corert/src/Native/Runtime/Full/../coreclr/gcinfodecoder.cpp: No such file or directory.
(gdb) bt
#0  GcInfoDecoder::SetIsInterruptibleCB (startOffset=3204414512, stopOffset=2138451712, hCallback=0x1) at /corert/src/Native/Runtime/Full/../coreclr/gcinfodecoder.cpp:77
#1  0x000227e6 in StackFrameIterator::NextInternal (this=0xbeff7c20) at /corert/src/Native/Runtime/StackFrameIterator.cpp:1319
#2  0x00022726 in StackFrameIterator::Next (this=0xbeff7c20) at /corert/src/Native/Runtime/StackFrameIterator.cpp:1291
#3  0x00023b4a in Thread::GcScanRootsWorker (this=0xb6ff9f38, pfnEnumCallback=0x38a01 <WKS::GCHeap::Promote(Object**, ScanContext*, unsigned int)>, pvCallbackData=0xbeff7db8, 
    frameIterator=...) at /corert/src/Native/Runtime/thread.cpp:539
#4  0x00023a02 in Thread::GcScanRoots (this=0xb6ff9f38, pfnEnumCallback=0x7f762f00, pvCallbackData=0x1) at /corert/src/Native/Runtime/thread.cpp:411
#5  0x0001e6f6 in GCToEEInterface::GcScanRoots (fn=0x38a01 <WKS::GCHeap::Promote(Object**, ScanContext*, unsigned int)>, condemned=<optimized out>, max_gen=<optimized out>, 
    sc=<optimized out>) at /corert/src/Native/Runtime/gcrhscan.cpp:85
#6  0x00031f8e in WKS::gc_heap::mark_phase (condemned_gen_number=0, mark_only_p=0) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:19600
#7  0x000307ac in WKS::gc_heap::gc1 () at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:15270
#8  0x00035e10 in WKS::gc_heap::garbage_collect (n=<optimized out>) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:16817
#9  0x0002e0c0 in WKS::GCHeap::GarbageCollectGeneration (this=<optimized out>, gen=0, reason=<optimized out>) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:35196
#10 0x0002f658 in WKS::gc_heap::try_allocate_more_space (acontext=<optimized out>, size=<optimized out>, gen_number=0)
    at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:13074
#11 0x00043d6e in WKS::gc_heap::allocate_more_space (acontext=<optimized out>, alloc_generation_number=0, size=<optimized out>)
    at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:13370
#12 WKS::gc_heap::allocate (jsize=16, acontext=0xb6ff9f38) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:13401
#13 WKS::GCHeap::Alloc (this=<optimized out>, context=0xb6ff9f38, size=16, flags=0) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:34542
#14 0x00053e90 in RhpNewObject () at /corert/src/Native/Runtime/arm/AllocFast.S:78
#15 0xb4c9001c in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)



Thread 1 "Hello_spec" received signal SIGABRT, Aborted.
0xb6cba094 in raise () from /lib/libc.so.6
(gdb) bt
#0  0xb6cba094 in raise () from /lib/libc.so.6
#1  0xb6cbb3f0 in abort () from /lib/libc.so.6
#2  0x0001fee2 in Assert (expr=0x3f963e "ASSERT_UNCONDITIONALLY", file=0x40e513 "/corert/src/Native/Runtime/unix/UnwindHelpers.cpp", line_num=358, 
    message=0x40e562 "LocateUnwindSections") at /corert/src/Native/Runtime/rhassert.cpp:25
#3  0x000c8842 in LocateUnwindSections (pc=940973) at /corert/src/Native/Runtime/unix/UnwindHelpers.cpp:358
#4  0x000c886c in UnwindHelpers::StepFrame (regs=0xbefff078) at /corert/src/Native/Runtime/unix/UnwindHelpers.cpp:370
#5  0x000be9f2 in VirtualUnwind (pRegisterSet=0xbefff078) at /corert/src/Native/Runtime/unix/UnixContext.cpp:612
#6  0x000c358a in UnixNativeCodeManager::UnwindStackFrame (this=0x613640, pMethodInfo=0xbefff104, pRegisterSet=0xbefff078, ppPreviousTransitionFrame=0xbeffef80)
    at /corert/src/Native/Runtime/unix/UnixNativeCodeManager.cpp:222
#7  0x00030a52 in StackFrameIterator::NextInternal (this=0xbefff068) at /corert/src/Native/Runtime/StackFrameIterator.cpp:1319
#8  0x00030958 in StackFrameIterator::Next (this=0xbefff068) at /corert/src/Native/Runtime/StackFrameIterator.cpp:1291
#9  0x00033554 in Thread::GcScanRootsWorker (this=0xb6ff9f38, pfnEnumCallback=0x7c5b9 <WKS::GCHeap::Promote(Object**, ScanContext*, unsigned int)>, pvCallbackData=0xbefff4a0, 
    frameIterator=...) at /corert/src/Native/Runtime/thread.cpp:539
#10 0x00033386 in Thread::GcScanRoots (this=0xb6ff9f38, pfnEnumCallback=0x7c5b9 <WKS::GCHeap::Promote(Object**, ScanContext*, unsigned int)>, pvCallbackData=0xbefff4a0)
    at /corert/src/Native/Runtime/thread.cpp:411
#11 0x0002598a in GCToEEInterface::GcScanRoots (fn=0x7c5b9 <WKS::GCHeap::Promote(Object**, ScanContext*, unsigned int)>, condemned=0, max_gen=2, sc=0xbefff4a0)
    at /corert/src/Native/Runtime/gcrhscan.cpp:85
#12 0x000b3440 in GCScan::GcScanRoots (fn=0x7c5b9 <WKS::GCHeap::Promote(Object**, ScanContext*, unsigned int)>, condemned=0, max_gen=2, sc=0xbefff4a0)
    at /corert/src/Native/gc/gcscan.cpp:170
#13 0x00063422 in WKS::gc_heap::mark_phase (condemned_gen_number=0, mark_only_p=0) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:19600
#14 0x0005d0f4 in WKS::gc_heap::gc1 () at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:15270
#15 0x00071ec2 in WKS::gc_heap::garbage_collect (n=0) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:16861
#16 0x0005385e in WKS::GCHeap::GarbageCollectGeneration (this=0x605020, gen=0, reason=reason_alloc_soh) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:35196
#17 0x00057550 in WKS::gc_heap::try_allocate_more_space (acontext=0xb6ff9f38, size=24012, gen_number=0) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:13074
#18 0x000576b8 in WKS::gc_heap::allocate_more_space (acontext=0xb6ff9f38, size=24012, alloc_generation_number=0) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:13370
#19 0x000a9d3c in WKS::gc_heap::allocate (jsize=24012, acontext=0xb6ff9f38) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:13401
#20 WKS::GCHeap::Alloc (this=0x605020, context=0xb6ff9f38, size=24012, flags=0) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:34542
#21 0x00023260 in RhpGcAlloc (pEEType=0x5e3f18, uFlags=0, cbSize=24012, pTransitionFrame=0xbefffb78) at /corert/src/Native/Runtime/gcrhenv.cpp:273
#22 0x000c8b96 in RhpNewArrayRare () at /corert/src/Native/Runtime/arm/AllocFast.S:324
#23 0x005e3f18 in vtable for __Array<Char> ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)


With portable c++ implementation of RhpNewArray, RhpNewFast, RhNewString and RhpNewFinalizable:
#0  0xb6cba094 in raise () from /lib/libc.so.6
#1  0xb6cbb3f0 in abort () from /lib/libc.so.6
#2  0x0001fee2 in Assert (expr=0x3fc61d "m_pHackPInvokeTunnel != NULL", file=0x3fc63a "/corert/src/Native/Runtime/thread.cpp", line_num=142, message=0x0)
    at /corert/src/Native/Runtime/rhassert.cpp:25
#3  0x000330d0 in Thread::EnablePreemptiveMode (this=0xb6ff9f38) at /corert/src/Native/Runtime/thread.cpp:142
#4  0x00023e9e in GCToEEInterface::EnablePreemptiveGC (pThread=0xb6ff9f38) at /corert/src/Native/Runtime/gcrhenv.cpp:1010
#5  0x00037816 in WKS::gc_heap::enable_preemptive (current_thread=0xb6ff9f38) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:1788
#6  0x00053ba2 in WKS::GCHeap::GarbageCollectGeneration (this=0x605020, gen=0, reason=reason_alloc_soh) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:35141
#7  0x00057988 in WKS::gc_heap::try_allocate_more_space (acontext=0xb6ff9f38, size=24012, gen_number=0) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:13074
#8  0x00057af0 in WKS::gc_heap::allocate_more_space (acontext=0xb6ff9f38, size=24012, alloc_generation_number=0) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:13370
#9  0x000aa174 in WKS::gc_heap::allocate (jsize=24012, acontext=0xb6ff9f38) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:13401
#10 WKS::GCHeap::Alloc (this=0x605020, context=0xb6ff9f38, size=24012, flags=0) at /corert/src/Native/Runtime/Full/../../gc/gc.cpp:34542
#11 0x00023260 in RhpGcAlloc (pEEType=0x5e3f18, uFlags=0, cbSize=24012, pTransitionFrame=0x0) at /corert/src/Native/Runtime/gcrhenv.cpp:273
#12 0x000296ca in RhpNewArray (pArrayEEType=0x5e3f18, numElements=3000) at /corert/src/Native/Runtime/portable.cpp:160
#13 0x000e5e54 in Hello_SpectralNorm__MultiplyAtAv (this=..., n=3000, v=..., AtAv=...) at /corert/tests/src/Simple/Hello/Hello.cs:128
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

@dotnet/arm32-corert-contrib

Copied from original issue: dotnet/coreclr#18669

@jkotas
Copy link
Member Author

jkotas commented Jun 27, 2018

The problem is that GC triggered at specific point (stacktrace) does not work.

#14 0x00053e90 in RhpNewObject () at /corert/src/Native/Runtime/arm/AllocFast.S:78
#15 0xb4c9001c in ?? ()

#22 0x000c8b96 in RhpNewArrayRare () at /corert/src/Native/Runtime/arm/AllocFast.S:324
#23 0x005e3f18 in vtable for __Array ()

This looks like that the unwind info is not correct for the assembly stubs. It is not root cause of this bug, but I would recommend fixing this first. Once you fix this, you should see full stacktraces for the failure that will make this crash easier to debug.

Alternatively, you can check the IP of the StackFrameIterator object. It should point to the method with incorrect GC or unwind info.

With portable c++ implementation

GC does not work with C++ codegen. Tracked by #2033.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant