1b1df11df5b7bdcc201852bfcdce0a8eace33b011svenpanne@chromium.org// Copyright 2012 the V8 project authors. All rights reserved.
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file.
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h"
6196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org
7196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/assembler.h"
81e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#include "src/base/once.h"
95de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org#include "src/base/platform/platform.h"
10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/bootstrapper.h"
113e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#include "src/compiler/pipeline.h"
12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/debug.h"
13196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/deoptimizer.h"
144b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/elements.h"
15196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/frames.h"
1631c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org#include "src/heap/store-buffer.h"
17196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/heap-profiler.h"
18196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/hydrogen.h"
194b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/isolate.h"
20196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/lithium-allocator.h"
21196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/objects.h"
22196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/runtime-profiler.h"
234b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/sampler.h"
24196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/serialize.h"
25eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org
267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
2771affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
2871affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
301456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgV8_DECLARE_ONCE(init_once);
31c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org
32837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.orgv8::ArrayBuffer::Allocator* V8::array_buffer_allocator_ = NULL;
3390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.orgv8::Platform* V8::platform_ = NULL;
3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
354a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com
36a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.orgbool V8::Initialize() {
37c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org  InitializeOncePerProcess();
38a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org  return true;
3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid V8::TearDown() {
4343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org  Bootstrapper::TearDownExtensions();
441456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  ElementsAccessor::TearDown();
451456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  LOperand::TearDownCaches();
463e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org  compiler::Pipeline::TearDown();
471f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org  ExternalReference::TearDownMathExpData();
481456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  RegisteredExtension::UnregisterAll();
497c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  Isolate::GlobalTearDown();
50e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  Sampler::TearDown();
51fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org  FlagList::ResetAllFlags();  // Frees memory held by string arguments.
5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org
55967e270a034432457500dbf950d2c4951a929e52ulan@chromium.orgvoid V8::SetReturnAddressLocationResolver(
56967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org      ReturnAddressLocationResolver resolver) {
57967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org  StackFrame::SetReturnAddressLocationResolver(resolver);
58967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org}
59967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org
60967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org
611456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid V8::InitializeOncePerProcessImpl() {
6228381b491d5ea9f256a3937000de7953639ef93fyangguo@chromium.org  FlagList::EnforceFlagImplications();
6371ea97f146aa116d61baeba1912b87a60feda71fhpayer@chromium.org
64bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org  if (FLAG_predictable && FLAG_random_seed == 0) {
65bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org    // Avoid random seeds in predictable mode.
66bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org    FLAG_random_seed = 12347;
6771ea97f146aa116d61baeba1912b87a60feda71fhpayer@chromium.org  }
6871ea97f146aa116d61baeba1912b87a60feda71fhpayer@chromium.org
69b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org  if (FLAG_stress_compaction) {
70b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org    FLAG_force_marking_deque_overflows = true;
71b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org    FLAG_gc_global = true;
723c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org    FLAG_max_semi_space_size = 1;
73b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org  }
74c16e8281e6e3e3b57e157b62d5a1ca530e23e4bfdanno@chromium.org
755de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org  base::OS::Initialize(FLAG_random_seed, FLAG_hard_abort, FLAG_gc_fake_mmap);
76c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.org
77a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org  Isolate::InitializeOncePerProcess();
78a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org
79e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  Sampler::SetUp();
80874aad37f2a832804012c6f56739f4fc6c9283cdmachenbach@chromium.org  CpuFeatures::Probe(false);
81d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org  init_memcopy_functions();
825924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org  // The custom exp implementation needs 16KB of lookup data; initialize it
835924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org  // on demand.
845924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org  init_fast_sqrt_function();
855924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#ifdef _WIN64
865924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org  init_modulo_function();
875924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#endif
8828381b491d5ea9f256a3937000de7953639ef93fyangguo@chromium.org  ElementsAccessor::InitializeOncePerProcess();
891456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  LOperand::SetUpCaches();
903e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org  compiler::Pipeline::SetUp();
917d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org  SetUpJSCallerSavedCodeData();
927d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org  ExternalReference::SetUp();
93bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org  Bootstrapper::InitializeOncePerProcess();
941456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org}
951456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
96e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
971456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid V8::InitializeOncePerProcess() {
981e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org  base::CallOnce(&init_once, &InitializeOncePerProcessImpl);
99c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org}
100c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org
10190dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org
10290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.orgvoid V8::InitializePlatform(v8::Platform* platform) {
1037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(!platform_);
1047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(platform);
10590dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  platform_ = platform;
10690dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org}
10790dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org
10890dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org
10990dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.orgvoid V8::ShutdownPlatform() {
1107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(platform_);
11190dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  platform_ = NULL;
11290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org}
11390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org
11490dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org
11590dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.orgv8::Platform* V8::GetCurrentPlatform() {
116e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org  DCHECK(platform_);
11790dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  return platform_;
11890dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org}
11990dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org
12043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} }  // namespace v8::internal
121