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

Unified Diff: src/wasm/wasm-debug.h

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/snapshot/code-serializer.cc ('k') | src/wasm/wasm-debug.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/wasm/wasm-debug.h
diff --git a/src/wasm/wasm-debug.h b/src/wasm/wasm-debug.h
index 965995127122cbbc599a7089f4b6d4a10e5db478..f2cc9fa54b7813594f94257f8439f18fe4a7d231 100644
--- a/src/wasm/wasm-debug.h
+++ b/src/wasm/wasm-debug.h
@@ -7,21 +7,83 @@
#include "src/handles.h"
#include "src/objects.h"
+#include "src/wasm/ast-decoder.h"
namespace v8 {
namespace internal {
namespace wasm {
+class WasmInstructionIterator {
+ const byte* const start_;
+ const byte* pc_;
+ const byte* const end_;
+
+ public:
+ WasmInstructionIterator(const byte* start, const byte* end);
+
+ bool Done() const { return pc_ >= end_; }
+ void Next();
+ int pc_offset() const {
+ DCHECK_LE(pc_ - start_, kMaxInt);
+ return static_cast<int>(pc_ - start_);
+ }
+};
+
+class WasmDebugInfo;
+
+class InterpreterFrameInfo {
+ Handle<WasmDebugInfo> debug_info_;
+ int func_index_;
+ int pc_offset_;
+
+ InterpreterFrameInfo(Handle<WasmDebugInfo> debug_info, int func_index,
+ int pc_offset)
+ : debug_info_(debug_info),
+ func_index_(func_index),
+ pc_offset_(pc_offset) {}
+ friend class InterpreterFrameIterator;
+
+ public:
+ InterpreterFrameInfo(const InterpreterFrameInfo& other)
+ : func_index_(other.func_index_), pc_offset_(other.pc_offset_) {}
+ int func_index() const { return func_index_; }
+ int pc_offset() const { return pc_offset_; }
+ Script* GetScript() const;
+};
+
+class WasmInterpreter;
+
+class InterpreterFrameIterator {
+ int frame_nr_;
+ int frame_count_;
+
+ Handle<WasmDebugInfo> debug_info_;
+
+ explicit InterpreterFrameIterator(Handle<WasmDebugInfo> debug_info);
+ friend class WasmDebugInfo;
+
+ public:
+ bool Done() const { return frame_nr_ == frame_count_; }
+ void Next() {
+ DCHECK(!Done());
+ ++frame_nr_;
+ }
+ int Remaining() const { return frame_count_ - frame_nr_ - 1; }
+ InterpreterFrameInfo GetFrameInfo() const;
+};
+
class WasmDebugInfo : public FixedArray {
public:
static Handle<WasmDebugInfo> New(Handle<JSObject> wasm);
- static bool IsDebugInfo(Object* object);
+ static bool IsWasmDebugInfo(Object* object);
static WasmDebugInfo* cast(Object* object);
JSObject* wasm_object();
- bool SetBreakPoint(int byte_offset);
+ static void SetBreakpoint(Handle<WasmDebugInfo> debug_info, int func_index,
+ int byte_offset);
+ bool HasBreakpoint(int func_index, int byte_offset);
// Get the Script for the specified function.
static Script* GetFunctionScript(Handle<WasmDebugInfo> debug_info,
@@ -37,6 +99,36 @@ class WasmDebugInfo : public FixedArray {
// column.
static Handle<FixedArray> GetFunctionOffsetTable(
Handle<WasmDebugInfo> debug_info, int func_index);
+
+ // Get the DebugInfo for the specified function.
+ static DebugInfo* GetDebugInfo(Handle<WasmDebugInfo> debug_info,
+ int func_index);
+
+ enum InstructionType { CALL, RETURN, OTHER };
+
+ // Determine the type of instruction for the given function and offset.
+ // Used to determine the BreakLocation::DebugBreakType.
+ InstructionType GetInstructionType(int func_index, int byte_offset);
+
+ // Get an instruction iterator for the given function.
+ // This iterator might be invalidated when gc happens, so the caller has to
+ // ensure that no heap allocations happen as long as the iterator is in use.
+ static WasmInstructionIterator GetInstructionIterator(
+ Handle<WasmDebugInfo> debug_info, int func_index);
+
+ // Get an iterator to inspect the frames inside the current interpreter.
+ // The frames are inspected upwards, i.e. caller before callee.
+ InterpreterFrameIterator GetInterpreterFrameIterator();
+
+ // Get a pointer to a buffer where arguments to be passed to the interpreter
+ // can be stored.
+ // This is a raw C pointer, encoded in an Object*. Since it is aligned, the GC
+ // will handle it like a Smi.
+ Object* GetInterpreterArgBuffer(int func_index);
+
+ // Run a specific function in the interpreter. The arg buffer must have been
+ // filled before (see GetInterpreterArgBuffer).
+ void RunInterpreter(int func_index);
};
} // namespace wasm
« no previous file with comments | « src/snapshot/code-serializer.cc ('k') | src/wasm/wasm-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698