diff options
author | isaacs <i@izs.me> | 2012-04-18 05:16:27 +0400 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-04-18 20:36:44 +0400 |
commit | 6ed5ef5fe0201b99967d391bda1b5da389ae138a (patch) | |
tree | b74433bda835a52f0b4a4fee48f844d69b24ecec /deps | |
parent | c8bbd13ea8d692f9f28f69cbb7ff321d7b998126 (diff) |
Upgrade V8 to 3.9.24.9
Diffstat (limited to 'deps')
-rw-r--r-- | deps/v8/build/common.gypi | 3 | ||||
-rw-r--r-- | deps/v8/src/bootstrapper.cc | 12 | ||||
-rw-r--r-- | deps/v8/src/debug.cc | 22 | ||||
-rw-r--r-- | deps/v8/src/execution.cc | 10 | ||||
-rw-r--r-- | deps/v8/src/flag-definitions.h | 4 | ||||
-rw-r--r-- | deps/v8/src/hydrogen.cc | 8 | ||||
-rw-r--r-- | deps/v8/src/version.cc | 2 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/regress/regress-119429.js | 37 |
8 files changed, 89 insertions, 9 deletions
diff --git a/deps/v8/build/common.gypi b/deps/v8/build/common.gypi index f2bb465c1ed..5c0c3234126 100644 --- a/deps/v8/build/common.gypi +++ b/deps/v8/build/common.gypi @@ -314,7 +314,7 @@ 'cflags': [ '-I/usr/pkg/include' ], }], ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', { - 'cflags': [ '-Wno-unused-parameter', + 'cflags': [ '-Wall', '<(werror)', '-W', '-Wno-unused-parameter', '-Wnon-virtual-dtor', '-Woverloaded-virtual' ], }], ], @@ -361,6 +361,7 @@ }], # OS=="mac" ['OS=="win"', { 'msvs_configuration_attributes': { + 'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)', 'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)', 'CharacterSet': '1', }, diff --git a/deps/v8/src/bootstrapper.cc b/deps/v8/src/bootstrapper.cc index a48bb4df4d7..0e95b4b8397 100644 --- a/deps/v8/src/bootstrapper.cc +++ b/deps/v8/src/bootstrapper.cc @@ -1301,6 +1301,12 @@ bool Genesis::CompileNative(Vector<const char> name, Handle<String> source) { #ifdef ENABLE_DEBUGGER_SUPPORT isolate->debugger()->set_compiling_natives(true); #endif + // During genesis, the boilerplate for stack overflow won't work until the + // environment has been at least partially initialized. Add a stack check + // before entering JS code to catch overflow early. + StackLimitCheck check(Isolate::Current()); + if (check.HasOverflowed()) return false; + bool result = CompileScriptCached(name, source, NULL, @@ -2289,6 +2295,12 @@ Genesis::Genesis(Isolate* isolate, HandleScope scope; SaveContext saved_context(isolate); + // During genesis, the boilerplate for stack overflow won't work until the + // environment has been at least partially initialized. Add a stack check + // before entering JS code to catch overflow early. + StackLimitCheck check(Isolate::Current()); + if (check.HasOverflowed()) return; + Handle<Context> new_context = Snapshot::NewContextFromSnapshot(); if (!new_context.is_null()) { global_context_ = diff --git a/deps/v8/src/debug.cc b/deps/v8/src/debug.cc index 01f6f398af7..f8a1ecf4f90 100644 --- a/deps/v8/src/debug.cc +++ b/deps/v8/src/debug.cc @@ -1,4 +1,4 @@ -// Copyright 2011 the V8 project authors. All rights reserved. +// Copyright 2012 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: @@ -767,15 +767,22 @@ bool Debug::CompileDebuggerScript(int index) { Handle<JSFunction> function = factory->NewFunctionFromSharedFunctionInfo(function_info, context); - Execution::TryCall(function, Handle<Object>(context->global()), - 0, NULL, &caught_exception); + Handle<Object> exception = + Execution::TryCall(function, Handle<Object>(context->global()), + 0, NULL, &caught_exception); // Check for caught exceptions. if (caught_exception) { + ASSERT(!isolate->has_pending_exception()); + MessageLocation computed_location; + isolate->ComputeLocation(&computed_location); Handle<Object> message = MessageHandler::MakeMessageObject( - "error_loading_debugger", NULL, Vector<Handle<Object> >::empty(), - Handle<String>(), Handle<JSArray>()); + "error_loading_debugger", &computed_location, + Vector<Handle<Object> >::empty(), Handle<String>(), Handle<JSArray>()); + ASSERT(!isolate->has_pending_exception()); + isolate->set_pending_exception(*exception); MessageHandler::ReportMessage(Isolate::Current(), NULL, message); + isolate->clear_pending_exception(); return false; } @@ -813,6 +820,9 @@ bool Debug::Load() { v8::Handle<ObjectTemplate>(), NULL); + // Fail if no context could be created. + if (context.is_null()) return false; + // Use the debugger context. SaveContext save(isolate_); isolate_->set_context(*context); @@ -3239,7 +3249,7 @@ EnterDebugger::~EnterDebugger() { debug->SetBreak(break_frame_id_, break_id_); // Check for leaving the debugger. - if (prev_ == NULL) { + if (!load_failed_ && prev_ == NULL) { // Clear mirror cache when leaving the debugger. Skip this if there is a // pending exception as clearing the mirror cache calls back into // JavaScript. This can happen if the v8::Debug::Call is used in which diff --git a/deps/v8/src/execution.cc b/deps/v8/src/execution.cc index ea8cc3725d7..56189756737 100644 --- a/deps/v8/src/execution.cc +++ b/deps/v8/src/execution.cc @@ -826,6 +826,11 @@ Object* Execution::DebugBreakHelper() { return isolate->heap()->undefined_value(); } + StackLimitCheck check(isolate); + if (check.HasOverflowed()) { + return isolate->heap()->undefined_value(); + } + { JavaScriptFrameIterator it(isolate); ASSERT(!it.done()); @@ -862,6 +867,11 @@ void Execution::ProcessDebugMessages(bool debug_command_only) { // Clear the debug command request flag. isolate->stack_guard()->Continue(DEBUGCOMMAND); + StackLimitCheck check(isolate); + if (check.HasOverflowed()) { + return; + } + HandleScope scope(isolate); // Enter the debugger. Just continue if we fail to enter the debugger. EnterDebugger debugger; diff --git a/deps/v8/src/flag-definitions.h b/deps/v8/src/flag-definitions.h index 0668addb488..75697a89068 100644 --- a/deps/v8/src/flag-definitions.h +++ b/deps/v8/src/flag-definitions.h @@ -310,7 +310,9 @@ DEFINE_bool(enable_liveedit, true, "enable liveedit experimental feature") DEFINE_bool(break_on_abort, true, "always cause a debug break before aborting") // execution.cc -DEFINE_int(stack_size, kPointerSize * 128, +// Slightly less than 1MB on 64-bit, since Windows' default stack size for +// the main execution thread is 1MB for both 32 and 64-bit. +DEFINE_int(stack_size, kPointerSize * 123, "default size of stack region v8 is allowed to use (in kBytes)") // frames.cc diff --git a/deps/v8/src/hydrogen.cc b/deps/v8/src/hydrogen.cc index 9b774082327..34fd1bc10ac 100644 --- a/deps/v8/src/hydrogen.cc +++ b/deps/v8/src/hydrogen.cc @@ -2454,6 +2454,10 @@ HGraph* HGraphBuilder::CreateGraph() { Bailout("function with illegal redeclaration"); return NULL; } + if (scope->calls_eval()) { + Bailout("function calls eval"); + return NULL; + } SetUpScope(scope); // Add an edge to the body entry. This is warty: the graph's start @@ -5865,6 +5869,10 @@ void HGraphBuilder::VisitCall(Call* expr) { VariableProxy* proxy = expr->expression()->AsVariableProxy(); bool global_call = proxy != NULL && proxy->var()->IsUnallocated(); + if (proxy != NULL && proxy->var()->is_possibly_eval()) { + return Bailout("possible direct call to eval"); + } + if (global_call) { Variable* var = proxy->var(); bool known_global_function = false; diff --git a/deps/v8/src/version.cc b/deps/v8/src/version.cc index 81681f28b8a..d23fe618eb8 100644 --- a/deps/v8/src/version.cc +++ b/deps/v8/src/version.cc @@ -35,7 +35,7 @@ #define MAJOR_VERSION 3 #define MINOR_VERSION 9 #define BUILD_NUMBER 24 -#define PATCH_LEVEL 7 +#define PATCH_LEVEL 9 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) #define IS_CANDIDATE_VERSION 0 diff --git a/deps/v8/test/mjsunit/regress/regress-119429.js b/deps/v8/test/mjsunit/regress/regress-119429.js new file mode 100644 index 00000000000..a87648754a4 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-119429.js @@ -0,0 +1,37 @@ +// Copyright 2012 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Flags: --allow-natives-syntax + +var d = 0; +function recurse() { + if (++d == 25135) { // A magic number just below stack overflow on ia32 + %DebugBreak(); + } + recurse(); +} +assertThrows(function() { recurse();} ); |