Use common register names in experiment code.

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1255 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
adrian
2012-05-18 12:11:22 +00:00
parent 76e3f53fec
commit 8973a8d40a
4 changed files with 20 additions and 33 deletions

View File

@ -83,7 +83,7 @@ class Register
void setName(const std::string& name) { m_Name = name; }
/**
* Retrieves the register name.
* @return the name
* @return the textual register description
*/
const std::string& getName() const { return (m_Name); }
/**

View File

@ -43,7 +43,7 @@ bool FaultCoverageExperiment::run()
simulator.addEvent(&ev_func_start);
cout << "[FaultCoverageExperiment] Waiting for function start address..." << endl;
while(simulator.waitAny() != &ev_func_start)
while (simulator.waitAny() != &ev_func_start)
;
// store current state
@ -57,15 +57,12 @@ bool FaultCoverageExperiment::run()
RegisterManager& regMan = simulator.getRegisterManager();
// iterate over all registers
for(RegisterManager::iterator it = regMan.begin(); it != regMan.end(); it++)
{
for (RegisterManager::iterator it = regMan.begin(); it != regMan.end(); it++) {
Register* pReg = *it; // get a ptr to the current register-object
// loop over the 32 bits within this register
for(regwidth_t bitnr = 0; bitnr < pReg->getWidth(); ++bitnr)
{
for (regwidth_t bitnr = 0; bitnr < pReg->getWidth(); ++bitnr) {
// loop over all instruction addresses of observed function
for(int instr = 0; ; ++instr)
{
for (int instr = 0; ; ++instr) {
// clear event queues
simulator.clearEvents();
@ -105,28 +102,25 @@ bool FaultCoverageExperiment::run()
// wait for function exit, trap or timeout
BaseEvent* ev = simulator.waitAny();
if(ev == &ev_func_end)
{
if (ev == &ev_func_end) {
// log result
#if BX_SUPPORT_X86_64
const GPRegisterId targetreg = sal::RID_RAX;
const size_t expected_size = sizeof(uint32_t)*8;
#else
const GPRegisterId targetreg = sal::RID_EAX;
const size_t expected_size = sizeof(uint64_t)*8;
#endif
Register* pEAX = simulator.getRegisterManager().getSetOfType(RT_GP)->getRegister(targetreg);
assert(expected_size == pEAX->getWidth()); // we assume to get 32(64) bits...
regdata_t result = pEAX->getData();
res << "[FaultCoverageExperiment] Reg: " << pReg->getName()
Register* pCAX = simulator.getRegisterManager().getSetOfType(RT_GP)->getRegister(sal::RID_CAX);
assert(expected_size == pCAX->getWidth()); // we assume to get 32(64) bits...
regdata_t result = pCAX->getData();
res << "[FaultCoverageExperiment] Reg: " << pCAX->getName()
<< ", #Bit: " << bitnr << ", Instr-Idx: " << instr
<< ", Data: " << result;
}
else if(ev == &ev_trap)
else if (ev == &ev_trap)
res << "[FaultCoverageExperiment] Reg: " << pReg->getName()
<< ", #Bit: " << bitnr << ", Instr-Idx: " << instr
<< ", Trap#: " << ev_trap.getTriggerNumber() << " (Trap)";
else if(ev == &ev_timeout)
else if (ev == &ev_timeout)
res << "[FaultCoverageExperiment] Reg: " << pReg->getName()
<< ", #Bit: " << bitnr << ", Instr-Idx: " << instr
<< " (Timeout)";

View File

@ -30,11 +30,6 @@ using std::endl;
bool CoolChecksumExperiment::run()
{
#if BX_SUPPORT_X86_64
int targetreg = sal::RID_RDX;
#else
int targetreg = sal::RID_EDX;
#endif
Logger log("CoolChecksum", false);
fi::BPEvent bp;
@ -84,7 +79,8 @@ bool CoolChecksumExperiment::run()
// log << "EIP = " << std::hex << sal::simulator.getRegisterManager().getInstructionPointer() << endl;
}
log << "test function calculation position reached after " << std::dec << count << " instructions" << endl;
log << std::dec << "EDX = " << sal::simulator.getRegisterManager().getRegister(targetreg)->getData() << endl;
sal::Register* reg = sal::simulator.getRegisterManager().getRegister(sal::RID_CDX);
log << std::dec << reg->getName() << " = " << reg->getData() << endl;
#if COOL_FAULTSPACE_PRUNING
sal::simulator.removeFlow(&tp);
@ -170,8 +166,9 @@ bool CoolChecksumExperiment::run()
fi::BaseEvent* ev = sal::simulator.waitAny();
if (ev == &ev_done) {
int32_t data = sal::simulator.getRegisterManager().getRegister(targetreg)->getData();
log << std::dec << "Result EDX = " << data << endl;
sal::Register* pRegRes = sal::simulator.getRegisterManager().getRegister(sal::RID_CDX);
int32_t data = pRegRes->getData();
log << std::dec << "Result " << pRegRes->getName() << " = " << data << endl;
param.msg.set_resulttype(param.msg.CALCDONE);
param.msg.set_resultdata(data);
} else if (ev == &ev_timeout) {

View File

@ -28,7 +28,7 @@ bool hscsimpleExperiment::run()
sal::simulator.addEventAndWait(&mainbp);
log << "breakpoint reached, saving" << endl;
sal::simulator.save("hello.state");
#elif 1
#elif 0
// STEP 2
log << "restoring ..." << endl;
sal::simulator.restore("hello.state");
@ -38,12 +38,8 @@ bool hscsimpleExperiment::run()
fi::BPEvent breakpoint(0x3c9e); // square(x) ret instruction
sal::simulator.addEventAndWait(&breakpoint);
log << "injecting hellish fault" << endl;
#if BX_SUPPORT_X86_64
int reg = sal::RID_RAX;
#else
int reg = sal::RID_EAX;
#endif
sal::simulator.getRegisterManager().getRegister(reg)->setData(666);
// RID_CAX is the RAX register in 64 bit mode and EAX in 32 bit mode:
sal::simulator.getRegisterManager().getRegister(sal::RID_CAX)->setData(666);
log << "waiting for last main() instruction" << endl;
breakpoint.setWatchInstructionPointer(0x3c92);
sal::simulator.addEventAndWait(&breakpoint);