Debugger: refactor reloc info.
authoryangguo <yangguo@chromium.org>
Mon, 13 Jul 2015 12:32:09 +0000 (05:32 -0700)
committerCommit bot <commit-bot@chromium.org>
Mon, 13 Jul 2015 12:32:24 +0000 (12:32 +0000)
- split relocation info for debug break slots for
  - calls (with call arguments count as data)
  - construct calls
  - normal slots
- renamed DEBUG_BREAK into DEBUGGER_STATEMENT
- removed unused IC state for Debug stubs

R=ulan@chromium.org
BUG=v8:4269
LOG=N

Review URL: https://codereview.chromium.org/1232803002

Cr-Commit-Position: refs/heads/master@{#29603}

24 files changed:
src/arm/macro-assembler-arm.cc
src/arm64/assembler-arm64.cc
src/arm64/debug-arm64.cc
src/arm64/macro-assembler-arm64.cc
src/assembler.cc
src/assembler.h
src/builtins.h
src/debug.cc
src/debug.h
src/heap/mark-compact.cc
src/heap/objects-visiting-inl.h
src/ia32/assembler-ia32-inl.h
src/ia32/assembler-ia32.cc
src/ia32/macro-assembler-ia32.cc
src/mips/assembler-mips.cc
src/mips/macro-assembler-mips.cc
src/mips64/assembler-mips64.cc
src/mips64/macro-assembler-mips64.cc
src/objects.h
src/ppc/macro-assembler-ppc.cc
src/x64/macro-assembler-x64.cc
src/x87/assembler-x87-inl.h
src/x87/assembler-x87.cc
src/x87/macro-assembler-x87.cc

index 3d2769d9a84f5cd27f7258810d99cb5c08f27cf8..6a316186fc1338ff49795a3c29dac90ed3615b38 100644 (file)
@@ -1437,7 +1437,7 @@ void MacroAssembler::DebugBreak() {
   mov(r1, Operand(ExternalReference(Runtime::kDebugBreak, isolate())));
   CEntryStub ces(isolate(), 1);
   DCHECK(AllowThisStubCall(&ces));
-  Call(ces.GetCode(), RelocInfo::DEBUG_BREAK);
+  Call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT);
 }
 
 
index 5445fe1a1b19a9bd8f01a4e9afb80a32f8b3493a..fed0798c04217a47775024f2ae8e95fae969c004 100644 (file)
@@ -2902,10 +2902,9 @@ void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) {
   // We do not try to reuse pool constants.
   RelocInfo rinfo(reinterpret_cast<byte*>(pc_), rmode, data, NULL);
   if (((rmode >= RelocInfo::JS_RETURN) &&
-       (rmode <= RelocInfo::DEBUG_BREAK_SLOT)) ||
+       (rmode <= RelocInfo::DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL)) ||
       (rmode == RelocInfo::INTERNAL_REFERENCE) ||
-      (rmode == RelocInfo::CONST_POOL) ||
-      (rmode == RelocInfo::VENEER_POOL) ||
+      (rmode == RelocInfo::CONST_POOL) || (rmode == RelocInfo::VENEER_POOL) ||
       (rmode == RelocInfo::DEOPT_REASON)) {
     // Adjust code for new modes.
     DCHECK(RelocInfo::IsDebugBreakSlot(rmode)
index ee5a94a17e99603a704ad26da0c2c7232e48b50d..7d11c499946f4fb764adc72ccd50d6bfe6edc4bd 100644 (file)
@@ -56,6 +56,7 @@ void BreakLocation::SetDebugBreakAtReturn() {
 
 
 void BreakLocation::SetDebugBreakAtSlot() {
+  DCHECK(IsDebugBreakSlot());
   // Patch the code emitted by DebugCodegen::GenerateSlots, changing the debug
   // break slot code from
   //   mov x0, x0    @ nop DEBUG_BREAK_NOP
index c30f619215517a53c36d1f3b84847fda53ea403c..58afe28f1e84ffb3ff38d31aa524e273f40fe2ef 100644 (file)
@@ -3033,7 +3033,7 @@ void MacroAssembler::DebugBreak() {
   Mov(x1, ExternalReference(Runtime::kDebugBreak, isolate()));
   CEntryStub ces(isolate(), 1);
   DCHECK(AllowThisStubCall(&ces));
-  Call(ces.GetCode(), RelocInfo::DEBUG_BREAK);
+  Call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT);
 }
 
 
index 49e1acf50b3ec4f8bcf143b593fdabdd1a33a15b..70d35b0f21538b9ad8b589a4af640a733c51d9ff 100644 (file)
@@ -449,7 +449,7 @@ void RelocInfoWriter::Write(const RelocInfo* rinfo) {
       WriteData(rinfo->data());
     } else if (RelocInfo::IsConstPool(rmode) ||
                RelocInfo::IsVeneerPool(rmode) ||
-               RelocInfo::IsDebugBreakSlot(rmode)) {
+               RelocInfo::IsDebugBreakSlotAtCall(rmode)) {
       WriteIntData(static_cast<int>(rinfo->data()));
     }
   }
@@ -641,7 +641,7 @@ void RelocIterator::next() {
           }
         } else if (RelocInfo::IsConstPool(rmode) ||
                    RelocInfo::IsVeneerPool(rmode) ||
-                   RelocInfo::IsDebugBreakSlot(rmode)) {
+                   RelocInfo::IsDebugBreakSlotAtCall(rmode)) {
           if (SetMode(rmode)) {
             AdvanceReadInt();
             return;
@@ -737,8 +737,8 @@ const char* RelocInfo::RelocModeName(RelocInfo::Mode rmode) {
       return "embedded object";
     case CONSTRUCT_CALL:
       return "code target (js construct call)";
-    case DEBUG_BREAK:
-      return "debug break";
+    case DEBUGGER_STATEMENT:
+      return "debugger statement";
     case CODE_TARGET:
       return "code target";
     case CODE_TARGET_WITH_ID:
@@ -767,8 +767,12 @@ const char* RelocInfo::RelocModeName(RelocInfo::Mode rmode) {
       return "constant pool";
     case VENEER_POOL:
       return "veneer pool";
-    case DEBUG_BREAK_SLOT:
-      return "debug break slot";
+    case DEBUG_BREAK_SLOT_AT_POSITION:
+      return "debug break slot at position";
+    case DEBUG_BREAK_SLOT_AT_CALL:
+      return "debug break slot at call";
+    case DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL:
+      return "debug break slot at construct call";
     case CODE_AGE_SEQUENCE:
       return "code_age_sequence";
     case NUMBER_OF_MODES:
@@ -814,14 +818,6 @@ void RelocInfo::Print(Isolate* isolate, std::ostream& os) {  // NOLINT
     }
   } else if (IsConstPool(rmode_)) {
     os << " (size " << static_cast<int>(data_) << ")";
-  } else if (IsDebugBreakSlot(rmode_)) {
-    if (DebugBreakIsCall(data_)) {
-      os << " (call with " << DebugBreakCallArgumentsCount(data_) << " args)";
-    } else if (DebugBreakIsConstructCall(data_)) {
-      os << " (construct call)";
-    } else {
-      os << " (slot)";
-    }
   }
 
   os << "\n";
@@ -838,7 +834,7 @@ void RelocInfo::Verify(Isolate* isolate) {
     case CELL:
       Object::VerifyPointer(target_cell());
       break;
-    case DEBUG_BREAK:
+    case DEBUGGER_STATEMENT:
     case CONSTRUCT_CALL:
     case CODE_TARGET_WITH_ID:
     case CODE_TARGET: {
@@ -870,7 +866,9 @@ void RelocInfo::Verify(Isolate* isolate) {
     case DEOPT_REASON:
     case CONST_POOL:
     case VENEER_POOL:
-    case DEBUG_BREAK_SLOT:
+    case DEBUG_BREAK_SLOT_AT_POSITION:
+    case DEBUG_BREAK_SLOT_AT_CALL:
+    case DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL:
     case NONE32:
     case NONE64:
       break;
@@ -886,16 +884,7 @@ void RelocInfo::Verify(Isolate* isolate) {
 #endif  // VERIFY_HEAP
 
 
-bool RelocInfo::DebugBreakIsConstructCall(intptr_t data) {
-  return data == static_cast<intptr_t>(kDebugBreakConstructCallSentinel);
-}
-
-
-bool RelocInfo::DebugBreakIsCall(intptr_t data) { return data >= 0; }
-
-
 int RelocInfo::DebugBreakCallArgumentsCount(intptr_t data) {
-  DCHECK(DebugBreakIsCall(data));
   return static_cast<int>(data);
 }
 
@@ -1823,23 +1812,20 @@ void Assembler::RecordJSReturn() {
 
 void Assembler::RecordDebugBreakSlot() {
   EnsureSpace ensure_space(this);
-  intptr_t data = static_cast<intptr_t>(RelocInfo::kDebugBreakNonCallSentinel);
-  RecordRelocInfo(RelocInfo::DEBUG_BREAK_SLOT, data);
+  RecordRelocInfo(RelocInfo::DEBUG_BREAK_SLOT_AT_POSITION);
 }
 
 
 void Assembler::RecordDebugBreakSlotForCall(int argc) {
   EnsureSpace ensure_space(this);
   intptr_t data = static_cast<intptr_t>(argc);
-  RecordRelocInfo(RelocInfo::DEBUG_BREAK_SLOT, data);
+  RecordRelocInfo(RelocInfo::DEBUG_BREAK_SLOT_AT_CALL, data);
 }
 
 
 void Assembler::RecordDebugBreakSlotForConstructCall() {
   EnsureSpace ensure_space(this);
-  intptr_t data =
-      static_cast<intptr_t>(RelocInfo::kDebugBreakConstructCallSentinel);
-  RecordRelocInfo(RelocInfo::DEBUG_BREAK_SLOT, data);
+  RecordRelocInfo(RelocInfo::DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL);
 }
 
 
index f5349038dac0335c088da76771c2ffd20ef22aec..1b4c76540757a17de02e341327d7f4dacc812064 100644 (file)
@@ -364,7 +364,7 @@ class RelocInfo {
     CODE_TARGET,  // Code target which is not any of the above.
     CODE_TARGET_WITH_ID,
     CONSTRUCT_CALL,  // code target that is a call to a JavaScript constructor.
-    DEBUG_BREAK,     // Code target for the debugger statement.
+    DEBUGGER_STATEMENT,  // Code target for the debugger statement.
     EMBEDDED_OBJECT,
     CELL,
 
@@ -374,7 +374,12 @@ class RelocInfo {
     COMMENT,
     POSITION,            // See comment for kNoPosition above.
     STATEMENT_POSITION,  // See comment for kNoPosition above.
-    DEBUG_BREAK_SLOT,    // Additional code inserted for debug break slot.
+
+    // Additional code inserted for debug break slot.
+    DEBUG_BREAK_SLOT_AT_POSITION,
+    DEBUG_BREAK_SLOT_AT_CALL,
+    DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL,
+
     EXTERNAL_REFERENCE,  // The address of an external C++ function.
     INTERNAL_REFERENCE,  // An address inside the same function.
 
@@ -386,7 +391,7 @@ class RelocInfo {
     CONST_POOL,
     VENEER_POOL,
 
-    DEOPT_REASON,       // Deoptimization reason index.
+    DEOPT_REASON,  // Deoptimization reason index.
 
     // This is not an actual reloc mode, but used to encode a long pc jump that
     // cannot be encoded as part of another record.
@@ -401,10 +406,12 @@ class RelocInfo {
 
     FIRST_REAL_RELOC_MODE = CODE_TARGET,
     LAST_REAL_RELOC_MODE = VENEER_POOL,
-    LAST_CODE_ENUM = DEBUG_BREAK,
+    LAST_CODE_ENUM = DEBUGGER_STATEMENT,
     LAST_GCED_ENUM = CELL,
   };
 
+  STATIC_ASSERT(NUMBER_OF_MODES <= kBitsPerInt);
+
   RelocInfo() {}
 
   RelocInfo(byte* pc, Mode rmode, intptr_t data, Code* host)
@@ -463,10 +470,20 @@ class RelocInfo {
     return mode == INTERNAL_REFERENCE_ENCODED;
   }
   static inline bool IsDebugBreakSlot(Mode mode) {
-    return mode == DEBUG_BREAK_SLOT;
+    return IsDebugBreakSlotAtPosition(mode) || IsDebugBreakSlotAtCall(mode) ||
+           IsDebugBreakSlotAtConstructCall(mode);
+  }
+  static inline bool IsDebugBreakSlotAtPosition(Mode mode) {
+    return mode == DEBUG_BREAK_SLOT_AT_POSITION;
+  }
+  static inline bool IsDebugBreakSlotAtCall(Mode mode) {
+    return mode == DEBUG_BREAK_SLOT_AT_CALL;
+  }
+  static inline bool IsDebugBreakSlotAtConstructCall(Mode mode) {
+    return mode == DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL;
   }
   static inline bool IsDebuggerStatement(Mode mode) {
-    return mode == DEBUG_BREAK;
+    return mode == DEBUGGER_STATEMENT;
   }
   static inline bool IsNone(Mode mode) {
     return mode == NONE32 || mode == NONE64;
@@ -498,8 +515,6 @@ class RelocInfo {
   // constant pool, otherwise the pointer is embedded in the instruction stream.
   bool IsInConstantPool();
 
-  static bool DebugBreakIsConstructCall(intptr_t data);
-  static bool DebugBreakIsCall(intptr_t data);
   static int DebugBreakCallArgumentsCount(intptr_t data);
 
   // Read/modify the code target in the branch/call instruction
@@ -618,9 +633,10 @@ class RelocInfo {
   static const int kPositionMask = 1 << POSITION | 1 << STATEMENT_POSITION;
   static const int kDataMask =
       (1 << CODE_TARGET_WITH_ID) | kPositionMask | (1 << COMMENT);
+  static const int kDebugBreakSlotMask =
+      1 << DEBUG_BREAK_SLOT_AT_POSITION | 1 << DEBUG_BREAK_SLOT_AT_CALL |
+      1 << DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL;
   static const int kApplyMask;  // Modes affected by apply. Depends on arch.
-  static const int kDebugBreakNonCallSentinel = -2;
-  static const int kDebugBreakConstructCallSentinel = -1;
 
  private:
   // On ARM, note that pc_ is the address of the constant pool entry
index 13e3a90e1922add7355acc239329c01e3f24ee19..b526e785812ca13c6f8b5f90f9e57b6346f81f13 100644 (file)
@@ -139,15 +139,11 @@ enum BuiltinExtraArguments {
   V(StoreIC_Normal,          STORE_IC)
 
 // Define list of builtins used by the debugger implemented in assembly.
-#define BUILTIN_LIST_DEBUG_A(V)                                               \
-  V(Return_DebugBreak,                         BUILTIN, DEBUG_STUB,           \
-                                               DEBUG_BREAK)                   \
-  V(Slot_DebugBreak,                           BUILTIN, DEBUG_STUB,           \
-                                               DEBUG_BREAK)                   \
-  V(PlainReturn_LiveEdit,                      BUILTIN, DEBUG_STUB,           \
-                                               DEBUG_BREAK)                   \
-  V(FrameDropper_LiveEdit,                     BUILTIN, DEBUG_STUB,           \
-                                               DEBUG_BREAK)
+#define BUILTIN_LIST_DEBUG_A(V)                                 \
+  V(Return_DebugBreak, BUILTIN, DEBUG_STUB, kNoExtraICState)    \
+  V(Slot_DebugBreak, BUILTIN, DEBUG_STUB, kNoExtraICState)      \
+  V(PlainReturn_LiveEdit, BUILTIN, DEBUG_STUB, kNoExtraICState) \
+  V(FrameDropper_LiveEdit, BUILTIN, DEBUG_STUB, kNoExtraICState)
 
 // Define list of builtins implemented in JavaScript.
 #define BUILTINS_LIST_JS(V)                \
index 6a445f036b46a0fbf9e7b00759d386aa1ea861f6..1098f608c4c227cc752b36900892191581062a53 100644 (file)
@@ -76,16 +76,27 @@ BreakLocation::BreakLocation(Handle<DebugInfo> debug_info, RelocInfo* rinfo,
 BreakLocation::Iterator::Iterator(Handle<DebugInfo> debug_info,
                                   BreakLocatorType type)
     : debug_info_(debug_info),
-      type_(type),
-      reloc_iterator_(debug_info->code(),
-                      ~RelocInfo::ModeMask(RelocInfo::CODE_AGE_SEQUENCE)),
-      reloc_iterator_original_(
-          debug_info->original_code(),
-          ~RelocInfo::ModeMask(RelocInfo::CODE_AGE_SEQUENCE)),
+      reloc_iterator_(debug_info->code(), GetModeMask(type)),
+      reloc_iterator_original_(debug_info->original_code(), GetModeMask(type)),
       break_index_(-1),
       position_(1),
       statement_position_(1) {
-  Next();
+  if (!RinfoDone()) Next();
+}
+
+
+int BreakLocation::Iterator::GetModeMask(BreakLocatorType type) {
+  int mask = 0;
+  mask |= RelocInfo::ModeMask(RelocInfo::POSITION);
+  mask |= RelocInfo::ModeMask(RelocInfo::STATEMENT_POSITION);
+  mask |= RelocInfo::ModeMask(RelocInfo::JS_RETURN);
+  mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_CALL);
+  mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL);
+  if (type == ALL_BREAK_LOCATIONS) {
+    mask |= RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT_AT_POSITION);
+    mask |= RelocInfo::ModeMask(RelocInfo::DEBUGGER_STATEMENT);
+  }
+  return mask;
 }
 
 
@@ -129,16 +140,9 @@ void BreakLocation::Iterator::Next() {
       break;
     }
 
-    if (RelocInfo::IsDebugBreakSlot(rmode()) &&
-        (type_ == ALL_BREAK_LOCATIONS ||
-         RelocInfo::DebugBreakIsCall(rinfo()->data()))) {
-      break;
-    }
-
-    if (RelocInfo::IsDebuggerStatement(rmode()) &&
-        type_ == ALL_BREAK_LOCATIONS) {
-      break;
-    }
+    DCHECK(RelocInfo::IsDebugBreakSlot(rmode()) ||
+           RelocInfo::IsDebuggerStatement(rmode()));
+    break;
   }
   break_index_++;
 }
@@ -1277,7 +1281,7 @@ bool Debug::StepNextContinue(BreakLocation* break_location,
 // object.
 bool Debug::IsDebugBreak(Address addr) {
   Code* code = Code::GetCodeFromTargetAddress(addr);
-  return code->is_debug_stub() && code->extra_ic_state() == DEBUG_BREAK;
+  return code->is_debug_stub();
 }
 
 
@@ -1462,7 +1466,7 @@ static int ComputeCodeOffsetFromPcOffset(Code *code, int pc_offset) {
 static int ComputePcOffsetFromCodeOffset(Code *code, int code_offset) {
   DCHECK_EQ(code->kind(), Code::FUNCTION);
 
-  int mask = RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT) |
+  int mask = RelocInfo::kDebugBreakSlotMask |
              RelocInfo::ModeMask(RelocInfo::CONST_POOL) |
              RelocInfo::ModeMask(RelocInfo::VENEER_POOL);
   int reloc = 0;
index bde56c2b7cc99b5e052ac8b043cba906cd0d4ba6..4f90f3a01935eac5229785d9250c242c60274e95 100644 (file)
@@ -80,10 +80,10 @@ class BreakLocation {
   bool IsDebugBreak() const;
   inline bool IsExit() const { return RelocInfo::IsJSReturn(rmode_); }
   inline bool IsCall() const {
-    return IsDebugBreakSlot() && RelocInfo::DebugBreakIsCall(data_);
+    return RelocInfo::IsDebugBreakSlotAtCall(rmode_);
   }
   inline bool IsConstructCall() const {
-    return IsDebugBreakSlot() && RelocInfo::DebugBreakIsConstructCall(data_);
+    return RelocInfo::IsDebugBreakSlotAtConstructCall(rmode_);
   }
   inline int CallArgumentsCount() const {
     DCHECK(IsCall());
@@ -153,11 +153,12 @@ class BreakLocation {
     inline int statement_position() const { return statement_position_; }
 
    private:
+    static int GetModeMask(BreakLocatorType type);
+
     bool RinfoDone() const;
     void RinfoNext();
 
     Handle<DebugInfo> debug_info_;
-    BreakLocatorType type_;
     RelocIterator reloc_iterator_;
     RelocIterator reloc_iterator_original_;
     int break_index_;
index 8bbfeb173f7ba3ac5e55b63145e62d3085338727..109bf17ec02604777275aadc0d9d40af8cf630d2 100644 (file)
@@ -3431,7 +3431,7 @@ static inline void UpdateSlot(Isolate* isolate, ObjectVisitor* v,
       break;
     }
     case SlotsBuffer::DEBUG_TARGET_SLOT: {
-      RelocInfo rinfo(addr, RelocInfo::DEBUG_BREAK_SLOT, 0, NULL);
+      RelocInfo rinfo(addr, RelocInfo::DEBUG_BREAK_SLOT_AT_POSITION, 0, NULL);
       if (rinfo.IsPatchedDebugBreakSlotSequence()) rinfo.Visit(isolate, v);
       break;
     }
index 0103054822b1740df3902a875598912865aba68b..03baabb7b73c898df0d503fb79cf1100bd6b902c 100644 (file)
@@ -789,8 +789,8 @@ void Code::CodeIterateBody(ObjectVisitor* v) {
                   RelocInfo::ModeMask(RelocInfo::INTERNAL_REFERENCE) |
                   RelocInfo::ModeMask(RelocInfo::INTERNAL_REFERENCE_ENCODED) |
                   RelocInfo::ModeMask(RelocInfo::JS_RETURN) |
-                  RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT) |
-                  RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY);
+                  RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY) |
+                  RelocInfo::kDebugBreakSlotMask;
 
   // There are two places where we iterate code bodies: here and the
   // templated CodeIterateBody (below). They should be kept in sync.
@@ -817,8 +817,8 @@ void Code::CodeIterateBody(Heap* heap) {
                   RelocInfo::ModeMask(RelocInfo::INTERNAL_REFERENCE) |
                   RelocInfo::ModeMask(RelocInfo::INTERNAL_REFERENCE_ENCODED) |
                   RelocInfo::ModeMask(RelocInfo::JS_RETURN) |
-                  RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT) |
-                  RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY);
+                  RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY) |
+                  RelocInfo::kDebugBreakSlotMask;
 
   // There are two places where we iterate code bodies: here and the non-
   // templated CodeIterateBody (above). They should be kept in sync.
index 5a4036627d27d3470106159f63db299af0a3eb0c..26e8c6cb0ff38df8e35281613789addffd5d5556 100644 (file)
@@ -59,19 +59,19 @@ void RelocInfo::apply(intptr_t delta, ICacheFlushMode icache_flush_mode) {
     int32_t* p = reinterpret_cast<int32_t*>(pc_);
     *p -= delta;  // Relocate entry.
     if (flush_icache) CpuFeatures::FlushICache(p, sizeof(uint32_t));
-  } else if (rmode_ == CODE_AGE_SEQUENCE) {
+  } else if (IsCodeAgeSequence(rmode_)) {
     if (*pc_ == kCallOpcode) {
       int32_t* p = reinterpret_cast<int32_t*>(pc_ + 1);
       *p -= delta;  // Relocate entry.
     if (flush_icache) CpuFeatures::FlushICache(p, sizeof(uint32_t));
     }
-  } else if (rmode_ == JS_RETURN && IsPatchedReturnSequence()) {
+  } else if (IsJSReturn(rmode_) && IsPatchedReturnSequence()) {
     // Special handling of js_return when a break point is set (call
     // instruction has been inserted).
     int32_t* p = reinterpret_cast<int32_t*>(pc_ + 1);
     *p -= delta;  // Relocate entry.
     if (flush_icache) CpuFeatures::FlushICache(p, sizeof(uint32_t));
-  } else if (rmode_ == DEBUG_BREAK_SLOT && IsPatchedDebugBreakSlotSequence()) {
+  } else if (IsDebugBreakSlot(rmode_) && IsPatchedDebugBreakSlotSequence()) {
     // Special handling of a debug break slot when a break point is set (call
     // instruction has been inserted).
     int32_t* p = reinterpret_cast<int32_t*>(pc_ + 1);
index 9066788b1f14924efc178954f4a66c9fb8d6e5f7..07ac879f9bfb8243e86dc74ad24a9803334ac330 100644 (file)
@@ -168,9 +168,9 @@ void Displacement::init(Label* L, Type type) {
 
 
 const int RelocInfo::kApplyMask =
-  RelocInfo::kCodeTargetMask | 1 << RelocInfo::RUNTIME_ENTRY |
+    RelocInfo::kCodeTargetMask | 1 << RelocInfo::RUNTIME_ENTRY |
     1 << RelocInfo::JS_RETURN | 1 << RelocInfo::INTERNAL_REFERENCE |
-    1 << RelocInfo::DEBUG_BREAK_SLOT | 1 << RelocInfo::CODE_AGE_SEQUENCE;
+    1 << RelocInfo::CODE_AGE_SEQUENCE | RelocInfo::kDebugBreakSlotMask;
 
 
 bool RelocInfo::IsCodedSpecially() {
index 42a151e27afa2c7205600f290328c6cc2748ec80..3e588c5b64e388bce1cb60565bc4a01c29f3cf74 100644 (file)
@@ -574,7 +574,7 @@ void MacroAssembler::DebugBreak() {
   Move(eax, Immediate(0));
   mov(ebx, Immediate(ExternalReference(Runtime::kDebugBreak, isolate())));
   CEntryStub ces(isolate(), 1);
-  call(ces.GetCode(), RelocInfo::DEBUG_BREAK);
+  call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT);
 }
 
 
index 2d1ac059a507531fae30ca29553fc68773c2660d..971e17b995c3f0c299dc234fc941fe34c49bdbb1 100644 (file)
@@ -2826,7 +2826,8 @@ void Assembler::emit_code_stub_address(Code* stub) {
 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) {
   // We do not try to reuse pool constants.
   RelocInfo rinfo(pc_, rmode, data, NULL);
-  if (rmode >= RelocInfo::JS_RETURN && rmode <= RelocInfo::DEBUG_BREAK_SLOT) {
+  if (rmode >= RelocInfo::JS_RETURN &&
+      rmode <= RelocInfo::DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL) {
     // Adjust code for new modes.
     DCHECK(RelocInfo::IsDebugBreakSlot(rmode)
            || RelocInfo::IsJSReturn(rmode)
index 36671fd43b699235625960ce3c8c4a5e1e3d35cb..a91b1d74c2928bf9f350e1dc9ac7b3384caad737 100644 (file)
@@ -3290,7 +3290,7 @@ void MacroAssembler::DebugBreak() {
   PrepareCEntryFunction(ExternalReference(Runtime::kDebugBreak, isolate()));
   CEntryStub ces(isolate(), 1);
   DCHECK(AllowThisStubCall(&ces));
-  Call(ces.GetCode(), RelocInfo::DEBUG_BREAK);
+  Call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT);
 }
 
 
index 2c00911244dac08c825060e28402bef2a13a5bf1..84be689de17bca0318490ff49ccc0035365ce0ba 100644 (file)
@@ -3066,7 +3066,8 @@ void Assembler::emit_code_stub_address(Code* stub) {
 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) {
   // We do not try to reuse pool constants.
   RelocInfo rinfo(pc_, rmode, data, NULL);
-  if (rmode >= RelocInfo::JS_RETURN && rmode <= RelocInfo::DEBUG_BREAK_SLOT) {
+  if (rmode >= RelocInfo::JS_RETURN &&
+      rmode <= RelocInfo::DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL) {
     // Adjust code for new modes.
     DCHECK(RelocInfo::IsDebugBreakSlot(rmode)
            || RelocInfo::IsJSReturn(rmode)
index 8fc26d81793bc7fa3a03a911ecf3f9ebeae74d91..1b0b1e9eafb7df77f55af6b971b04b6231a5260b 100644 (file)
@@ -3364,7 +3364,7 @@ void MacroAssembler::DebugBreak() {
   PrepareCEntryFunction(ExternalReference(Runtime::kDebugBreak, isolate()));
   CEntryStub ces(isolate(), 1);
   DCHECK(AllowThisStubCall(&ces));
-  Call(ces.GetCode(), RelocInfo::DEBUG_BREAK);
+  Call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT);
 }
 
 
index fc25ba2485fcb557f28bd61d0a70baa673ed4b44..bb8f5ddce559ad51ee252ec45a2e036d779198bb 100644 (file)
@@ -290,12 +290,6 @@ enum TransitionFlag {
 };
 
 
-enum DebugExtraICState {
-  DEBUG_BREAK,
-  DEBUG_PREPARE_STEP_IN
-};
-
-
 // Indicates whether the transition is simple: the target map of the transition
 // either extends the current map with a new property, or it modifies the
 // property that was added last to the current map.
index 65efea7442879ea3fdeeb502e2e8410865112ae9..d3671433b9988c0a0f933176679958fdfad04648 100644 (file)
@@ -1150,7 +1150,7 @@ void MacroAssembler::DebugBreak() {
   mov(r4, Operand(ExternalReference(Runtime::kDebugBreak, isolate())));
   CEntryStub ces(isolate(), 1);
   DCHECK(AllowThisStubCall(&ces));
-  Call(ces.GetCode(), RelocInfo::DEBUG_BREAK);
+  Call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT);
 }
 
 
index 5a3e6db59191731d78094ee54c0e508eadf17cfc..46990d860f7f1cefef3fd1c3264df2dcb13ae534 100644 (file)
@@ -3558,7 +3558,7 @@ void MacroAssembler::DebugBreak() {
   LoadAddress(rbx, ExternalReference(Runtime::kDebugBreak, isolate()));
   CEntryStub ces(isolate(), 1);
   DCHECK(AllowThisStubCall(&ces));
-  Call(ces.GetCode(), RelocInfo::DEBUG_BREAK);
+  Call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT);
 }
 
 
index 62beab8ed3cabb36c75848e6f514d556bdf86373..9c6c55c97154cb37e92158ebd49a6cd49f831249 100644 (file)
@@ -59,19 +59,19 @@ void RelocInfo::apply(intptr_t delta, ICacheFlushMode icache_flush_mode) {
     int32_t* p = reinterpret_cast<int32_t*>(pc_);
     *p -= delta;  // Relocate entry.
     if (flush_icache) CpuFeatures::FlushICache(p, sizeof(uint32_t));
-  } else if (rmode_ == CODE_AGE_SEQUENCE) {
+  } else if (IsCodeAgeSequence(rmode_)) {
     if (*pc_ == kCallOpcode) {
       int32_t* p = reinterpret_cast<int32_t*>(pc_ + 1);
       *p -= delta;  // Relocate entry.
       if (flush_icache) CpuFeatures::FlushICache(p, sizeof(uint32_t));
     }
-  } else if (rmode_ == JS_RETURN && IsPatchedReturnSequence()) {
+  } else if (IsJSReturn(rmode_) && IsPatchedReturnSequence()) {
     // Special handling of js_return when a break point is set (call
     // instruction has been inserted).
     int32_t* p = reinterpret_cast<int32_t*>(pc_ + 1);
     *p -= delta;  // Relocate entry.
     if (flush_icache) CpuFeatures::FlushICache(p, sizeof(uint32_t));
-  } else if (rmode_ == DEBUG_BREAK_SLOT && IsPatchedDebugBreakSlotSequence()) {
+  } else if (IsDebugBreakSlot(rmode_) && IsPatchedDebugBreakSlotSequence()) {
     // Special handling of a debug break slot when a break point is set (call
     // instruction has been inserted).
     int32_t* p = reinterpret_cast<int32_t*>(pc_ + 1);
index b7ba0cdf9b7293327faa435c10ed4f6e919a9cfd..d86ed3c1ac72c765d6d8923d579a9487ef9b6d97 100644 (file)
@@ -82,9 +82,9 @@ void Displacement::init(Label* L, Type type) {
 
 
 const int RelocInfo::kApplyMask =
-  RelocInfo::kCodeTargetMask | 1 << RelocInfo::RUNTIME_ENTRY |
+    RelocInfo::kCodeTargetMask | 1 << RelocInfo::RUNTIME_ENTRY |
     1 << RelocInfo::JS_RETURN | 1 << RelocInfo::INTERNAL_REFERENCE |
-    1 << RelocInfo::DEBUG_BREAK_SLOT | 1 << RelocInfo::CODE_AGE_SEQUENCE;
+    1 << RelocInfo::CODE_AGE_SEQUENCE | RelocInfo::kDebugBreakSlotMask;
 
 
 bool RelocInfo::IsCodedSpecially() {
index 5555e5f92047643d47b29e37eba0ffa5e10c75d0..3dc8b74a8115d4d2e707d5c03acc839a15b03a6f 100644 (file)
@@ -495,7 +495,7 @@ void MacroAssembler::DebugBreak() {
   Move(eax, Immediate(0));
   mov(ebx, Immediate(ExternalReference(Runtime::kDebugBreak, isolate())));
   CEntryStub ces(isolate(), 1);
-  call(ces.GetCode(), RelocInfo::DEBUG_BREAK);
+  call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT);
 }