Index: src/assembler.h |
diff --git a/src/assembler.h b/src/assembler.h |
index 4fb3a5654084964f934beba41e673d269f1784a0..fc701bf510e1304638416edef2ce2e3c9f989e25 100644 |
--- a/src/assembler.h |
+++ b/src/assembler.h |
@@ -370,13 +370,13 @@ class RelocInfo { |
// Everything after runtime_entry (inclusive) is not GC'ed. |
RUNTIME_ENTRY, |
- JS_RETURN, // Marks start of the ExitJSFrame code. |
COMMENT, |
POSITION, // See comment for kNoPosition above. |
STATEMENT_POSITION, // See comment for kNoPosition above. |
// Additional code inserted for debug break slot. |
DEBUG_BREAK_SLOT_AT_POSITION, |
+ DEBUG_BREAK_SLOT_AT_RETURN, |
DEBUG_BREAK_SLOT_AT_CALL, |
DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL, |
@@ -442,9 +442,6 @@ class RelocInfo { |
static inline bool IsGCRelocMode(Mode mode) { |
return mode <= LAST_GCED_ENUM; |
} |
- static inline bool IsJSReturn(Mode mode) { |
- return mode == JS_RETURN; |
- } |
static inline bool IsComment(Mode mode) { |
return mode == COMMENT; |
} |
@@ -473,12 +470,16 @@ class RelocInfo { |
return mode == INTERNAL_REFERENCE_ENCODED; |
} |
static inline bool IsDebugBreakSlot(Mode mode) { |
- return IsDebugBreakSlotAtPosition(mode) || IsDebugBreakSlotAtCall(mode) || |
+ return IsDebugBreakSlotAtPosition(mode) || IsDebugBreakSlotAtReturn(mode) || |
+ IsDebugBreakSlotAtCall(mode) || |
IsDebugBreakSlotAtConstructCall(mode); |
} |
static inline bool IsDebugBreakSlotAtPosition(Mode mode) { |
return mode == DEBUG_BREAK_SLOT_AT_POSITION; |
} |
+ static inline bool IsDebugBreakSlotAtReturn(Mode mode) { |
+ return mode == DEBUG_BREAK_SLOT_AT_RETURN; |
+ } |
static inline bool IsDebugBreakSlotAtCall(Mode mode) { |
return mode == DEBUG_BREAK_SLOT_AT_CALL; |
} |
@@ -507,10 +508,11 @@ class RelocInfo { |
Code* host() const { return host_; } |
void set_host(Code* host) { host_ = host; } |
- // Apply a relocation by delta bytes |
- INLINE(void apply(intptr_t delta, |
- ICacheFlushMode icache_flush_mode = |
- FLUSH_ICACHE_IF_NEEDED)); |
+ // Apply a relocation by delta bytes. When the code object is moved, PC |
+ // relative addresses have to be updated as well as absolute addresses |
+ // inside the code (internal references). |
+ // Do not forget to flush the icache afterwards! |
+ INLINE(void apply(intptr_t delta)); |
// Is the pointer this relocation info refers to coded like a plain pointer |
// or is it strange in some way (e.g. relative or patched into a series of |
@@ -596,11 +598,8 @@ class RelocInfo { |
// Read/modify the address of a call instruction. This is used to relocate |
// the break points where straight-line code is patched with a call |
// instruction. |
- INLINE(Address call_address()); |
- INLINE(void set_call_address(Address target)); |
- INLINE(Object* call_object()); |
- INLINE(void set_call_object(Object* target)); |
- INLINE(Object** call_object_address()); |
+ INLINE(Address debug_call_address()); |
+ INLINE(void set_debug_call_address(Address target)); |
// Wipe out a relocation to a fixed value, used for making snapshots |
// reproducible. |
@@ -640,9 +639,9 @@ class RelocInfo { |
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. |
+ 1 << DEBUG_BREAK_SLOT_AT_POSITION | 1 << DEBUG_BREAK_SLOT_AT_RETURN | |
+ 1 << DEBUG_BREAK_SLOT_AT_CALL | 1 << DEBUG_BREAK_SLOT_AT_CONSTRUCT_CALL; |
+ static const int kApplyMask; // Modes affected by apply. Depends on arch. |
private: |
// On ARM, note that pc_ is the address of the constant pool entry |