Index: runtime/vm/simulator_mips.cc |
=================================================================== |
--- runtime/vm/simulator_mips.cc (revision 42212) |
+++ runtime/vm/simulator_mips.cc (working copy) |
@@ -105,10 +105,6 @@ |
bool is_inlined); |
void PrintBacktrace(); |
- static const int32_t kSimulatorBreakpointInstruction = |
- Instr::kBreakPointInstruction | |
- (Instr::kSimulatorBreakCode << kBreakCodeShift); |
- |
// Set or delete a breakpoint. Returns true if successful. |
bool SetBreakpoint(Instr* breakpc); |
bool DeleteBreakpoint(Instr* breakpc); |
@@ -393,7 +389,7 @@ |
void SimulatorDebugger::RedoBreakpoints() { |
if (sim_->break_pc_ != NULL) { |
- sim_->break_pc_->SetInstructionBits(kSimulatorBreakpointInstruction); |
+ sim_->break_pc_->SetInstructionBits(Instr::kSimulatorBreakpointInstruction); |
} |
} |
@@ -540,11 +536,11 @@ |
end = start + (10 * Instr::kInstrSize); |
} else if (args == 2) { |
if (GetValue(arg1, &start)) { |
- // no length parameter passed, assume 10 instructions |
+ // No length parameter passed, assume 10 instructions. |
if (Simulator::IsIllegalAddress(start)) { |
- // If start isn't a valid address, warn and use PC instead |
+ // If start isn't a valid address, warn and use PC instead. |
OS::Print("First argument yields invalid address: 0x%x\n", start); |
- OS::Print("Using PC instead"); |
+ OS::Print("Using PC instead\n"); |
start = sim_->get_pc(); |
} |
end = start + (10 * Instr::kInstrSize); |
@@ -553,7 +549,7 @@ |
uint32_t length; |
if (GetValue(arg1, &start) && GetValue(arg2, &length)) { |
if (Simulator::IsIllegalAddress(start)) { |
- // If start isn't a valid address, warn and use PC instead |
+ // If start isn't a valid address, warn and use PC instead. |
OS::Print("First argument yields invalid address: 0x%x\n", start); |
OS::Print("Using PC instead\n"); |
start = sim_->get_pc(); |
@@ -561,8 +557,11 @@ |
end = start + (length * Instr::kInstrSize); |
} |
} |
- |
- Disassembler::Disassemble(start, end); |
+ if ((start > 0) && (end > start)) { |
+ Disassembler::Disassemble(start, end); |
+ } else { |
+ OS::Print("disasm [<address> [<number_of_instructions>]]\n"); |
+ } |
} else if (strcmp(cmd, "gdb") == 0) { |
OS::Print("relinquishing control to gdb\n"); |
OS::DebugBreak(); |
@@ -781,9 +780,6 @@ |
} |
private: |
- static const int32_t kRedirectInstruction = |
- Instr::kBreakPointInstruction | (Instr::kRedirectCode << kBreakCodeShift); |
- |
Redirection(uword external_function, |
Simulator::CallKind call_kind, |
int argument_count) |
@@ -790,7 +786,7 @@ |
: external_function_(external_function), |
call_kind_(call_kind), |
argument_count_(argument_count), |
- break_instruction_(kRedirectInstruction), |
+ break_instruction_(Instr::kSimulatorRedirectInstruction), |
next_(list_) { |
list_ = this; |
} |
@@ -1118,7 +1114,7 @@ |
bool result = false; |
for (int i = 0; i < kNumAddressTags; i++) { |
if (exclusive_access_state_[i].isolate == isolate) { |
- // Check whether the current isolates address reservation matches. |
+ // Check whether the current isolate's address reservation matches. |
if (exclusive_access_state_[i].addr == addr) { |
result = true; |
} |
@@ -1203,7 +1199,7 @@ |
dbg.Stop(instr, message); |
// Adjust for extra pc increment. |
set_pc(get_pc() - Instr::kInstrSize); |
- } else if (instr->BreakCodeField() == Instr::kMsgMessageCode) { |
+ } else if (instr->BreakCodeField() == Instr::kSimulatorMessageCode) { |
const char* message = *reinterpret_cast<const char**>( |
reinterpret_cast<intptr_t>(instr) - Instr::kInstrSize); |
if (FLAG_trace_sim) { |
@@ -1212,7 +1208,7 @@ |
OS::PrintErr("Bad break code: 0x%x\n", instr->InstructionBits()); |
UnimplementedInstruction(instr); |
} |
- } else if (instr->BreakCodeField() == Instr::kRedirectCode) { |
+ } else if (instr->BreakCodeField() == Instr::kSimulatorRedirectCode) { |
SimulatorSetjmpBuffer buffer(this); |
if (!setjmp(buffer.buffer_)) { |
@@ -2299,20 +2295,18 @@ |
// FLAG_stop_sim_at is at the non-default value. Stop in the debugger when |
// we reach the particular instruction count or address. |
while (pc_ != kEndSimulatingPC) { |
+ Instr* instr = Instr::At(pc_); |
icount_++; |
- Instr* instr = Instr::At(pc_); |
- if (static_cast<int>(icount_) == FLAG_stop_sim_at) { |
+ if (static_cast<intptr_t>(icount_) == FLAG_stop_sim_at) { |
SimulatorDebugger dbg(this); |
dbg.Stop(instr, "Instruction count reached"); |
- } else if (reinterpret_cast<int>(instr) == FLAG_stop_sim_at) { |
+ } else if (reinterpret_cast<intptr_t>(instr) == FLAG_stop_sim_at) { |
SimulatorDebugger dbg(this); |
dbg.Stop(instr, "Instruction address reached"); |
+ } else if (IsIllegalAddress(pc_)) { |
+ HandleIllegalAccess(pc_, instr); |
} else { |
- if (IsIllegalAddress(pc_)) { |
- HandleIllegalAccess(pc_, instr); |
- } else { |
- InstructionDecode(instr); |
- } |
+ InstructionDecode(instr); |
} |
} |
} |