| Index: src/debug.h
|
| diff --git a/src/debug.h b/src/debug.h
|
| index 03ddc0f04295033e1bb05cd2e0381a3a23e82d8e..e6c1d262d4e6cb1f5760537ecf2afdeedacce569 100644
|
| --- a/src/debug.h
|
| +++ b/src/debug.h
|
| @@ -13,6 +13,7 @@
|
| #include "flags.h"
|
| #include "frames-inl.h"
|
| #include "hashmap.h"
|
| +#include "liveedit.h"
|
| #include "platform.h"
|
| #include "string-stream.h"
|
| #include "v8threads.h"
|
| @@ -532,10 +533,9 @@ class Debug {
|
| return break_on_uncaught_exception_;
|
| }
|
|
|
| - enum AddressId {
|
| - k_after_break_target_address,
|
| - k_restarter_frame_function_pointer
|
| - };
|
| + void FramesHaveBeenDropped(StackFrame::Id new_break_frame_id,
|
| + LiveEdit::FrameDropMode mode,
|
| + Object** restarter_frame_function_pointer);
|
|
|
| // Support for setting the address to jump to when returning from break point.
|
| Address after_break_target_address() {
|
| @@ -547,7 +547,6 @@ class Debug {
|
| return reinterpret_cast<Address>(address);
|
| }
|
|
|
| - static const int kEstimatedNofDebugInfoEntries = 16;
|
| static const int kEstimatedNofBreakPointsInFunction = 16;
|
|
|
| // Passed to MakeWeak.
|
| @@ -578,86 +577,6 @@ class Debug {
|
| // Garbage collection notifications.
|
| void AfterGarbageCollection();
|
|
|
| - // Describes how exactly a frame has been dropped from stack.
|
| - enum FrameDropMode {
|
| - // No frame has been dropped.
|
| - FRAMES_UNTOUCHED,
|
| - // The top JS frame had been calling IC stub. IC stub mustn't be called now.
|
| - FRAME_DROPPED_IN_IC_CALL,
|
| - // The top JS frame had been calling debug break slot stub. Patch the
|
| - // address this stub jumps to in the end.
|
| - FRAME_DROPPED_IN_DEBUG_SLOT_CALL,
|
| - // The top JS frame had been calling some C++ function. The return address
|
| - // gets patched automatically.
|
| - FRAME_DROPPED_IN_DIRECT_CALL,
|
| - FRAME_DROPPED_IN_RETURN_CALL,
|
| - CURRENTLY_SET_MODE
|
| - };
|
| -
|
| - void FramesHaveBeenDropped(StackFrame::Id new_break_frame_id,
|
| - FrameDropMode mode,
|
| - Object** restarter_frame_function_pointer);
|
| -
|
| - // Initializes an artificial stack frame. The data it contains is used for:
|
| - // a. successful work of frame dropper code which eventually gets control,
|
| - // b. being compatible with regular stack structure for various stack
|
| - // iterators.
|
| - // Returns address of stack allocated pointer to restarted function,
|
| - // the value that is called 'restarter_frame_function_pointer'. The value
|
| - // at this address (possibly updated by GC) may be used later when preparing
|
| - // 'step in' operation.
|
| - static Object** SetUpFrameDropperFrame(StackFrame* bottom_js_frame,
|
| - Handle<Code> code);
|
| -
|
| - static const int kFrameDropperFrameSize;
|
| -
|
| - // Architecture-specific constant.
|
| - static const bool kFrameDropperSupported;
|
| -
|
| - /**
|
| - * Defines layout of a stack frame that supports padding. This is a regular
|
| - * internal frame that has a flexible stack structure. LiveEdit can shift
|
| - * its lower part up the stack, taking up the 'padding' space when additional
|
| - * stack memory is required.
|
| - * Such frame is expected immediately above the topmost JavaScript frame.
|
| - *
|
| - * Stack Layout:
|
| - * --- Top
|
| - * LiveEdit routine frames
|
| - * ---
|
| - * C frames of debug handler
|
| - * ---
|
| - * ...
|
| - * ---
|
| - * An internal frame that has n padding words:
|
| - * - any number of words as needed by code -- upper part of frame
|
| - * - padding size: a Smi storing n -- current size of padding
|
| - * - padding: n words filled with kPaddingValue in form of Smi
|
| - * - 3 context/type words of a regular InternalFrame
|
| - * - fp
|
| - * ---
|
| - * Topmost JavaScript frame
|
| - * ---
|
| - * ...
|
| - * --- Bottom
|
| - */
|
| - class FramePaddingLayout : public AllStatic {
|
| - public:
|
| - // Architecture-specific constant.
|
| - static const bool kIsSupported;
|
| -
|
| - // A size of frame base including fp. Padding words starts right above
|
| - // the base.
|
| - static const int kFrameBaseSize = 4;
|
| -
|
| - // A number of words that should be reserved on stack for the LiveEdit use.
|
| - // Normally equals 1. Stored on stack in form of Smi.
|
| - static const int kInitialSize;
|
| - // A value that padding words are filled with (in form of Smi). Going
|
| - // bottom-top, the first word not having this value is a counter word.
|
| - static const int kPaddingValue;
|
| - };
|
| -
|
| private:
|
| explicit Debug(Isolate* isolate);
|
|
|
| @@ -767,6 +686,9 @@ class Debug {
|
| // Per-thread data.
|
| class ThreadLocal {
|
| public:
|
| + // Top debugger entry.
|
| + EnterDebugger* debugger_entry_;
|
| +
|
| // Counter for generating next break id.
|
| int break_count_;
|
|
|
| @@ -801,16 +723,13 @@ class Debug {
|
| // Storage location for jump when exiting debug break calls.
|
| Address after_break_target_;
|
|
|
| - // Stores the way how LiveEdit has patched the stack. It is used when
|
| - // debugger returns control back to user script.
|
| - FrameDropMode frame_drop_mode_;
|
| -
|
| - // Top debugger entry.
|
| - EnterDebugger* debugger_entry_;
|
| -
|
| // Pending interrupts scheduled while debugging.
|
| bool has_pending_interrupt_;
|
|
|
| + // Stores the way how LiveEdit has patched the stack. It is used when
|
| + // debugger returns control back to user script.
|
| + LiveEdit::FrameDropMode frame_drop_mode_;
|
| +
|
| // When restarter frame is on stack, stores the address
|
| // of the pointer to function being restarted. Otherwise (most of the time)
|
| // stores NULL. This pointer is used with 'step in' implementation.
|
| @@ -831,6 +750,7 @@ class Debug {
|
|
|
| friend class Isolate;
|
| friend class EnterDebugger;
|
| + friend class FrameDropper;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(Debug);
|
| };
|
| @@ -912,6 +832,7 @@ class DebugCodegen : public AllStatic {
|
| static void GenerateFrameDropperLiveEdit(MacroAssembler* masm);
|
| };
|
|
|
| +
|
| } } // namespace v8::internal
|
|
|
| #endif // V8_DEBUG_H_
|
|
|