js/src/assembler/jit/ExecutableAllocator.cpp

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

mercurial