Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash in GC #151

Open
dnakamura opened this issue Mar 12, 2018 · 2 comments
Open

Crash in GC #151

dnakamura opened this issue Mar 12, 2018 · 2 comments

Comments

@dnakamura
Copy link
Collaborator

dnakamura commented Mar 12, 2018

There seems to be a crash in the GC which can be triggered by overwriting object pointers.

Test case (custom assembler syntax):

proc b9main,0,3
	;create some objects
	new
	store 0
	
	new
	store 1
	
	new 
	store 2
	
	; over write the objects stored in locals
	new
	dup
	store 0
	dup
	store 1
	dup
	store 2
	
	; keep allocating some new objects to force a gc
	new
	new
	new
	new
	new
endproc

STR sDummy,"xyz"

Output:

$ b9run crash_test.mod
terminate called after throwing an instance of 'std::runtime_error'
  what():  Unrecognized cell type
Aborted (core dumped)

Stack trace:

#0  0x00007ffffdb45428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1  0x00007ffffdb4702a in __GI_abort () at abort.c:89
#2  0x00007ffffe18f84d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffffe18d6b6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffffe18d701 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffffe18d919 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007ffffeef9159 in OMR::Om::ObjectModelDelegate::getObjectSizeInBytesWithHeader (cell=0x7ffffd1c0168,
    this=0x6252a0) at ../om/glue/ObjectModelDelegate.hpp:116
#7  GC_ObjectModelBase::getSizeInBytesWithHeader (objectPtr=0x7ffffd1c0168, this=0x625290)
    at ../third_party/omr/gc/base/ObjectModelBase.hpp:212
#8  GC_ObjectModelBase::getConsumedSizeInBytesWithHeader (objectPtr=0x7ffffd1c0168, this=0x625290)
    at ../third_party/omr/gc/base/ObjectModelBase.hpp:230
#9  GC_ObjectHeapIteratorAddressOrderedList::nextObject (this=0x7ffffffdca40)
    at ../third_party/omr/gc/base/ObjectHeapIteratorAddressOrderedList.hpp:161
#10 0x00007ffffeec7529 in MM_GlobalCollectorDelegate::poisonUnmarkedObjectsInRegion (this=0x62ca20, objectIterator=...)
    at ../om/glue/GlobalCollectorDelegate.cpp:35
#11 0x00007ffffeec7ade in MM_GlobalCollectorDelegate::poisonUnmarkedObjects (this=0x62ca20, env=0x62b9c8)
    at ../om/glue/GlobalCollectorDelegate.cpp:64
#12 0x00007ffffeec7b1b in MM_GlobalCollectorDelegate::postMarkProcessing (this=0x62ca20, env=0x62b9c8)
    at ../om/glue/GlobalCollectorDelegate.cpp:72
#13 0x00007ffffeeb0d46 in MM_ParallelGlobalGC::masterThreadGarbageCollect (this=0x62c9e0, env=0x62b9c8,
    allocDescription=0x0, initMarkMap=true, rebuildMarkBits=false)
    at ../third_party/omr/gc/base/standard/ParallelGlobalGC.cpp:383
#14 0x00007ffffeeb1fe5 in MM_ParallelGlobalGC::internalGarbageCollect (this=0x62c9e0, env=0x62b9c8, subSpace=0x652100,
    allocDescription=0x0) at ../third_party/omr/gc/base/standard/ParallelGlobalGC.cpp:1069
#15 0x00007ffffeec9d15 in MM_Collector::garbageCollect (this=0x62c9e0, env=0x62b9c8, callingSubSpace=0x652100,
    allocateDescription=0x0, gcCode=0, objectAllocationInterface=0x0, baseSubSpace=0x0, context=0x0)
    at ../third_party/omr/gc/base/Collector.cpp:494
---Type <return> to continue, or q <return> to quit---
#16 0x00007ffffeea9586 in MM_MemorySubSpace::systemGarbageCollect (this=0x652100, env=0x62b9c8, gcCode=0)
    at ../third_party/omr/gc/base/MemorySubSpace.cpp:951
#17 0x00007ffffeea9497 in MM_MemorySubSpace::systemGarbageCollect (this=0x651d50, env=0x62b9c8, gcCode=0)
    at ../third_party/omr/gc/base/MemorySubSpace.cpp:921
#18 0x00007ffffeea5c5a in MM_MemorySpace::systemGarbageCollect (this=0x652470, env=0x62b9c8, gcCode=0)
    at ../third_party/omr/gc/base/MemorySpace.cpp:400
#19 0x00007ffffeea2d95 in MM_Heap::systemGarbageCollect (this=0x62b420, env=0x62b9c8, gcCode=0)
    at ../third_party/omr/gc/base/Heap.cpp:108
#20 0x00007ffffeeba0e0 in OMR_GC_SystemCollect (omrVMThread=0x652a30, gcCode=0)
    at ../third_party/omr/gc/startup/omrgcalloc.cpp:66
#21 0x00007ffffe93ee00 in OMR::Om::BaseAllocator::allocate<OMR::Om::ObjectMap, OMR::Om::ObjectMapInitializer> (cx=...,
    init=..., size=56) at ../om/include/OMR/Om/Allocator.inl.hpp:23
#22 0x00007ffffe93c1b4 in OMR::Om::ObjectMap::allocate (cx=..., parent=..., attributes=...)
    at ../om/include/OMR/Om/ObjectMap.inl.hpp:42
#23 0x00007ffffe93c2ed in OMR::Om::ObjectMap::allocate (cx=...) at ../om/include/OMR/Om/ObjectMap.inl.hpp:59
#24 0x00007ffffe93baa4 in OMR::Om::Object::allocate (cx=...) at ../om/include/OMR/Om/Object.inl.hpp:141
#25 0x00007ffffe93938f in b9::ExecutionContext::doNewObject (this=0x655360) at ../b9/src/ExecutionContext.cpp:349
#26 0x00007ffffe9385ed in b9::ExecutionContext::interpret (this=0x655360, functionIndex=0)
    at ../b9/src/ExecutionContext.cpp:171
#27 0x00007ffffe947a5c in b9::VirtualMachine::run (this=0x7ffffffdd520, functionIndex=0,
    usrArgs=std::vector of length 0, capacity 0) at ../b9/src/core.cpp:147
#28 0x0000000000406fca in run (runtime=..., cfg=...) at ../b9run/main.cpp:142
#29 0x00000000004071d3 in main (argc=2, argv=0x7ffffffde268) at ../b9run/main.cpp:161#0  0x00007ffffdb45428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1  0x00007ffffdb4702a in __GI_abort () at abort.c:89
#2  0x00007ffffe18f84d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffffe18d6b6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffffe18d701 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffffe18d919 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007ffffeef9159 in OMR::Om::ObjectModelDelegate::getObjectSizeInBytesWithHeader (cell=0x7ffffd1c0168,
    this=0x6252a0) at ../om/glue/ObjectModelDelegate.hpp:116
#7  GC_ObjectModelBase::getSizeInBytesWithHeader (objectPtr=0x7ffffd1c0168, this=0x625290)
    at ../third_party/omr/gc/base/ObjectModelBase.hpp:212
#8  GC_ObjectModelBase::getConsumedSizeInBytesWithHeader (objectPtr=0x7ffffd1c0168, this=0x625290)
    at ../third_party/omr/gc/base/ObjectModelBase.hpp:230
#9  GC_ObjectHeapIteratorAddressOrderedList::nextObject (this=0x7ffffffdca40)
    at ../third_party/omr/gc/base/ObjectHeapIteratorAddressOrderedList.hpp:161
#10 0x00007ffffeec7529 in MM_GlobalCollectorDelegate::poisonUnmarkedObjectsInRegion (this=0x62ca20, objectIterator=...)
    at ../om/glue/GlobalCollectorDelegate.cpp:35
#11 0x00007ffffeec7ade in MM_GlobalCollectorDelegate::poisonUnmarkedObjects (this=0x62ca20, env=0x62b9c8)
    at ../om/glue/GlobalCollectorDelegate.cpp:64
#12 0x00007ffffeec7b1b in MM_GlobalCollectorDelegate::postMarkProcessing (this=0x62ca20, env=0x62b9c8)
    at ../om/glue/GlobalCollectorDelegate.cpp:72
#13 0x00007ffffeeb0d46 in MM_ParallelGlobalGC::masterThreadGarbageCollect (this=0x62c9e0, env=0x62b9c8,
    allocDescription=0x0, initMarkMap=true, rebuildMarkBits=false)
    at ../third_party/omr/gc/base/standard/ParallelGlobalGC.cpp:383
#14 0x00007ffffeeb1fe5 in MM_ParallelGlobalGC::internalGarbageCollect (this=0x62c9e0, env=0x62b9c8, subSpace=0x652100,
    allocDescription=0x0) at ../third_party/omr/gc/base/standard/ParallelGlobalGC.cpp:1069
#15 0x00007ffffeec9d15 in MM_Collector::garbageCollect (this=0x62c9e0, env=0x62b9c8, callingSubSpace=0x652100,
    allocateDescription=0x0, gcCode=0, objectAllocationInterface=0x0, baseSubSpace=0x0, context=0x0)
    at ../third_party/omr/gc/base/Collector.cpp:494
#16 0x00007ffffeea9586 in MM_MemorySubSpace::systemGarbageCollect (this=0x652100, env=0x62b9c8, gcCode=0)
    at ../third_party/omr/gc/base/MemorySubSpace.cpp:951
#17 0x00007ffffeea9497 in MM_MemorySubSpace::systemGarbageCollect (this=0x651d50, env=0x62b9c8, gcCode=0)
    at ../third_party/omr/gc/base/MemorySubSpace.cpp:921
#18 0x00007ffffeea5c5a in MM_MemorySpace::systemGarbageCollect (this=0x652470, env=0x62b9c8, gcCode=0)
    at ../third_party/omr/gc/base/MemorySpace.cpp:400
#19 0x00007ffffeea2d95 in MM_Heap::systemGarbageCollect (this=0x62b420, env=0x62b9c8, gcCode=0)
    at ../third_party/omr/gc/base/Heap.cpp:108
#20 0x00007ffffeeba0e0 in OMR_GC_SystemCollect (omrVMThread=0x652a30, gcCode=0)
    at ../third_party/omr/gc/startup/omrgcalloc.cpp:66
#21 0x00007ffffe93ee00 in OMR::Om::BaseAllocator::allocate<OMR::Om::ObjectMap, OMR::Om::ObjectMapInitializer> (cx=...,
    init=..., size=56) at ../om/include/OMR/Om/Allocator.inl.hpp:23
#22 0x00007ffffe93c1b4 in OMR::Om::ObjectMap::allocate (cx=..., parent=..., attributes=...)
    at ../om/include/OMR/Om/ObjectMap.inl.hpp:42
#23 0x00007ffffe93c2ed in OMR::Om::ObjectMap::allocate (cx=...) at ../om/include/OMR/Om/ObjectMap.inl.hpp:59
#24 0x00007ffffe93baa4 in OMR::Om::Object::allocate (cx=...) at ../om/include/OMR/Om/Object.inl.hpp:141
#25 0x00007ffffe93938f in b9::ExecutionContext::doNewObject (this=0x655360) at ../b9/src/ExecutionContext.cpp:349
#26 0x00007ffffe9385ed in b9::ExecutionContext::interpret (this=0x655360, functionIndex=0)
    at ../b9/src/ExecutionContext.cpp:171
#27 0x00007ffffe947a5c in b9::VirtualMachine::run (this=0x7ffffffdd520, functionIndex=0,
    usrArgs=std::vector of length 0, capacity 0) at ../b9/src/core.cpp:147
#28 0x0000000000406fca in run (runtime=..., cfg=...) at ../b9run/main.cpp:142
#29 0x00000000004071d3 in main (argc=2, argv=0x7ffffffde268) at ../b9run/main.cpp:161

crash_test.zip

@rwy7
Copy link
Member

rwy7 commented Mar 13, 2018

Can you upload the module that your assembly compiles to?

@rwy7
Copy link
Member

rwy7 commented Mar 13, 2018

By the way, there is a system_collect bytecode 👍

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

No branches or pull requests

2 participants