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