OVP: save/restore registers using protocol buffer

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1206 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
sirozipp
2012-05-05 07:57:43 +00:00
parent 238aafde3e
commit 084ff6eb99
10 changed files with 120 additions and 5 deletions

View File

@ -332,6 +332,61 @@ void ARM_Cortex_M3::makeCallbackMemory(size_t sizeText, size_t offText, size_t s
textMemSize = sizeText;
}
void ARM_Cortex_M3::save(const string& path) {
OVPStatusMessage ovpstat;
// save registers
// FIXME: what about reg with id 16? should be status register
for(unsigned int i = 0; i < 16; ++i) {
uint32_t tmp = 0;
icmRegInfoP reg = icmGetRegByIndex(processorP, i);
icmReadRegInfoValue(processorP, reg, (void *)&tmp);
OVPStatusMessage::Register *msgReg = ovpstat.add_reg();
switch(i) {
case 13: msgReg->set_name("sp");
break;
case 14: msgReg->set_name("lr");
break;
case 15: msgReg->set_name("pc");
break;
case 16: msgReg->set_name("sr");
break;
default: char num[3];
sprintf(num, "r%d", i);
msgReg->set_name(num);
}
msgReg->set_value(tmp);
// std::cerr << "save " << i << ": " << tmp << std::endl;
}
string stmp;
ovpstat.SerializeToString(&stmp);
ofstream file;
file.open(path.c_str(), ios::out);
file << stmp;
file.close();
/* ofstream file(path.c_str(), ios::out | ios::trunc);
if(!ovpstat.SerializeToOstream(&file)) {
std::cerr << "Error writing to file " << path << "!" << std::endl;
}*/
}
void ARM_Cortex_M3::restore(const string& path) {
fstream input(path.c_str(), ios::in);
OVPStatusMessage ovpstat;
ovpstat.ParseFromIstream(&input);
for(int i = 0; i < ovpstat.reg_size(); ++i) {
const OVPStatusMessage::Register& ovpreg = ovpstat.reg(i);
uint32_t val = ovpreg.value();
// std::cerr << "restore "<<ovpreg.name()<<": " << val << std::endl;
icmRegInfoP reg = icmGetRegByIndex(processorP, i);
icmWriteRegInfoValue(processorP, reg, (void *)&val);
}
}
int main(int argc, char **argv) {
if(argc != 2) {
@ -356,7 +411,5 @@ int main(int argc, char **argv) {
arm.makeSTRegister();
arm.makePCRegister();
// sal::simulator.finishedRegisterCreation();
arm.startSimulation(argv[1]);
}

View File

@ -3,6 +3,7 @@
#include "../../OVPCpu.hpp"
#include "ovp/statusmsg/OVPStatusMessage.pb.h"
using namespace icmCpuManager;
@ -26,6 +27,9 @@ class ARM_Cortex_M3 : public OVPCpu {
void makePCRegister();
void makeCallbackMemory(size_t, size_t, size_t, size_t);
void save(const string&);
void restore(const string&);
};