| 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
|
|
|