30 #if defined(V8_TARGET_ARCH_ARM)
38 #ifdef ENABLE_DEBUGGER_SUPPORT
39 bool BreakLocationIterator::IsDebugBreakAtReturn() {
40 return Debug::IsDebugBreakAtReturn(rinfo());
44 void BreakLocationIterator::SetDebugBreakAtReturn() {
68 patcher.Emit(Isolate::Current()->debug()->debug_break_return()->entry());
69 patcher.masm()->bkpt(0);
74 void BreakLocationIterator::ClearDebugBreakAtReturn() {
75 rinfo()->PatchCode(original_rinfo()->
pc(),
82 bool Debug::IsDebugBreakAtReturn(RelocInfo* rinfo) {
83 ASSERT(RelocInfo::IsJSReturn(rinfo->rmode()));
84 return rinfo->IsPatchedReturnSequence();
88 bool BreakLocationIterator::IsDebugBreakAtSlot() {
89 ASSERT(IsDebugBreakSlot());
91 return rinfo()->IsPatchedDebugBreakSlotSequence();
95 void BreakLocationIterator::SetDebugBreakAtSlot() {
96 ASSERT(IsDebugBreakSlot());
118 patcher.Emit(Isolate::Current()->debug()->debug_break_slot()->entry());
122 void BreakLocationIterator::ClearDebugBreakAtSlot() {
123 ASSERT(IsDebugBreakSlot());
124 rinfo()->PatchCode(original_rinfo()->
pc(),
128 const bool Debug::FramePaddingLayout::kIsSupported =
false;
131 #define __ ACCESS_MASM(masm)
134 static void Generate_DebugBreakCallHelper(MacroAssembler* masm,
145 ASSERT((object_regs & non_object_regs) == 0);
146 if ((object_regs | non_object_regs) != 0) {
149 Register reg = { r };
150 if ((non_object_regs & (1 << r)) != 0) {
151 if (FLAG_debug_code) {
152 __ tst(reg, Operand(0xc0000000));
153 __ Assert(
eq,
"Unable to encode value as smi");
158 __ stm(
db_w,
sp, object_regs | non_object_regs);
162 __ RecordComment(
"// Calling from debug break to runtime - come in - over");
165 __ mov(
r1, Operand(ExternalReference::debug_break(masm->isolate())));
171 if ((object_regs | non_object_regs) != 0) {
172 __ ldm(
ia_w,
sp, object_regs | non_object_regs);
175 Register reg = { r };
176 if ((non_object_regs & (1 << r)) != 0) {
179 if (FLAG_debug_code &&
180 (((object_regs |non_object_regs) & (1 << r)) == 0)) {
192 ExternalReference after_break_target =
193 ExternalReference(Debug_Address::AfterBreakTarget(), masm->isolate());
194 __ mov(
ip, Operand(after_break_target));
200 void Debug::GenerateLoadICDebugBreak(MacroAssembler* masm) {
210 Generate_DebugBreakCallHelper(masm,
r0.
bit() |
r2.
bit(), 0);
214 void Debug::GenerateStoreICDebugBreak(MacroAssembler* masm) {
224 Generate_DebugBreakCallHelper(masm,
r0.
bit() |
r1.
bit() |
r2.
bit(), 0);
228 void Debug::GenerateKeyedLoadICDebugBreak(MacroAssembler* masm) {
233 Generate_DebugBreakCallHelper(masm,
r0.
bit() |
r1.
bit(), 0);
237 void Debug::GenerateKeyedStoreICDebugBreak(MacroAssembler* masm) {
243 Generate_DebugBreakCallHelper(masm,
r0.
bit() |
r1.
bit() |
r2.
bit(), 0);
247 void Debug::GenerateCallICDebugBreak(MacroAssembler* masm) {
252 Generate_DebugBreakCallHelper(masm,
r2.
bit(), 0);
256 void Debug::GenerateReturnDebugBreak(MacroAssembler* masm) {
260 Generate_DebugBreakCallHelper(masm,
r0.
bit(), 0);
264 void Debug::GenerateCallFunctionStubDebugBreak(MacroAssembler* masm) {
269 Generate_DebugBreakCallHelper(masm,
r1.
bit(), 0);
273 void Debug::GenerateCallFunctionStubRecordDebugBreak(MacroAssembler* masm) {
279 Generate_DebugBreakCallHelper(masm,
r1.
bit() |
r2.
bit(), 0);
283 void Debug::GenerateCallConstructStubDebugBreak(MacroAssembler* masm) {
289 Generate_DebugBreakCallHelper(masm,
r1.
bit(),
r0.
bit());
293 void Debug::GenerateCallConstructStubRecordDebugBreak(MacroAssembler* masm) {
304 void Debug::GenerateSlot(MacroAssembler* masm) {
308 Label check_codesize;
309 __ bind(&check_codesize);
310 __ RecordDebugBreakSlot();
314 ASSERT_EQ(Assembler::kDebugBreakSlotInstructions,
315 masm->InstructionsGeneratedSince(&check_codesize));
319 void Debug::GenerateSlotDebugBreak(MacroAssembler* masm) {
322 Generate_DebugBreakCallHelper(masm, 0, 0);
326 void Debug::GeneratePlainReturnLiveEdit(MacroAssembler* masm) {
327 masm->Abort(
"LiveEdit frame dropping is not supported on arm");
331 void Debug::GenerateFrameDropperLiveEdit(MacroAssembler* masm) {
332 masm->Abort(
"LiveEdit frame dropping is not supported on arm");
335 const bool Debug::kFrameDropperSupported =
false;
341 #endif // ENABLE_DEBUGGER_SUPPORT
345 #endif // V8_TARGET_ARCH_ARM
static const int kDebugBreakSlotInstructions
#define ASSERT(condition)
const RegList kJSCallerSaved
friend class BlockConstPoolScope
int JSCallerSavedCode(int n)
const int kNumJSCallerSaved
#define ASSERT_EQ(v1, v2)
static const int kJSReturnSequenceInstructions
const uint32_t kDebugZapValue