Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Upgrade V8 to 3.9.24.9
Browse files Browse the repository at this point in the history
  • Loading branch information
isaacs committed Apr 18, 2012
1 parent 9ad2efe commit 9f40695
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 9 deletions.
3 changes: 2 additions & 1 deletion deps/v8/build/common.gypi
Expand Up @@ -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' ],
}],
],
Expand Down Expand Up @@ -361,6 +361,7 @@
}], # OS=="mac"
['OS=="win"', {
'msvs_configuration_attributes': {
'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)',
'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)',
'CharacterSet': '1',
},
Expand Down
12 changes: 12 additions & 0 deletions deps/v8/src/bootstrapper.cc
Expand Up @@ -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,
Expand Down Expand Up @@ -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_ =
Expand Down
22 changes: 16 additions & 6 deletions 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:
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down
10 changes: 10 additions & 0 deletions deps/v8/src/execution.cc
Expand Up @@ -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());
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 3 additions & 1 deletion deps/v8/src/flag-definitions.h
Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions deps/v8/src/hydrogen.cc
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/version.cc
Expand Up @@ -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
Expand Down
37 changes: 37 additions & 0 deletions 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();} );

0 comments on commit 9f40695

Please sign in to comment.