diff options
Diffstat (limited to 'chromium/v8/src/frames.cc')
-rw-r--r-- | chromium/v8/src/frames.cc | 109 |
1 files changed, 21 insertions, 88 deletions
diff --git a/chromium/v8/src/frames.cc b/chromium/v8/src/frames.cc index 37f5b4d9cf1..f33dba8ba29 100644 --- a/chromium/v8/src/frames.cc +++ b/chromium/v8/src/frames.cc @@ -16,8 +16,7 @@ #include "src/string-stream.h" #include "src/visitors.h" #include "src/vm-state-inl.h" -#include "src/wasm/wasm-module.h" -#include "src/wasm/wasm-objects.h" +#include "src/wasm/wasm-objects-inl.h" namespace v8 { namespace internal { @@ -137,25 +136,6 @@ void JavaScriptFrameIterator::Advance() { } while (!iterator_.done() && !iterator_.frame()->is_java_script()); } -void JavaScriptFrameIterator::AdvanceToArgumentsFrame() { - if (!frame()->has_adapted_arguments()) return; - iterator_.Advance(); - DCHECK(iterator_.frame()->is_arguments_adaptor()); -} - -void JavaScriptFrameIterator::AdvanceWhileDebugContext(Debug* debug) { - if (!debug->in_debug_scope()) return; - - while (!done()) { - Context* context = Context::cast(frame()->context()); - if (context->native_context() == *debug->debug_context()) { - Advance(); - } else { - break; - } - } -} - // ------------------------------------------------------------------------- StackTraceFrameIterator::StackTraceFrameIterator(Isolate* isolate) @@ -185,12 +165,6 @@ bool StackTraceFrameIterator::IsValidFrame(StackFrame* frame) const { return frame->is_wasm(); } -void StackTraceFrameIterator::AdvanceToArgumentsFrame() { - if (!is_javascript() || !javascript_frame()->has_adapted_arguments()) return; - iterator_.Advance(); - DCHECK(iterator_.frame()->is_arguments_adaptor()); -} - // ------------------------------------------------------------------------- namespace { @@ -266,9 +240,9 @@ SafeStackFrameIterator::SafeStackFrameIterator( advance_frame = true; } } else { - // Mark the frame as JAVA_SCRIPT if we cannot determine its type. + // Mark the frame as OPTIMIZED if we cannot determine its type. // The frame anyways will be skipped. - type = StackFrame::JAVA_SCRIPT; + type = StackFrame::OPTIMIZED; // Top frame is incomplete so we cannot reliably determine its type. top_frame_type_ = StackFrame::NONE; } @@ -455,7 +429,7 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator, *(state->pc_address))) { return INTERPRETED; } else { - return JAVA_SCRIPT; + return OPTIMIZED; } } } else { @@ -477,8 +451,6 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator, return OPTIMIZED; } return BUILTIN; - case Code::FUNCTION: - return JAVA_SCRIPT; case Code::OPTIMIZED_FUNCTION: return OPTIMIZED; case Code::WASM_FUNCTION: @@ -517,7 +489,6 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator, case WASM_COMPILED: return candidate; case JS_TO_WASM: - case JAVA_SCRIPT: case OPTIMIZED: case INTERPRETED: default: @@ -768,8 +739,7 @@ void StandardFrame::ComputeCallerState(State* state) const { bool StandardFrame::IsConstructor() const { return false; } -void StandardFrame::Summarize(std::vector<FrameSummary>* functions, - FrameSummary::Mode mode) const { +void StandardFrame::Summarize(std::vector<FrameSummary>* functions) const { // This should only be called on frames which override this method. UNREACHABLE(); } @@ -820,7 +790,6 @@ void StandardFrame::IterateCompiledFrame(RootVisitor* v) const { case C_WASM_ENTRY: frame_header_size = TypedFrameConstants::kFixedFrameSizeFromFp; break; - case JAVA_SCRIPT: case OPTIMIZED: case INTERPRETED: case BUILTIN: @@ -993,15 +962,14 @@ void JavaScriptFrame::GetFunctions( } } -void JavaScriptFrame::Summarize(std::vector<FrameSummary>* functions, - FrameSummary::Mode mode) const { +void JavaScriptFrame::Summarize(std::vector<FrameSummary>* functions) const { DCHECK(functions->empty()); Code* code = LookupCode(); int offset = static_cast<int>(pc() - code->instruction_start()); AbstractCode* abstract_code = AbstractCode::cast(code); FrameSummary::JavaScriptFrameSummary summary(isolate(), receiver(), function(), abstract_code, - offset, IsConstructor(), mode); + offset, IsConstructor()); functions->push_back(summary); } @@ -1166,9 +1134,8 @@ bool IsNonDeoptimizingAsmCode(Code* code, JSFunction* function) { FrameSummary::JavaScriptFrameSummary::JavaScriptFrameSummary( Isolate* isolate, Object* receiver, JSFunction* function, - AbstractCode* abstract_code, int code_offset, bool is_constructor, - Mode mode) - : FrameSummaryBase(isolate, JAVA_SCRIPT), + AbstractCode* abstract_code, int code_offset, bool is_constructor) + : FrameSummaryBase(isolate, FrameSummary::JAVA_SCRIPT), receiver_(receiver, isolate), function_(function, isolate), abstract_code_(abstract_code, isolate), @@ -1176,8 +1143,7 @@ FrameSummary::JavaScriptFrameSummary::JavaScriptFrameSummary( is_constructor_(is_constructor) { DCHECK(abstract_code->IsBytecodeArray() || Code::cast(abstract_code)->kind() != Code::OPTIMIZED_FUNCTION || - IsNonDeoptimizingAsmCode(Code::cast(abstract_code), function) || - mode == kApproximateSummary); + IsNonDeoptimizingAsmCode(Code::cast(abstract_code), function)); } bool FrameSummary::JavaScriptFrameSummary::is_subject_to_debugging() const { @@ -1230,16 +1196,11 @@ WASM_SUMMARY_DISPATCH(int, byte_offset) #undef WASM_SUMMARY_DISPATCH int FrameSummary::WasmFrameSummary::SourcePosition() const { - int offset = byte_offset(); Handle<WasmCompiledModule> compiled_module(wasm_instance()->compiled_module(), isolate()); - if (compiled_module->is_asm_js()) { - offset = WasmCompiledModule::GetAsmJsSourcePosition( - compiled_module, function_index(), offset, at_to_number_conversion()); - } else { - offset += compiled_module->GetFunctionOffset(function_index()); - } - return offset; + return WasmCompiledModule::GetSourcePosition(compiled_module, + function_index(), byte_offset(), + at_to_number_conversion()); } Handle<Script> FrameSummary::WasmFrameSummary::script() const { @@ -1353,8 +1314,7 @@ FRAME_SUMMARY_DISPATCH(Handle<Context>, native_context) #undef FRAME_SUMMARY_DISPATCH -void OptimizedFrame::Summarize(std::vector<FrameSummary>* frames, - FrameSummary::Mode mode) const { +void OptimizedFrame::Summarize(std::vector<FrameSummary>* frames) const { DCHECK(frames->empty()); DCHECK(is_optimized()); @@ -1370,9 +1330,6 @@ void OptimizedFrame::Summarize(std::vector<FrameSummary>* frames, DeoptimizationInputData* const data = GetDeoptimizationData(&deopt_index); if (deopt_index == Safepoint::kNoDeoptimizationIndex) { CHECK_NULL(data); - if (mode == FrameSummary::kApproximateSummary) { - return JavaScriptFrame::Summarize(frames, mode); - } FATAL("Missing deoptimization information for OptimizedFrame::Summarize."); } @@ -1631,8 +1588,7 @@ void InterpretedFrame::WriteInterpreterRegister(int register_index, return SetExpression(index + register_index, value); } -void InterpretedFrame::Summarize(std::vector<FrameSummary>* functions, - FrameSummary::Mode mode) const { +void InterpretedFrame::Summarize(std::vector<FrameSummary>* functions) const { DCHECK(functions->empty()); AbstractCode* abstract_code = AbstractCode::cast(function()->shared()->bytecode_array()); @@ -1712,7 +1668,7 @@ Address WasmCompiledFrame::GetCallerStackPointer() const { } WasmInstanceObject* WasmCompiledFrame::wasm_instance() const { - WasmInstanceObject* obj = wasm::GetOwningWasmInstance(LookupCode()); + WasmInstanceObject* obj = WasmInstanceObject::GetOwningInstance(LookupCode()); // This is a live stack frame; it must have a live instance. DCHECK_NOT_NULL(obj); return obj; @@ -1730,8 +1686,7 @@ int WasmCompiledFrame::position() const { return FrameSummary::GetSingle(this).SourcePosition(); } -void WasmCompiledFrame::Summarize(std::vector<FrameSummary>* functions, - FrameSummary::Mode mode) const { +void WasmCompiledFrame::Summarize(std::vector<FrameSummary>* functions) const { DCHECK(functions->empty()); Handle<Code> code(LookupCode(), isolate()); int offset = static_cast<int>(pc() - code->instruction_start()); @@ -1777,8 +1732,8 @@ void WasmInterpreterEntryFrame::Print(StringStream* accumulator, PrintMode mode, if (mode != OVERVIEW) accumulator->Add("\n"); } -void WasmInterpreterEntryFrame::Summarize(std::vector<FrameSummary>* functions, - FrameSummary::Mode mode) const { +void WasmInterpreterEntryFrame::Summarize( + std::vector<FrameSummary>* functions) const { Handle<WasmInstanceObject> instance(wasm_instance(), isolate()); std::vector<std::pair<uint32_t, int>> interpreted_stack = instance->debug_info()->GetInterpretedStack(fp()); @@ -1795,7 +1750,7 @@ Code* WasmInterpreterEntryFrame::unchecked_code() const { } WasmInstanceObject* WasmInterpreterEntryFrame::wasm_instance() const { - WasmInstanceObject* ret = wasm::GetOwningWasmInstance(LookupCode()); + WasmInstanceObject* ret = WasmInstanceObject::GetOwningInstance(LookupCode()); // This is a live stack frame, there must be a live wasm instance available. DCHECK_NOT_NULL(ret); return ret; @@ -1862,13 +1817,7 @@ void JavaScriptFrame::Print(StringStream* accumulator, accumulator->PrintName(script->name()); Address pc = this->pc(); - if (code != NULL && code->kind() == Code::FUNCTION && - pc >= code->instruction_start() && pc < code->instruction_end()) { - int offset = static_cast<int>(pc - code->instruction_start()); - int source_pos = AbstractCode::cast(code)->SourcePosition(offset); - int line = script->GetLineNumber(source_pos) + 1; - accumulator->Add(":%d] [pc=%p]", line, pc); - } else if (is_interpreted()) { + if (is_interpreted()) { const InterpretedFrame* iframe = reinterpret_cast<const InterpretedFrame*>(this); BytecodeArray* bytecodes = iframe->GetBytecodeArray(); @@ -2037,24 +1986,8 @@ void InternalFrame::Iterate(RootVisitor* v) const { if (code->has_tagged_params()) IterateExpressions(v); } - // ------------------------------------------------------------------------- - -JavaScriptFrame* StackFrameLocator::FindJavaScriptFrame(int n) { - DCHECK(n >= 0); - for (int i = 0; i <= n; i++) { - while (!iterator_.frame()->is_java_script()) iterator_.Advance(); - if (i == n) return JavaScriptFrame::cast(iterator_.frame()); - iterator_.Advance(); - } - UNREACHABLE(); -} - - -// ------------------------------------------------------------------------- - - static Map* GcSafeMapOfCodeSpaceObject(HeapObject* object) { MapWord map_word = object->map_word(); return map_word.IsForwardingAddress() ? |