| Index: src/debug.h
|
| diff --git a/src/debug.h b/src/debug.h
|
| index 4f90f3a01935eac5229785d9250c242c60274e95..d441c04c55c77a0f6b6c52abd967e530f388074c 100644
|
| --- a/src/debug.h
|
| +++ b/src/debug.h
|
| @@ -78,7 +78,10 @@ class BreakLocation {
|
| BreakPositionAlignment alignment);
|
|
|
| bool IsDebugBreak() const;
|
| - inline bool IsExit() const { return RelocInfo::IsJSReturn(rmode_); }
|
| +
|
| + inline bool IsReturn() const {
|
| + return RelocInfo::IsDebugBreakSlotAtReturn(rmode_);
|
| + }
|
| inline bool IsCall() const {
|
| return RelocInfo::IsDebugBreakSlotAtCall(rmode_);
|
| }
|
| @@ -112,17 +115,13 @@ class BreakLocation {
|
| inline int statement_position() const { return statement_position_; }
|
|
|
| inline Address pc() const { return code()->entry() + pc_offset_; }
|
| - inline Address original_pc() const {
|
| - return debug_info_->original_code()->entry() + original_pc_offset_;
|
| - }
|
|
|
| inline RelocInfo::Mode rmode() const { return rmode_; }
|
|
|
| inline Code* code() const { return debug_info_->code(); }
|
|
|
| private:
|
| - BreakLocation(Handle<DebugInfo> debug_info, RelocInfo* rinfo,
|
| - RelocInfo* original_rinfo, int position,
|
| + BreakLocation(Handle<DebugInfo> debug_info, RelocInfo* rinfo, int position,
|
| int statement_position);
|
|
|
| class Iterator {
|
| @@ -130,11 +129,11 @@ class BreakLocation {
|
| Iterator(Handle<DebugInfo> debug_info, BreakLocatorType type);
|
|
|
| BreakLocation GetBreakLocation() {
|
| - return BreakLocation(debug_info_, rinfo(), original_rinfo(), position(),
|
| + return BreakLocation(debug_info_, rinfo(), position(),
|
| statement_position());
|
| }
|
|
|
| - inline bool Done() const { return RinfoDone(); }
|
| + inline bool Done() const { return reloc_iterator_.done(); }
|
| void Next();
|
|
|
| void SkipTo(int count) {
|
| @@ -143,10 +142,6 @@ class BreakLocation {
|
|
|
| inline RelocInfo::Mode rmode() { return reloc_iterator_.rinfo()->rmode(); }
|
| inline RelocInfo* rinfo() { return reloc_iterator_.rinfo(); }
|
| - inline RelocInfo* original_rinfo() {
|
| - return reloc_iterator_original_.rinfo();
|
| - }
|
| -
|
| inline Address pc() { return rinfo()->pc(); }
|
| int break_index() const { return break_index_; }
|
| inline int position() const { return position_; }
|
| @@ -155,12 +150,8 @@ class BreakLocation {
|
| private:
|
| static int GetModeMask(BreakLocatorType type);
|
|
|
| - bool RinfoDone() const;
|
| - void RinfoNext();
|
| -
|
| Handle<DebugInfo> debug_info_;
|
| RelocIterator reloc_iterator_;
|
| - RelocIterator reloc_iterator_original_;
|
| int break_index_;
|
| int position_;
|
| int statement_position_;
|
| @@ -175,12 +166,8 @@ class BreakLocation {
|
| static int BreakIndexFromAddress(Handle<DebugInfo> debug_info,
|
| BreakLocatorType type, Address pc);
|
|
|
| - void ClearDebugBreak();
|
| - void RestoreFromOriginal(int length_in_bytes);
|
| -
|
| void SetDebugBreak();
|
| - void SetDebugBreakAtReturn();
|
| - void SetDebugBreakAtSlot();
|
| + void ClearDebugBreak();
|
|
|
| inline bool IsDebuggerStatement() const {
|
| return RelocInfo::IsDebuggerStatement(rmode_);
|
| @@ -191,11 +178,8 @@ class BreakLocation {
|
|
|
| Handle<DebugInfo> debug_info_;
|
| int pc_offset_;
|
| - int original_pc_offset_;
|
| RelocInfo::Mode rmode_;
|
| - RelocInfo::Mode original_rmode_;
|
| intptr_t data_;
|
| - intptr_t original_data_;
|
| int position_;
|
| int statement_position_;
|
| };
|
| @@ -792,16 +776,14 @@ class SuppressDebug BASE_EMBEDDED {
|
| // Code generator routines.
|
| class DebugCodegen : public AllStatic {
|
| public:
|
| - enum SlotLocation {
|
| - PLAIN_DEBUG_BREAK,
|
| - DEBUG_BREAK_AT_CALL,
|
| - DEBUG_BREAK_AT_CONSTRUCT_CALL
|
| + enum DebugBreakCallHelperMode {
|
| + SAVE_RESULT_REGISTER,
|
| + IGNORE_RESULT_REGISTER
|
| };
|
|
|
| - static void GenerateSlot(MacroAssembler* masm, SlotLocation location,
|
| - int call_argc = -1);
|
| - static void GenerateReturnDebugBreak(MacroAssembler* masm);
|
| - static void GenerateSlotDebugBreak(MacroAssembler* masm);
|
| + static void GenerateDebugBreakStub(MacroAssembler* masm,
|
| + DebugBreakCallHelperMode mode);
|
| +
|
| static void GeneratePlainReturnLiveEdit(MacroAssembler* masm);
|
|
|
| // FrameDropper is a code replacement for a JavaScript frame with possibly
|
| @@ -810,9 +792,12 @@ class DebugCodegen : public AllStatic {
|
| // called, it only gets returned to.
|
| static void GenerateFrameDropperLiveEdit(MacroAssembler* masm);
|
|
|
| - private:
|
| - static void RecordRelocInfo(MacroAssembler* masm, SlotLocation location,
|
| - int call_argc);
|
| +
|
| + static void GenerateSlot(MacroAssembler* masm, RelocInfo::Mode mode,
|
| + int call_argc = -1);
|
| +
|
| + static void PatchDebugBreakSlot(Address pc, Handle<Code> code);
|
| + static void ClearDebugBreakSlot(Address pc);
|
| };
|
|
|
|
|
|
|