30 #if V8_TARGET_ARCH_ARM
38 #ifdef ENABLE_DEBUGGER_SUPPORT
39 bool BreakLocationIterator::IsDebugBreakAtReturn() {
40 return Debug::IsDebugBreakAtReturn(rinfo());
44 void BreakLocationIterator::SetDebugBreakAtReturn() {
59 debug_info_->GetIsolate()->debug()->debug_break_return()->entry());
60 patcher.masm()->bkpt(0);
65 void BreakLocationIterator::ClearDebugBreakAtReturn() {
66 rinfo()->PatchCode(original_rinfo()->
pc(),
73 bool Debug::IsDebugBreakAtReturn(RelocInfo* rinfo) {
74 ASSERT(RelocInfo::IsJSReturn(rinfo->rmode()));
75 return rinfo->IsPatchedReturnSequence();
79 bool BreakLocationIterator::IsDebugBreakAtSlot() {
80 ASSERT(IsDebugBreakSlot());
82 return rinfo()->IsPatchedDebugBreakSlotSequence();
86 void BreakLocationIterator::SetDebugBreakAtSlot() {
87 ASSERT(IsDebugBreakSlot());
100 debug_info_->GetIsolate()->debug()->debug_break_slot()->entry());
104 void BreakLocationIterator::ClearDebugBreakAtSlot() {
105 ASSERT(IsDebugBreakSlot());
106 rinfo()->PatchCode(original_rinfo()->
pc(),
110 const bool Debug::FramePaddingLayout::kIsSupported =
false;
113 #define __ ACCESS_MASM(masm)
116 static void Generate_DebugBreakCallHelper(MacroAssembler* masm,
127 ASSERT((object_regs & non_object_regs) == 0);
128 if ((object_regs | non_object_regs) != 0) {
131 Register reg = { r };
132 if ((non_object_regs & (1 << r)) != 0) {
133 if (FLAG_debug_code) {
134 __ tst(reg, Operand(0xc0000000));
135 __ Assert(
eq, kUnableToEncodeValueAsSmi);
140 __ stm(
db_w,
sp, object_regs | non_object_regs);
144 __ RecordComment(
"// Calling from debug break to runtime - come in - over");
146 __ mov(
r0, Operand::Zero());
147 __ mov(
r1, Operand(ExternalReference::debug_break(masm->isolate())));
153 if ((object_regs | non_object_regs) != 0) {
154 __ ldm(
ia_w,
sp, object_regs | non_object_regs);
157 Register reg = { r };
158 if ((non_object_regs & (1 << r)) != 0) {
161 if (FLAG_debug_code &&
162 (((object_regs |non_object_regs) & (1 << r)) == 0)) {
174 ExternalReference after_break_target =
175 ExternalReference(Debug_Address::AfterBreakTarget(), masm->isolate());
176 __ mov(
ip, Operand(after_break_target));
182 void Debug::GenerateLoadICDebugBreak(MacroAssembler* masm) {
192 Generate_DebugBreakCallHelper(masm,
r0.
bit() |
r2.
bit(), 0);
196 void Debug::GenerateStoreICDebugBreak(MacroAssembler* masm) {
206 Generate_DebugBreakCallHelper(masm,
r0.
bit() |
r1.
bit() |
r2.
bit(), 0);
210 void Debug::GenerateKeyedLoadICDebugBreak(MacroAssembler* masm) {
215 Generate_DebugBreakCallHelper(masm,
r0.
bit() |
r1.
bit(), 0);
219 void Debug::GenerateKeyedStoreICDebugBreak(MacroAssembler* masm) {
225 Generate_DebugBreakCallHelper(masm,
r0.
bit() |
r1.
bit() |
r2.
bit(), 0);
229 void Debug::GenerateCompareNilICDebugBreak(MacroAssembler* masm) {
234 Generate_DebugBreakCallHelper(masm,
r0.
bit(), 0);
238 void Debug::GenerateCallICDebugBreak(MacroAssembler* masm) {
243 Generate_DebugBreakCallHelper(masm,
r2.
bit(), 0);
247 void Debug::GenerateReturnDebugBreak(MacroAssembler* masm) {
251 Generate_DebugBreakCallHelper(masm,
r0.
bit(), 0);
255 void Debug::GenerateCallFunctionStubDebugBreak(MacroAssembler* masm) {
260 Generate_DebugBreakCallHelper(masm,
r1.
bit(), 0);
264 void Debug::GenerateCallFunctionStubRecordDebugBreak(MacroAssembler* masm) {
271 Generate_DebugBreakCallHelper(masm,
r1.
bit() |
r2.
bit() |
r3.
bit(), 0);
275 void Debug::GenerateCallConstructStubDebugBreak(MacroAssembler* masm) {
281 Generate_DebugBreakCallHelper(masm,
r1.
bit(),
r0.
bit());
285 void Debug::GenerateCallConstructStubRecordDebugBreak(MacroAssembler* masm) {
297 void Debug::GenerateSlot(MacroAssembler* masm) {
301 Label check_codesize;
302 __ bind(&check_codesize);
303 __ RecordDebugBreakSlot();
307 ASSERT_EQ(Assembler::kDebugBreakSlotInstructions,
308 masm->InstructionsGeneratedSince(&check_codesize));
312 void Debug::GenerateSlotDebugBreak(MacroAssembler* masm) {
315 Generate_DebugBreakCallHelper(masm, 0, 0);
319 void Debug::GeneratePlainReturnLiveEdit(MacroAssembler* masm) {
320 masm->Abort(kLiveEditFrameDroppingIsNotSupportedOnArm);
324 void Debug::GenerateFrameDropperLiveEdit(MacroAssembler* masm) {
325 masm->Abort(kLiveEditFrameDroppingIsNotSupportedOnArm);
328 const bool Debug::kFrameDropperSupported =
false;
334 #endif // ENABLE_DEBUGGER_SUPPORT
338 #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