From 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Tue, 27 Jun 2017 06:07:23 +0000 Subject: webkitgtk-2.16.5 --- Source/JavaScriptCore/interpreter/JSStack.cpp | 160 -------------------------- 1 file changed, 160 deletions(-) delete mode 100644 Source/JavaScriptCore/interpreter/JSStack.cpp (limited to 'Source/JavaScriptCore/interpreter/JSStack.cpp') diff --git a/Source/JavaScriptCore/interpreter/JSStack.cpp b/Source/JavaScriptCore/interpreter/JSStack.cpp deleted file mode 100644 index 8b73d3cc9..000000000 --- a/Source/JavaScriptCore/interpreter/JSStack.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright (C) 2008, 2013 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "JSStackInlines.h" - -#include "ConservativeRoots.h" -#include "Interpreter.h" -#include - -namespace JSC { - -static size_t committedBytesCount = 0; - -static Mutex& stackStatisticsMutex() -{ - DEFINE_STATIC_LOCAL(Mutex, staticMutex, ()); - return staticMutex; -} - -static size_t commitSize() -{ - static size_t size = 0; - if (!size) - size = std::max(16 * 1024, static_cast(WTF::pageSize())); - return size; -} - -JSStack::JSStack(VM& vm, size_t capacity) - : m_vm(vm) - , m_end(0) - , m_topCallFrame(vm.topCallFrame) -{ - ASSERT(capacity && isPageAligned(capacity)); - - m_reservation = PageReservation::reserve(roundUpAllocationSize(capacity * sizeof(Register), commitSize()), OSAllocator::JSVMStackPages); - updateStackLimit(highAddress()); - m_commitEnd = highAddress(); - - disableErrorStackReserve(); - - m_topCallFrame = 0; -} - -JSStack::~JSStack() -{ - void* highAddress = reinterpret_cast(static_cast(m_reservation.base()) + m_reservation.size()); - m_reservation.decommit(reinterpret_cast(m_commitEnd), reinterpret_cast(highAddress) - reinterpret_cast(m_commitEnd)); - addToCommittedByteCount(-(reinterpret_cast(highAddress) - reinterpret_cast(m_commitEnd))); - m_reservation.deallocate(); -} - -bool JSStack::growSlowCase(Register* newEnd) -{ - // If we have already committed enough memory to satisfy this request, - // just update the end pointer and return. - if (newEnd >= m_commitEnd) { - updateStackLimit(newEnd); - return true; - } - - // Compute the chunk size of additional memory to commit, and see if we - // have it is still within our budget. If not, we'll fail to grow and - // return false. - long delta = roundUpAllocationSize(reinterpret_cast(m_commitEnd) - reinterpret_cast(newEnd), commitSize()); - if (reinterpret_cast(m_commitEnd) - delta <= reinterpret_cast(m_useableEnd)) - return false; - - // Otherwise, the growth is still within our budget. Go ahead and commit - // it and return true. - m_reservation.commit(reinterpret_cast(m_commitEnd) - delta, delta); - addToCommittedByteCount(delta); - m_commitEnd = reinterpret_cast_ptr(reinterpret_cast(m_commitEnd) - delta); - updateStackLimit(newEnd); - return true; -} - -void JSStack::gatherConservativeRoots(ConservativeRoots& conservativeRoots) -{ - conservativeRoots.add(getBaseOfStack(), getTopOfStack()); -} - -void JSStack::gatherConservativeRoots(ConservativeRoots& conservativeRoots, JITStubRoutineSet& jitStubRoutines, CodeBlockSet& codeBlocks) -{ - conservativeRoots.add(getBaseOfStack(), getTopOfStack(), jitStubRoutines, codeBlocks); -} - -void JSStack::releaseExcessCapacity() -{ - ptrdiff_t delta = reinterpret_cast(highAddress()) - reinterpret_cast(m_commitEnd); - m_reservation.decommit(m_commitEnd, delta); - addToCommittedByteCount(-delta); - m_commitEnd = highAddress(); -} - -void JSStack::initializeThreading() -{ - stackStatisticsMutex(); -} - -size_t JSStack::committedByteCount() -{ - MutexLocker locker(stackStatisticsMutex()); - return committedBytesCount; -} - -void JSStack::addToCommittedByteCount(long byteCount) -{ - MutexLocker locker(stackStatisticsMutex()); - ASSERT(static_cast(committedBytesCount) + byteCount > -1); - committedBytesCount += byteCount; -} - -void JSStack::enableErrorStackReserve() -{ - m_useableEnd = reservationEnd(); -} - -void JSStack::disableErrorStackReserve() -{ - char* useableEnd = reinterpret_cast(reservationEnd()) + commitSize(); - m_useableEnd = reinterpret_cast_ptr(useableEnd); - - // By the time we get here, we are guaranteed to be destructing the last - // Interpreter::ErrorHandlingMode that enabled this reserve in the first - // place. That means the stack space beyond m_useableEnd before we - // enabled the reserve was not previously in use. Hence, it is safe to - // shrink back to that m_useableEnd. - if (m_end < m_useableEnd) { - ASSERT(m_topCallFrame->frameExtent() >= m_useableEnd); - shrink(m_useableEnd); - } -} - -} // namespace JSC -- cgit v1.2.1