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

Unified Diff: src/frames.h

Issue 1712003003: Add WasmFrame, backtraces reflect wasm's presence (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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 | « no previous file | src/frames.cc » ('j') | src/isolate.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/frames.h
diff --git a/src/frames.h b/src/frames.h
index f33eb167414af18081c82864dde237c3f5a46c2e..fe289b28206790d3e71f673c51a5584b21c22d0e 100644
--- a/src/frames.h
+++ b/src/frames.h
@@ -97,13 +97,13 @@ class StackHandler BASE_EMBEDDED {
DISALLOW_IMPLICIT_CONSTRUCTORS(StackHandler);
};
-
#define STACK_FRAME_TYPE_LIST(V) \
V(ENTRY, EntryFrame) \
V(ENTRY_CONSTRUCT, EntryConstructFrame) \
V(EXIT, ExitFrame) \
V(JAVA_SCRIPT, JavaScriptFrame) \
V(OPTIMIZED, OptimizedFrame) \
+ V(WASM, WasmFrame) \
V(INTERPRETED, InterpretedFrame) \
V(STUB, StubFrame) \
V(STUB_FAILURE_TRAMPOLINE, StubFailureTrampolineFrame) \
@@ -310,6 +310,7 @@ class StackFrame BASE_EMBEDDED {
bool is_exit() const { return type() == EXIT; }
bool is_optimized() const { return type() == OPTIMIZED; }
bool is_interpreted() const { return type() == INTERPRETED; }
+ bool is_wasm() const { return type() == WASM; }
bool is_arguments_adaptor() const { return type() == ARGUMENTS_ADAPTOR; }
bool is_internal() const { return type() == INTERNAL; }
bool is_stub_failure_trampoline() const {
@@ -324,6 +325,11 @@ class StackFrame BASE_EMBEDDED {
(type == INTERPRETED);
}
+ bool is_visible() const {
+ Type type = this->type();
+ return is_java_script() || (type == WASM);
+ }
+
// Accessors.
Address sp() const { return state_.sp; }
Address fp() const { return state_.fp; }
@@ -617,8 +623,24 @@ class FrameSummary BASE_EMBEDDED {
bool is_constructor_;
};
+class VisibleFrame : public StandardFrame {
+ public:
+ // Build a list with summaries for this frame including all inlined frames.
+ virtual void Summarize(List<FrameSummary>* frames) = 0;
-class JavaScriptFrame: public StandardFrame {
+ static VisibleFrame* cast(StackFrame* frame) {
+ DCHECK(frame->is_visible());
+ return static_cast<VisibleFrame*>(frame);
+ }
+
+ protected:
+ inline explicit VisibleFrame(StackFrameIteratorBase* iterator);
+
+ private:
+ friend class StackFrameIteratorBase;
+};
+
+class JavaScriptFrame : public VisibleFrame {
public:
Type type() const override { return JAVA_SCRIPT; }
@@ -673,7 +695,7 @@ class JavaScriptFrame: public StandardFrame {
virtual void GetFunctions(List<JSFunction*>* functions) const;
// Build a list with summaries for this frame including all inlined frames.
- virtual void Summarize(List<FrameSummary>* frames);
+ void Summarize(List<FrameSummary>* frames) override;
// Lookup exception handler for current {pc}, returns -1 if none found. Also
// returns data associated with the handler site specific to the frame type:
@@ -841,6 +863,30 @@ class ArgumentsAdaptorFrame: public JavaScriptFrame {
friend class StackFrameIteratorBase;
};
+class WasmFrame : public VisibleFrame {
+ public:
+ Type type() const override { return WASM; }
+
+ // GC support.
+ void Iterate(ObjectVisitor* v) const override;
+
+ // Printing support.
+ void Print(StringStream* accumulator, PrintMode mode,
+ int index) const override;
+
+ // Determine the code for the frame.
+ Code* unchecked_code() const override;
+
+ void Summarize(List<FrameSummary>* frames) override;
+
+ protected:
+ inline explicit WasmFrame(StackFrameIteratorBase* iterator);
+
+ Address GetCallerStackPointer() const override;
+
+ private:
+ friend class StackFrameIteratorBase;
+};
class InternalFrame: public StandardFrame {
public:
@@ -974,9 +1020,25 @@ class StackFrameIterator: public StackFrameIteratorBase {
DISALLOW_COPY_AND_ASSIGN(StackFrameIterator);
};
+// Iterator that supports iterating through all Visible frames.
+class VisibleFrameIterator BASE_EMBEDDED {
+ public:
+ inline explicit VisibleFrameIterator(Isolate* isolate);
+
+ inline VisibleFrame* frame() const;
+
+ bool done() const { return iterator_.done(); }
+ void Advance();
+
+ protected:
+ struct NoAdvance {}; // Sentinel: construct iterator_, but don't advance it.
+ inline VisibleFrameIterator(Isolate* isolate, NoAdvance);
+ inline VisibleFrameIterator(Isolate* isolate, ThreadLocalTop* top, NoAdvance);
+ StackFrameIterator iterator_;
+};
// Iterator that supports iterating through all JavaScript frames.
-class JavaScriptFrameIterator BASE_EMBEDDED {
+class JavaScriptFrameIterator : public VisibleFrameIterator {
public:
inline explicit JavaScriptFrameIterator(Isolate* isolate);
inline JavaScriptFrameIterator(Isolate* isolate, ThreadLocalTop* top);
@@ -985,16 +1047,12 @@ class JavaScriptFrameIterator BASE_EMBEDDED {
inline JavaScriptFrame* frame() const;
- bool done() const { return iterator_.done(); }
void Advance();
// Advance to the frame holding the arguments for the current
// frame. This only affects the current frame if it has adapted
// arguments.
void AdvanceToArgumentsFrame();
-
- private:
- StackFrameIterator iterator_;
};
« no previous file with comments | « no previous file | src/frames.cc » ('j') | src/isolate.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698