Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Unified Diff: src/debug/debug-frames.cc

Issue 2096863003: [wasm] prototype for breakpoint support. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@extend-script-functionality
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/debug/debug-frames.h ('k') | src/debug/debug-scopes.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/debug/debug-frames.cc
diff --git a/src/debug/debug-frames.cc b/src/debug/debug-frames.cc
index d331087bdd74945eafe6c96781ecc5a7def78332..e4652a93934e2221d1bf0483c01b5f85ae1e2d22 100644
--- a/src/debug/debug-frames.cc
+++ b/src/debug/debug-frames.cc
@@ -5,19 +5,19 @@
#include "src/debug/debug-frames.h"
#include "src/frames-inl.h"
+#include "src/wasm/wasm-module.h"
namespace v8 {
namespace internal {
-FrameInspector::FrameInspector(StandardFrame* frame, int inlined_jsframe_index,
+FrameInspector::FrameInspector(StandardFrame* frame, int inlined_frame_index,
Isolate* isolate)
- : frame_(frame), deoptimized_frame_(NULL), isolate_(isolate) {
+ : frame_(frame), isolate_(isolate) {
JavaScriptFrame* js_frame =
frame->is_java_script() ? javascript_frame() : nullptr;
DCHECK(js_frame || frame->is_wasm());
has_adapted_arguments_ = js_frame && js_frame->has_adapted_arguments();
- is_bottommost_ = inlined_jsframe_index == 0;
- is_optimized_ = frame_->is_optimized();
+ is_bottommost_ = inlined_frame_index == 0;
is_interpreted_ = frame_->is_interpreted();
// Calculate the deoptimized frame.
if (frame->is_optimized()) {
@@ -26,45 +26,62 @@ FrameInspector::FrameInspector(StandardFrame* frame, int inlined_jsframe_index,
if (js_frame->LookupCode()->is_turbofanned() &&
js_frame->function()->shared()->asm_function() &&
!FLAG_turbo_asm_deoptimization) {
- is_optimized_ = false;
return;
}
- deoptimized_frame_ = Deoptimizer::DebuggerInspectableFrame(
- js_frame, inlined_jsframe_index, isolate);
- }
-}
-
-
-FrameInspector::~FrameInspector() {
- // Get rid of the calculated deoptimized frame if any.
- if (deoptimized_frame_ != NULL) {
- Deoptimizer::DeleteDebuggerInspectableFrame(deoptimized_frame_, isolate_);
+ deoptimized_frame_.reset(Deoptimizer::DebuggerInspectableFrame(
+ js_frame, inlined_frame_index, isolate));
+ } else if (frame->is_wasm_interpreted()) {
+ // Get wasm interpreted frame information.
+ Handle<JSObject> wasm(JSObject::cast(WasmFrame::cast(frame)->wasm_obj()),
+ isolate);
+ wasm::InterpreterFrameIterator frame_it =
+ wasm::GetDebugInfo(wasm)->GetInterpreterFrameIterator();
+ for (int count = inlined_frame_index; count > 0; --count) frame_it.Next();
+ DCHECK(!frame_it.Done());
+ wasm_interpreted_frame_.reset(
+ new wasm::InterpreterFrameInfo(frame_it.GetFrameInfo()));
}
}
int FrameInspector::GetParametersCount() {
- return is_optimized_ ? deoptimized_frame_->parameters_count()
- : frame_->ComputeParametersCount();
+ return deoptimized_frame_ ? deoptimized_frame_->parameters_count()
+ : frame_->ComputeParametersCount();
}
Handle<Script> FrameInspector::GetScript() {
- Object* script = is_optimized_
+ Object* script = deoptimized_frame_
? deoptimized_frame_->GetFunction()->shared()->script()
- : frame_->script();
+ : wasm_interpreted_frame_
+ ? wasm_interpreted_frame_->GetScript()
+ : frame_->script();
return handle(Script::cast(script), isolate_);
}
+bool FrameInspector::HasFunction() {
+ return frame_->is_java_script() || frame_->is_arguments_adaptor();
+}
+
Handle<JSFunction> FrameInspector::GetFunction() {
- DCHECK(!frame_->is_wasm());
- return is_optimized_ ? deoptimized_frame_->GetFunction()
- : handle(javascript_frame()->function(), isolate_);
+ DCHECK(HasFunction());
+ return deoptimized_frame_ ? deoptimized_frame_->GetFunction()
+ : handle(javascript_frame()->function(), isolate_);
+}
+
+Handle<String> FrameInspector::GetFunctionName() {
+ if (!frame_->is_wasm()) return JSFunction::GetDebugName(GetFunction());
+ Handle<JSObject> wasm_obj(JSObject::cast(WasmFrame::cast(frame_)->wasm_obj()),
+ isolate_);
+ int func_index = wasm_interpreted_frame_
+ ? wasm_interpreted_frame_->func_index()
+ : WasmCompiledFrame::cast(frame_)->function_index();
+ return wasm::GetWasmFunctionName(isolate_, wasm_obj, func_index);
}
Handle<Object> FrameInspector::GetParameter(int index) {
- return is_optimized_ ? deoptimized_frame_->GetParameter(index)
- : handle(frame_->GetParameter(index), isolate_);
+ return deoptimized_frame_ ? deoptimized_frame_->GetParameter(index)
+ : handle(frame_->GetParameter(index), isolate_);
}
Handle<Object> FrameInspector::GetExpression(int index) {
@@ -75,35 +92,34 @@ Handle<Object> FrameInspector::GetExpression(int index) {
!FLAG_turbo_asm_deoptimization) {
return isolate_->factory()->undefined_value();
}
- return is_optimized_ ? deoptimized_frame_->GetExpression(index)
- : handle(frame_->GetExpression(index), isolate_);
+ return deoptimized_frame_ ? deoptimized_frame_->GetExpression(index)
+ : handle(frame_->GetExpression(index), isolate_);
}
int FrameInspector::GetSourcePosition() {
- if (is_optimized_) {
- return deoptimized_frame_->GetSourcePosition();
- } else if (is_interpreted_) {
+ if (deoptimized_frame_) return deoptimized_frame_->GetSourcePosition();
+ if (wasm_interpreted_frame_) return wasm_interpreted_frame_->pc_offset();
+ if (is_interpreted_) {
InterpretedFrame* frame = reinterpret_cast<InterpretedFrame*>(frame_);
BytecodeArray* bytecode_array = frame->GetBytecodeArray();
return bytecode_array->SourcePosition(frame->GetBytecodeOffset());
- } else {
- Code* code = frame_->LookupCode();
- int offset = static_cast<int>(frame_->pc() - code->instruction_start());
- return code->SourcePosition(offset);
}
+ Code* code = frame_->LookupCode();
+ int offset = static_cast<int>(frame_->pc() - code->instruction_start());
+ return code->SourcePosition(offset);
}
bool FrameInspector::IsConstructor() {
- return is_optimized_ && !is_bottommost_
+ return deoptimized_frame_ && !is_bottommost_
? deoptimized_frame_->HasConstructStub()
: frame_->IsConstructor();
}
Handle<Object> FrameInspector::GetContext() {
- return is_optimized_ ? deoptimized_frame_->GetContext()
- : handle(frame_->context(), isolate_);
+ return deoptimized_frame_ ? deoptimized_frame_->GetContext()
+ : handle(frame_->context(), isolate_);
}
@@ -113,9 +129,9 @@ void FrameInspector::SetArgumentsFrame(StandardFrame* frame) {
DCHECK(has_adapted_arguments_);
DCHECK(frame->is_arguments_adaptor());
frame_ = frame;
- is_optimized_ = frame_->is_optimized();
+ DCHECK(!frame_->is_optimized());
+ deoptimized_frame_ = nullptr;
is_interpreted_ = frame_->is_interpreted();
- DCHECK(!is_optimized_);
}
@@ -171,7 +187,7 @@ void FrameInspector::MaterializeStackLocals(Handle<JSObject> target,
void FrameInspector::UpdateStackLocalsFromMaterializedObject(
Handle<JSObject> target, Handle<ScopeInfo> scope_info) {
// Optimized frames and wasm frames are not supported. Simply give up.
- if (is_optimized_ || frame_->is_wasm()) return;
+ if (deoptimized_frame_ || frame_->is_wasm()) return;
HandleScope scope(isolate_);
@@ -224,15 +240,11 @@ int DebugFrameHelper::FindIndexedNonNativeFrame(StackTraceFrameIterator* it,
int index) {
int count = -1;
for (; !it->done(); it->Advance()) {
- if (it->is_wasm()) {
- if (++count == index) return 0;
- continue;
- }
List<FrameSummary> frames(FLAG_max_inlining_levels + 1);
- it->javascript_frame()->Summarize(&frames);
+ it->frame()->Summarize(&frames);
for (int i = frames.length() - 1; i >= 0; i--) {
// Omit functions from native and extension scripts.
- if (!frames[i].function()->shared()->IsSubjectToDebugging()) continue;
+ if (!frames[i].is_subject_to_debugging()) continue;
if (++count == index) return i;
}
}
« no previous file with comments | « src/debug/debug-frames.h ('k') | src/debug/debug-scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698