summaryrefslogtreecommitdiff
path: root/deps/v8/src/frames.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/frames.cc')
-rw-r--r--deps/v8/src/frames.cc40
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());