Index: runtime/vm/simulator_mips.h |
=================================================================== |
--- runtime/vm/simulator_mips.h (revision 20788) |
+++ runtime/vm/simulator_mips.h (working copy) |
@@ -20,6 +20,9 @@ |
namespace dart { |
+class Isolate; |
+class SimulatorSetjmpBuffer; |
+ |
class Simulator { |
public: |
static const uword kSimulatorStackUnderflowSize = 64; |
@@ -64,6 +67,14 @@ |
int32_t parameter2, |
int32_t parameter3); |
+ // Runtime and native call support. |
+ enum CallKind { |
+ kRuntimeCall, |
+ kLeafRuntimeCall, |
+ kNativeCall |
+ }; |
+ static uword RedirectExternalReference(uword function, CallKind call_kind); |
+ |
private: |
// A pc value used to signal the simulator to stop execution. Generally |
// the ra is set to this value on transition from native C code to |
@@ -83,6 +94,7 @@ |
char* stack_; |
int icount_; |
bool delay_slot_; |
+ SimulatorSetjmpBuffer* last_setjmp_buffer_; |
// Registered breakpoints. |
Instr* break_pc_; |
@@ -120,6 +132,8 @@ |
inline void WriteW(uword addr, int value, Instr* instr); |
void DoBranch(Instr* instr, bool taken, bool likely); |
+ void DoBreak(Instr *instr); |
+ |
void DecodeSpecial(Instr* instr); |
void DecodeSpecial2(Instr* instr); |
void DecodeRegImm(Instr* instr); |
@@ -128,7 +142,16 @@ |
void Execute(); |
void ExecuteDelaySlot(); |
+ // Longjmp support for exceptions. |
+ SimulatorSetjmpBuffer* last_setjmp_buffer() { |
+ return last_setjmp_buffer_; |
+ } |
+ void set_last_setjmp_buffer(SimulatorSetjmpBuffer* buffer) { |
+ last_setjmp_buffer_ = buffer; |
+ } |
+ |
friend class SimulatorDebugger; |
+ friend class SimulatorSetjmpBuffer; |
}; |
} // namespace dart |