Ignore:
Timestamp:
May 27, 2011, 11:30:08 AM (14 years ago)
Author:
[email protected]
Message:

2011-05-27 Oliver Hunt <[email protected]>

Reviewed by Geoffrey Garen.

Try to release unused executable memory when the FixedVMPool allocator is under pressure
https://bugs.webkit.org/show_bug.cgi?id=61651

Rather than crashing when full the FixedVMPool allocator now returns a null
allocation. We replace the code that used to CRASH() on null allocations
with logic that asks the provided globalData to release any executable memory
that it can. Currently this just means throwing away all regexp code, but
in future we'll try to be more aggressive.

  • assembler/ARMAssembler.cpp: (JSC::ARMAssembler::executableCopy):
  • assembler/ARMAssembler.h:
  • assembler/AssemblerBuffer.h: (JSC::AssemblerBuffer::executableCopy):
  • assembler/AssemblerBufferWithConstantPool.h:
  • assembler/LinkBuffer.h: (JSC::LinkBuffer::LinkBuffer): (JSC::LinkBuffer::linkCode):
  • assembler/MIPSAssembler.h: (JSC::MIPSAssembler::executableCopy):
  • assembler/SH4Assembler.h: (JSC::SH4Assembler::executableCopy):
  • assembler/X86Assembler.h: (JSC::X86Assembler::executableCopy): (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
  • dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::compileFunction):
  • jit/ExecutableAllocator.h: (JSC::ExecutablePool::create): (JSC::ExecutablePool::alloc): (JSC::ExecutableAllocator::ExecutableAllocator): (JSC::ExecutableAllocator::poolForSize): (JSC::ExecutablePool::ExecutablePool): (JSC::ExecutablePool::poolAllocate):
  • jit/ExecutableAllocatorFixedVMPool.cpp: (JSC::FixedVMPoolAllocator::alloc):
  • jit/JIT.cpp: (JSC::JIT::privateCompile):
  • jit/JITOpcodes.cpp: (JSC::JIT::privateCompileCTIMachineTrampolines):
  • jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileCTIMachineTrampolines): (JSC::JIT::privateCompileCTINativeCall):
  • jit/JITPropertyAccess.cpp: (JSC::JIT::stringGetByValStubGenerator): (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::stringGetByValStubGenerator): (JSC::JIT::privateCompilePutByIdTransition): (JSC::JIT::privateCompilePatchGetArrayLength): (JSC::JIT::privateCompileGetByIdProto): (JSC::JIT::privateCompileGetByIdSelfList): (JSC::JIT::privateCompileGetByIdProtoList): (JSC::JIT::privateCompileGetByIdChainList): (JSC::JIT::privateCompileGetByIdChain):
  • jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::finalize):
  • jit/ThunkGenerators.cpp: (JSC::charCodeAtThunkGenerator): (JSC::charAtThunkGenerator): (JSC::fromCharCodeThunkGenerator): (JSC::sqrtThunkGenerator): (JSC::powThunkGenerator):
  • runtime/JSGlobalData.cpp: (JSC::JSGlobalData::JSGlobalData): (JSC::JSGlobalData::releaseExecutableMemory): (JSC::releaseExecutableMemory):
  • runtime/JSGlobalData.h:
  • runtime/RegExpCache.cpp: (JSC::RegExpCache::invalidateCode):
  • runtime/RegExpCache.h:
  • yarr/YarrJIT.cpp: (JSC::Yarr::YarrGenerator::compile):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/assembler/X86Assembler.h

    r86919 r87527  
    15841584    }
    15851585   
    1586     void* executableCopy(ExecutablePool* allocator)
    1587     {
    1588         return m_formatter.executableCopy(allocator);
     1586    void* executableCopy(JSGlobalData& globalData, ExecutablePool* allocator)
     1587    {
     1588        return m_formatter.executableCopy(globalData, allocator);
    15891589    }
    15901590
     
    19201920        void* data() const { return m_buffer.data(); }
    19211921
    1922         void* executableCopy(ExecutablePool* allocator)
    1923         {
    1924             return m_buffer.executableCopy(allocator);
     1922        void* executableCopy(JSGlobalData& globalData, ExecutablePool* allocator)
     1923        {
     1924            return m_buffer.executableCopy(globalData, allocator);
    19251925        }
    19261926
Note: See TracChangeset for help on using the changeset viewer.