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; }
|
||||
/**
|
||||
* Retrieves the register name.
|
||||
* @return the name
|
||||
* @return the textual register description
|
||||
*/
|
||||
const std::string& getName() const { return (m_Name); }
|
||||
/**
|
||||
|
||||
@ -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)";
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user