js/src/assembler/jit/ExecutableAllocator.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
michael@0 2 * vim: set ts=8 sts=4 et sw=4 tw=99:
michael@0 3 *
michael@0 4 * Copyright (C) 2008 Apple Inc. All rights reserved.
michael@0 5 *
michael@0 6 * Redistribution and use in source and binary forms, with or without
michael@0 7 * modification, are permitted provided that the following conditions
michael@0 8 * are met:
michael@0 9 * 1. Redistributions of source code must retain the above copyright
michael@0 10 * notice, this list of conditions and the following disclaimer.
michael@0 11 * 2. Redistributions in binary form must reproduce the above copyright
michael@0 12 * notice, this list of conditions and the following disclaimer in the
michael@0 13 * documentation and/or other materials provided with the distribution.
michael@0 14 *
michael@0 15 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
michael@0 16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
michael@0 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
michael@0 18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
michael@0 19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
michael@0 20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
michael@0 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
michael@0 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
michael@0 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
michael@0 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
michael@0 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
michael@0 26 */
michael@0 27
michael@0 28 #include "assembler/jit/ExecutableAllocator.h"
michael@0 29
michael@0 30 #include "js/MemoryMetrics.h"
michael@0 31
michael@0 32 #if ENABLE_ASSEMBLER
michael@0 33
michael@0 34 namespace JSC {
michael@0 35
michael@0 36 size_t ExecutableAllocator::pageSize = 0;
michael@0 37 size_t ExecutableAllocator::largeAllocSize = 0;
michael@0 38
michael@0 39 ExecutablePool::~ExecutablePool()
michael@0 40 {
michael@0 41 MOZ_ASSERT(m_ionCodeBytes == 0);
michael@0 42 MOZ_ASSERT(m_baselineCodeBytes == 0);
michael@0 43 MOZ_ASSERT(m_regexpCodeBytes == 0);
michael@0 44 MOZ_ASSERT(m_otherCodeBytes == 0);
michael@0 45
michael@0 46 m_allocator->releasePoolPages(this);
michael@0 47 }
michael@0 48
michael@0 49 void
michael@0 50 ExecutableAllocator::addSizeOfCode(JS::CodeSizes *sizes) const
michael@0 51 {
michael@0 52 if (m_pools.initialized()) {
michael@0 53 for (ExecPoolHashSet::Range r = m_pools.all(); !r.empty(); r.popFront()) {
michael@0 54 ExecutablePool* pool = r.front();
michael@0 55 sizes->ion += pool->m_ionCodeBytes;
michael@0 56 sizes->baseline += pool->m_baselineCodeBytes;
michael@0 57 sizes->regexp += pool->m_regexpCodeBytes;
michael@0 58 sizes->other += pool->m_otherCodeBytes;
michael@0 59 sizes->unused += pool->m_allocation.size - pool->m_ionCodeBytes
michael@0 60 - pool->m_baselineCodeBytes
michael@0 61 - pool->m_regexpCodeBytes
michael@0 62 - pool->m_otherCodeBytes;
michael@0 63 }
michael@0 64 }
michael@0 65 }
michael@0 66
michael@0 67 void
michael@0 68 ExecutableAllocator::toggleAllCodeAsAccessible(bool accessible)
michael@0 69 {
michael@0 70 if (!m_pools.initialized())
michael@0 71 return;
michael@0 72
michael@0 73 for (ExecPoolHashSet::Range r = m_pools.all(); !r.empty(); r.popFront()) {
michael@0 74 ExecutablePool* pool = r.front();
michael@0 75 pool->toggleAllCodeAsAccessible(accessible);
michael@0 76 }
michael@0 77 }
michael@0 78
michael@0 79 bool
michael@0 80 ExecutableAllocator::codeContains(char* address)
michael@0 81 {
michael@0 82 if (!m_pools.initialized())
michael@0 83 return false;
michael@0 84
michael@0 85 for (ExecPoolHashSet::Range r = m_pools.all(); !r.empty(); r.popFront()) {
michael@0 86 ExecutablePool* pool = r.front();
michael@0 87 if (pool->codeContains(address))
michael@0 88 return true;
michael@0 89 }
michael@0 90
michael@0 91 return false;
michael@0 92 }
michael@0 93
michael@0 94 }
michael@0 95
michael@0 96 #endif // HAVE(ASSEMBLER)

mercurial