Index: src/assembler.h |
diff --git a/src/assembler.h b/src/assembler.h |
index f5349038dac0335c088da76771c2ffd20ef22aec..1b4c76540757a17de02e341327d7f4dacc812064 100644 |
--- a/src/assembler.h |
+++ b/src/assembler.h |
@@ -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 |