a879bba2ff
This required support on ARM for: - compilation of static calls - patching of static calls - stub to call into runtime - redirection support for calls from simulator to host runtime - stack frame iteration Review URL: https://codereview.chromium.org//12381034 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19405 260f80e4-7a28-3924-810f-c04153c831b5
95 lines
2.6 KiB
C++
95 lines
2.6 KiB
C++
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#include "vm/globals.h"
|
|
#if defined(TARGET_ARCH_MIPS)
|
|
|
|
// Only build the simulator if not compiling for real MIPS hardware.
|
|
#if !defined(HOST_ARCH_MIPS)
|
|
|
|
#include "vm/simulator.h"
|
|
|
|
#include "vm/assembler.h"
|
|
#include "vm/constants_mips.h"
|
|
#include "vm/disassembler.h"
|
|
|
|
namespace dart {
|
|
|
|
Simulator::Simulator() {
|
|
// Setup simulator support first. Some of this information is needed to
|
|
// setup the architecture state.
|
|
// We allocate the stack here, the size is computed as the sum of
|
|
// the size specified by the user and the buffer space needed for
|
|
// handling stack overflow exceptions. To be safe in potential
|
|
// stack underflows we also add some underflow buffer space.
|
|
stack_ = new char[(Isolate::GetSpecifiedStackSize() +
|
|
Isolate::kStackSizeBuffer +
|
|
kSimulatorStackUnderflowSize)];
|
|
}
|
|
|
|
|
|
Simulator::~Simulator() {
|
|
Isolate* isolate = Isolate::Current();
|
|
if (isolate != NULL) {
|
|
isolate->set_simulator(NULL);
|
|
}
|
|
}
|
|
|
|
|
|
// Get the active Simulator for the current isolate.
|
|
Simulator* Simulator::Current() {
|
|
Simulator* simulator = Isolate::Current()->simulator();
|
|
if (simulator == NULL) {
|
|
simulator = new Simulator();
|
|
Isolate::Current()->set_simulator(simulator);
|
|
}
|
|
return simulator;
|
|
}
|
|
|
|
|
|
// Sets the register in the architecture state. It will also deal with updating
|
|
// Simulator internal state for special registers such as PC.
|
|
void Simulator::set_register(Register reg, int32_t value) {
|
|
UNIMPLEMENTED();
|
|
}
|
|
|
|
|
|
// Get the register from the architecture state. This function does handle
|
|
// the special case of accessing the PC register.
|
|
int32_t Simulator::get_register(Register reg) const {
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
}
|
|
|
|
|
|
// Returns the top of the stack area to enable checking for stack pointer
|
|
// validity.
|
|
uword Simulator::StackTop() const {
|
|
// To be safe in potential stack underflows we leave some buffer above and
|
|
// set the stack top.
|
|
return reinterpret_cast<uword>(stack_) +
|
|
(Isolate::GetSpecifiedStackSize() + Isolate::kStackSizeBuffer);
|
|
}
|
|
|
|
|
|
void Simulator::InitOnce() {
|
|
}
|
|
|
|
|
|
int64_t Simulator::Call(int32_t entry,
|
|
int32_t parameter0,
|
|
int32_t parameter1,
|
|
int32_t parameter2,
|
|
int32_t parameter3,
|
|
int32_t parameter4) {
|
|
UNIMPLEMENTED();
|
|
return 0LL;
|
|
}
|
|
|
|
} // namespace dart
|
|
|
|
#endif // !defined(HOST_ARCH_MIPS)
|
|
|
|
#endif // defined TARGET_ARCH_MIPS
|