blob: 6989572be8b9ba49c100564de1f86822612f53a5 [file] [log] [blame]
ap@webkit.org80272782008-03-28 20:21:39 +00001/*
2 * Copyright (C) 2008 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include "config.h"
30#include "InitializeThreading.h"
31
fpizlo@apple.come6a7f5f2011-09-11 05:49:36 +000032#include "ExecutableAllocator.h"
ggaren@apple.coma8b38542011-01-10 23:43:56 +000033#include "Heap.h"
commit-queue@webkit.orga2e15982011-12-15 12:01:30 +000034#include "Options.h"
cwzwarich@webkit.org858b2b62008-11-05 23:37:21 +000035#include "Identifier.h"
abarth@webkit.org2e4652a2011-11-15 00:04:53 +000036#include "JSDateMath.h"
ap@webkit.orgfb851402008-04-28 18:22:14 +000037#include "JSGlobalObject.h"
cwzwarich@webkit.org0b51a732008-11-05 23:21:32 +000038#include "UString.h"
fpizlo@apple.comaec7e0c2011-08-24 09:50:40 +000039#include "WriteBarrier.h"
fpizlo@apple.come6a7f5f2011-09-11 05:49:36 +000040#include "dtoa.h"
ap@webkit.org80272782008-03-28 20:21:39 +000041#include <wtf/Threading.h>
commit-queue@webkit.org35b9d962011-09-05 06:48:18 +000042#include <wtf/dtoa/cached-powers.h>
ap@webkit.org80272782008-03-28 20:21:39 +000043
cwzwarich@webkit.org770a8a82008-11-14 17:49:56 +000044using namespace WTF;
45
cwzwarich@webkit.org3f782f62008-09-08 01:28:33 +000046namespace JSC {
ap@webkit.org80272782008-03-28 20:21:39 +000047
ggaren@apple.come2f27912011-09-20 03:35:49 +000048#if OS(DARWIN)
ap@webkit.org3d4a5412008-05-02 10:29:47 +000049static pthread_once_t initializeThreadingKeyOnce = PTHREAD_ONCE_INIT;
50#endif
51
52static void initializeThreadingOnce()
ap@webkit.org80272782008-03-28 20:21:39 +000053{
commit-queue@webkit.org35b9d962011-09-05 06:48:18 +000054 WTF::double_conversion::initialize();
ap@webkit.org80272782008-03-28 20:21:39 +000055 WTF::initializeThreading();
commit-queue@webkit.orga2e15982011-12-15 12:01:30 +000056 Options::initializeOptions();
fpizlo@apple.comaec7e0c2011-08-24 09:50:40 +000057#if ENABLE(WRITE_BARRIER_PROFILING)
58 WriteBarrierCounters::initialize();
59#endif
ap@apple.com1348bdf2010-01-08 00:15:05 +000060 JSGlobalData::storeVPtrs();
paroga@webkit.orge2f4da72011-09-12 11:03:02 +000061#if ENABLE(JIT) && ENABLE(ASSEMBLER)
fpizlo@apple.come6a7f5f2011-09-11 05:49:36 +000062 ExecutableAllocator::initializeAllocator();
paroga@webkit.orge2f4da72011-09-12 11:03:02 +000063#endif
slewis@apple.comb2725f72010-09-10 00:21:43 +000064 RegisterFile::initializeThreading();
ap@webkit.org3d4a5412008-05-02 10:29:47 +000065}
66
67void initializeThreading()
68{
ggaren@apple.come2f27912011-09-20 03:35:49 +000069#if OS(DARWIN)
ap@webkit.org3d4a5412008-05-02 10:29:47 +000070 pthread_once(&initializeThreadingKeyOnce, initializeThreadingOnce);
71#else
72 static bool initializedThreading = false;
73 if (!initializedThreading) {
74 initializeThreadingOnce();
75 initializedThreading = true;
ap@webkit.org7d34b912008-04-11 16:40:15 +000076 }
ap@webkit.org80272782008-03-28 20:21:39 +000077#endif
78}
79
cwzwarich@webkit.org3f782f62008-09-08 01:28:33 +000080} // namespace JSC