diff options
Diffstat (limited to 'deps/v8/src/frames.cc')
-rw-r--r-- | deps/v8/src/frames.cc | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/deps/v8/src/frames.cc b/deps/v8/src/frames.cc index 7e55833b45..0aeda5a5b3 100644 --- a/deps/v8/src/frames.cc +++ b/deps/v8/src/frames.cc @@ -11,6 +11,7 @@ #include "src/deoptimizer.h" #include "src/frames-inl.h" #include "src/full-codegen/full-codegen.h" +#include "src/register-configuration.h" #include "src/safepoint-table.h" #include "src/scopeinfo.h" #include "src/string-stream.h" @@ -333,11 +334,8 @@ void SafeStackFrameIterator::Advance() { // ExternalCallbackScope, just skip them as we cannot collect any useful // information about them. if (external_callback_scope_->scope_address() < frame_->fp()) { - Address* callback_address = - external_callback_scope_->callback_address(); - if (*callback_address != NULL) { - frame_->state_.pc_address = callback_address; - } + frame_->state_.pc_address = + external_callback_scope_->callback_entrypoint_address(); external_callback_scope_ = external_callback_scope_->previous(); DCHECK(external_callback_scope_ == NULL || external_callback_scope_->scope_address() > frame_->fp()); @@ -438,6 +436,19 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator, return JAVA_SCRIPT; case Code::OPTIMIZED_FUNCTION: return OPTIMIZED; + case Code::BUILTIN: + if (!marker->IsSmi()) { + if (StandardFrame::IsArgumentsAdaptorFrame(state->fp)) { + // An adapter frame has a special SMI constant for the context and + // is not distinguished through the marker. + return ARGUMENTS_ADAPTOR; + } else { + // The interpreter entry trampoline has a non-SMI marker. + DCHECK(code_obj->is_interpreter_entry_trampoline()); + return INTERPRETED; + } + } + break; // Marker encodes the frame type. case Code::HANDLER: if (!marker->IsSmi()) { // Only hydrogen code stub handlers can have a non-SMI marker. @@ -450,12 +461,6 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator, } } - if (StandardFrame::IsArgumentsAdaptorFrame(state->fp)) { - // An adapter frame has a special SMI constant for the context and - // is not distinguished through the marker. - return ARGUMENTS_ADAPTOR; - } - // Didn't find a code object, or the code kind wasn't specific enough. // The marker should encode the frame type. return static_cast<StackFrame::Type>(Smi::cast(marker)->value()); @@ -658,7 +663,9 @@ void StandardFrame::IterateCompiledFrame(ObjectVisitor* v) const { if (safepoint_entry.has_doubles()) { // Number of doubles not known at snapshot time. DCHECK(!isolate()->serializer_enabled()); - parameters_base += DoubleRegister::NumAllocatableRegisters() * + parameters_base += + RegisterConfiguration::ArchDefault(RegisterConfiguration::CRANKSHAFT) + ->num_allocatable_double_registers() * kDoubleSize / kPointerSize; } @@ -742,7 +749,7 @@ bool JavaScriptFrame::IsConstructor() const { } -bool JavaScriptFrame::HasInlinedFrames() { +bool JavaScriptFrame::HasInlinedFrames() const { List<JSFunction*> functions(1); GetFunctions(&functions); return functions.length() > 1; @@ -750,6 +757,7 @@ bool JavaScriptFrame::HasInlinedFrames() { Object* JavaScriptFrame::GetOriginalConstructor() const { + DCHECK(!HasInlinedFrames()); Address fp = caller_fp(); if (has_adapted_arguments()) { // Skip the arguments adaptor frame and look at the real caller. @@ -792,7 +800,7 @@ Address JavaScriptFrame::GetCallerStackPointer() const { } -void JavaScriptFrame::GetFunctions(List<JSFunction*>* functions) { +void JavaScriptFrame::GetFunctions(List<JSFunction*>* functions) const { DCHECK(functions->length() == 0); functions->Add(function()); } @@ -1034,7 +1042,7 @@ int OptimizedFrame::LookupExceptionHandlerInTable( DeoptimizationInputData* OptimizedFrame::GetDeoptimizationData( - int* deopt_index) { + int* deopt_index) const { DCHECK(is_optimized()); JSFunction* opt_function = function(); @@ -1058,7 +1066,7 @@ DeoptimizationInputData* OptimizedFrame::GetDeoptimizationData( } -void OptimizedFrame::GetFunctions(List<JSFunction*>* functions) { +void OptimizedFrame::GetFunctions(List<JSFunction*>* functions) const { DCHECK(functions->length() == 0); DCHECK(is_optimized()); |