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:
@ -83,7 +83,7 @@ class Register
|
|||||||
void setName(const std::string& name) { m_Name = name; }
|
void setName(const std::string& name) { m_Name = name; }
|
||||||
/**
|
/**
|
||||||
* Retrieves the register name.
|
* Retrieves the register name.
|
||||||
* @return the name
|
* @return the textual register description
|
||||||
*/
|
*/
|
||||||
const std::string& getName() const { return (m_Name); }
|
const std::string& getName() const { return (m_Name); }
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -43,7 +43,7 @@ bool FaultCoverageExperiment::run()
|
|||||||
simulator.addEvent(&ev_func_start);
|
simulator.addEvent(&ev_func_start);
|
||||||
|
|
||||||
cout << "[FaultCoverageExperiment] Waiting for function start address..." << endl;
|
cout << "[FaultCoverageExperiment] Waiting for function start address..." << endl;
|
||||||
while(simulator.waitAny() != &ev_func_start)
|
while (simulator.waitAny() != &ev_func_start)
|
||||||
;
|
;
|
||||||
|
|
||||||
// store current state
|
// store current state
|
||||||
@ -57,15 +57,12 @@ bool FaultCoverageExperiment::run()
|
|||||||
|
|
||||||
RegisterManager& regMan = simulator.getRegisterManager();
|
RegisterManager& regMan = simulator.getRegisterManager();
|
||||||
// iterate over all registers
|
// 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
|
Register* pReg = *it; // get a ptr to the current register-object
|
||||||
// loop over the 32 bits within this register
|
// 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
|
// loop over all instruction addresses of observed function
|
||||||
for(int instr = 0; ; ++instr)
|
for (int instr = 0; ; ++instr) {
|
||||||
{
|
|
||||||
// clear event queues
|
// clear event queues
|
||||||
simulator.clearEvents();
|
simulator.clearEvents();
|
||||||
|
|
||||||
@ -105,28 +102,25 @@ bool FaultCoverageExperiment::run()
|
|||||||
|
|
||||||
// wait for function exit, trap or timeout
|
// wait for function exit, trap or timeout
|
||||||
BaseEvent* ev = simulator.waitAny();
|
BaseEvent* ev = simulator.waitAny();
|
||||||
if(ev == &ev_func_end)
|
if (ev == &ev_func_end) {
|
||||||
{
|
|
||||||
// log result
|
// log result
|
||||||
#if BX_SUPPORT_X86_64
|
#if BX_SUPPORT_X86_64
|
||||||
const GPRegisterId targetreg = sal::RID_RAX;
|
|
||||||
const size_t expected_size = sizeof(uint32_t)*8;
|
const size_t expected_size = sizeof(uint32_t)*8;
|
||||||
#else
|
#else
|
||||||
const GPRegisterId targetreg = sal::RID_EAX;
|
|
||||||
const size_t expected_size = sizeof(uint64_t)*8;
|
const size_t expected_size = sizeof(uint64_t)*8;
|
||||||
#endif
|
#endif
|
||||||
Register* pEAX = simulator.getRegisterManager().getSetOfType(RT_GP)->getRegister(targetreg);
|
Register* pCAX = simulator.getRegisterManager().getSetOfType(RT_GP)->getRegister(sal::RID_CAX);
|
||||||
assert(expected_size == pEAX->getWidth()); // we assume to get 32(64) bits...
|
assert(expected_size == pCAX->getWidth()); // we assume to get 32(64) bits...
|
||||||
regdata_t result = pEAX->getData();
|
regdata_t result = pCAX->getData();
|
||||||
res << "[FaultCoverageExperiment] Reg: " << pReg->getName()
|
res << "[FaultCoverageExperiment] Reg: " << pCAX->getName()
|
||||||
<< ", #Bit: " << bitnr << ", Instr-Idx: " << instr
|
<< ", #Bit: " << bitnr << ", Instr-Idx: " << instr
|
||||||
<< ", Data: " << result;
|
<< ", Data: " << result;
|
||||||
}
|
}
|
||||||
else if(ev == &ev_trap)
|
else if (ev == &ev_trap)
|
||||||
res << "[FaultCoverageExperiment] Reg: " << pReg->getName()
|
res << "[FaultCoverageExperiment] Reg: " << pReg->getName()
|
||||||
<< ", #Bit: " << bitnr << ", Instr-Idx: " << instr
|
<< ", #Bit: " << bitnr << ", Instr-Idx: " << instr
|
||||||
<< ", Trap#: " << ev_trap.getTriggerNumber() << " (Trap)";
|
<< ", Trap#: " << ev_trap.getTriggerNumber() << " (Trap)";
|
||||||
else if(ev == &ev_timeout)
|
else if (ev == &ev_timeout)
|
||||||
res << "[FaultCoverageExperiment] Reg: " << pReg->getName()
|
res << "[FaultCoverageExperiment] Reg: " << pReg->getName()
|
||||||
<< ", #Bit: " << bitnr << ", Instr-Idx: " << instr
|
<< ", #Bit: " << bitnr << ", Instr-Idx: " << instr
|
||||||
<< " (Timeout)";
|
<< " (Timeout)";
|
||||||
|
|||||||
@ -30,11 +30,6 @@ using std::endl;
|
|||||||
|
|
||||||
bool CoolChecksumExperiment::run()
|
bool CoolChecksumExperiment::run()
|
||||||
{
|
{
|
||||||
#if BX_SUPPORT_X86_64
|
|
||||||
int targetreg = sal::RID_RDX;
|
|
||||||
#else
|
|
||||||
int targetreg = sal::RID_EDX;
|
|
||||||
#endif
|
|
||||||
Logger log("CoolChecksum", false);
|
Logger log("CoolChecksum", false);
|
||||||
fi::BPEvent bp;
|
fi::BPEvent bp;
|
||||||
|
|
||||||
@ -84,7 +79,8 @@ bool CoolChecksumExperiment::run()
|
|||||||
// log << "EIP = " << std::hex << sal::simulator.getRegisterManager().getInstructionPointer() << endl;
|
// log << "EIP = " << std::hex << sal::simulator.getRegisterManager().getInstructionPointer() << endl;
|
||||||
}
|
}
|
||||||
log << "test function calculation position reached after " << std::dec << count << " instructions" << 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
|
#if COOL_FAULTSPACE_PRUNING
|
||||||
sal::simulator.removeFlow(&tp);
|
sal::simulator.removeFlow(&tp);
|
||||||
@ -170,8 +166,9 @@ bool CoolChecksumExperiment::run()
|
|||||||
|
|
||||||
fi::BaseEvent* ev = sal::simulator.waitAny();
|
fi::BaseEvent* ev = sal::simulator.waitAny();
|
||||||
if (ev == &ev_done) {
|
if (ev == &ev_done) {
|
||||||
int32_t data = sal::simulator.getRegisterManager().getRegister(targetreg)->getData();
|
sal::Register* pRegRes = sal::simulator.getRegisterManager().getRegister(sal::RID_CDX);
|
||||||
log << std::dec << "Result EDX = " << data << endl;
|
int32_t data = pRegRes->getData();
|
||||||
|
log << std::dec << "Result " << pRegRes->getName() << " = " << data << endl;
|
||||||
param.msg.set_resulttype(param.msg.CALCDONE);
|
param.msg.set_resulttype(param.msg.CALCDONE);
|
||||||
param.msg.set_resultdata(data);
|
param.msg.set_resultdata(data);
|
||||||
} else if (ev == &ev_timeout) {
|
} else if (ev == &ev_timeout) {
|
||||||
|
|||||||
@ -28,7 +28,7 @@ bool hscsimpleExperiment::run()
|
|||||||
sal::simulator.addEventAndWait(&mainbp);
|
sal::simulator.addEventAndWait(&mainbp);
|
||||||
log << "breakpoint reached, saving" << endl;
|
log << "breakpoint reached, saving" << endl;
|
||||||
sal::simulator.save("hello.state");
|
sal::simulator.save("hello.state");
|
||||||
#elif 1
|
#elif 0
|
||||||
// STEP 2
|
// STEP 2
|
||||||
log << "restoring ..." << endl;
|
log << "restoring ..." << endl;
|
||||||
sal::simulator.restore("hello.state");
|
sal::simulator.restore("hello.state");
|
||||||
@ -38,12 +38,8 @@ bool hscsimpleExperiment::run()
|
|||||||
fi::BPEvent breakpoint(0x3c9e); // square(x) ret instruction
|
fi::BPEvent breakpoint(0x3c9e); // square(x) ret instruction
|
||||||
sal::simulator.addEventAndWait(&breakpoint);
|
sal::simulator.addEventAndWait(&breakpoint);
|
||||||
log << "injecting hellish fault" << endl;
|
log << "injecting hellish fault" << endl;
|
||||||
#if BX_SUPPORT_X86_64
|
// RID_CAX is the RAX register in 64 bit mode and EAX in 32 bit mode:
|
||||||
int reg = sal::RID_RAX;
|
sal::simulator.getRegisterManager().getRegister(sal::RID_CAX)->setData(666);
|
||||||
#else
|
|
||||||
int reg = sal::RID_EAX;
|
|
||||||
#endif
|
|
||||||
sal::simulator.getRegisterManager().getRegister(reg)->setData(666);
|
|
||||||
log << "waiting for last main() instruction" << endl;
|
log << "waiting for last main() instruction" << endl;
|
||||||
breakpoint.setWatchInstructionPointer(0x3c92);
|
breakpoint.setWatchInstructionPointer(0x3c92);
|
||||||
sal::simulator.addEventAndWait(&breakpoint);
|
sal::simulator.addEventAndWait(&breakpoint);
|
||||||
|
|||||||
Reference in New Issue
Block a user