Skip to content
  • fpizlo@apple.com's avatar
    It should be possible to jettison JIT stub routines even if they are currently running · 746b8c5b
    fpizlo@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=90731
    
    Reviewed by Gavin Barraclough.
            
    This gives the GC awareness of all JIT-generated stubs for inline caches. That
    means that if you want to delete a JIT-generated stub, you don't have to worry
    about whether or not it is currently running: if there is a chance that it might
    be, the GC will kindly defer deletion until non-running-ness is proved.
    
    * CMakeLists.txt:
    * GNUmakefile.list.am:
    * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    * JavaScriptCore.xcodeproj/project.pbxproj:
    * Target.pri:
    * bytecode/Instruction.h:
    (JSC):
    (PolymorphicStubInfo):
    (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
    (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
    * bytecode/PolymorphicPutByIdList.cpp:
    (JSC::PutByIdAccess::fromStructureStubInfo):
    * bytecode/PolymorphicPutByIdList.h:
    (JSC::PutByIdAccess::transition):
    (JSC::PutByIdAccess::replace):
    (JSC::PutByIdAccess::stubRoutine):
    (PutByIdAccess):
    (JSC::PolymorphicPutByIdList::currentSlowPathTarget):
    * bytecode/StructureStubInfo.h:
    (JSC::StructureStubInfo::reset):
    * dfg/DFGRepatch.cpp:
    (JSC::DFG::generateProtoChainAccessStub):
    (JSC::DFG::tryCacheGetByID):
    (JSC::DFG::tryBuildGetByIDList):
    (JSC::DFG::tryBuildGetByIDProtoList):
    (JSC::DFG::emitPutReplaceStub):
    (JSC::DFG::emitPutTransitionStub):
    (JSC::DFG::tryCachePutByID):
    (JSC::DFG::tryBuildPutByIdList):
    * heap/ConservativeRoots.cpp:
    (JSC):
    (DummyMarkHook):
    (JSC::DummyMarkHook::mark):
    (JSC::ConservativeRoots::add):
    (CompositeMarkHook):
    (JSC::CompositeMarkHook::CompositeMarkHook):
    (JSC::CompositeMarkHook::mark):
    * heap/ConservativeRoots.h:
    (JSC):
    (ConservativeRoots):
    * heap/Heap.cpp:
    (JSC::Heap::markRoots):
    (JSC::Heap::deleteUnmarkedCompiledCode):
    * heap/Heap.h:
    (JSC):
    (Heap):
    * heap/JITStubRoutineSet.cpp: Added.
    (JSC):
    (JSC::JITStubRoutineSet::JITStubRoutineSet):
    (JSC::JITStubRoutineSet::~JITStubRoutineSet):
    (JSC::JITStubRoutineSet::add):
    (JSC::JITStubRoutineSet::clearMarks):
    (JSC::JITStubRoutineSet::markSlow):
    (JSC::JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines):
    (JSC::JITStubRoutineSet::traceMarkedStubRoutines):
    * heap/JITStubRoutineSet.h: Added.
    (JSC):
    (JITStubRoutineSet):
    (JSC::JITStubRoutineSet::mark):
    * heap/MachineStackMarker.h:
    (JSC):
    * interpreter/RegisterFile.cpp:
    (JSC::RegisterFile::gatherConservativeRoots):
    * interpreter/RegisterFile.h:
    (JSC):
    * jit/ExecutableAllocator.cpp:
    (JSC::DemandExecutableAllocator::DemandExecutableAllocator):
    * jit/ExecutableAllocator.h:
    (JSC):
    * jit/ExecutableAllocatorFixedVMPool.cpp:
    (JSC):
    (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
    * jit/GCAwareJITStubRoutine.cpp: Added.
    (JSC):
    (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine):
    (JSC::GCAwareJITStubRoutine::~GCAwareJITStubRoutine):
    (JSC::GCAwareJITStubRoutine::observeZeroRefCount):
    (JSC::GCAwareJITStubRoutine::deleteFromGC):
    (JSC::GCAwareJITStubRoutine::markRequiredObjectsInternal):
    (JSC::MarkingGCAwareJITStubRoutineWithOneObject::MarkingGCAwareJITStubRoutineWithOneObject):
    (JSC::MarkingGCAwareJITStubRoutineWithOneObject::~MarkingGCAwareJITStubRoutineWithOneObject):
    (JSC::MarkingGCAwareJITStubRoutineWithOneObject::markRequiredObjectsInternal):
    (JSC::createJITStubRoutine):
    * jit/GCAwareJITStubRoutine.h: Added.
    (JSC):
    (GCAwareJITStubRoutine):
    (JSC::GCAwareJITStubRoutine::markRequiredObjects):
    (MarkingGCAwareJITStubRoutineWithOneObject):
    * jit/JITPropertyAccess.cpp:
    (JSC::JIT::privateCompilePutByIdTransition):
    (JSC::JIT::privateCompilePatchGetArrayLength):
    (JSC::JIT::privateCompileGetByIdProto):
    (JSC::JIT::privateCompileGetByIdSelfList):
    (JSC::JIT::privateCompileGetByIdProtoList):
    (JSC::JIT::privateCompileGetByIdChainList):
    (JSC::JIT::privateCompileGetByIdChain):
    * jit/JITPropertyAccess32_64.cpp:
    (JSC::JIT::privateCompilePutByIdTransition):
    (JSC::JIT::privateCompilePatchGetArrayLength):
    (JSC::JIT::privateCompileGetByIdProto):
    (JSC::JIT::privateCompileGetByIdSelfList):
    (JSC::JIT::privateCompileGetByIdProtoList):
    (JSC::JIT::privateCompileGetByIdChainList):
    (JSC::JIT::privateCompileGetByIdChain):
    * jit/JITStubRoutine.cpp: Added.
    (JSC):
    (JSC::JITStubRoutine::~JITStubRoutine):
    (JSC::JITStubRoutine::observeZeroRefCount):
    * jit/JITStubRoutine.h: Added.
    (JSC):
    (JITStubRoutine):
    (JSC::JITStubRoutine::JITStubRoutine):
    (JSC::JITStubRoutine::createSelfManagedRoutine):
    (JSC::JITStubRoutine::code):
    (JSC::JITStubRoutine::asCodePtr):
    (JSC::JITStubRoutine::ref):
    (JSC::JITStubRoutine::deref):
    (JSC::JITStubRoutine::startAddress):
    (JSC::JITStubRoutine::endAddress):
    (JSC::JITStubRoutine::addressStep):
    (JSC::JITStubRoutine::canPerformRangeFilter):
    (JSC::JITStubRoutine::filteringStartAddress):
    (JSC::JITStubRoutine::filteringExtentSize):
    (JSC::JITStubRoutine::passesFilter):
    * jit/JITStubs.cpp:
    (JSC::DEFINE_STUB_FUNCTION):
    (JSC::getPolymorphicAccessStructureListSlot):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@122166 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    746b8c5b