diff --git a/core/SAL/Register.hpp b/core/SAL/Register.hpp index 4bb614bd..193af1cc 100644 --- a/core/SAL/Register.hpp +++ b/core/SAL/Register.hpp @@ -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); } /** diff --git a/core/experiments/FaultCoverageExperiment/experiment.cc b/core/experiments/FaultCoverageExperiment/experiment.cc index c0a401b9..367c5626 100644 --- a/core/experiments/FaultCoverageExperiment/experiment.cc +++ b/core/experiments/FaultCoverageExperiment/experiment.cc @@ -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)"; diff --git a/core/experiments/coolchecksum/experiment.cc b/core/experiments/coolchecksum/experiment.cc index 58393b88..20aceafb 100644 --- a/core/experiments/coolchecksum/experiment.cc +++ b/core/experiments/coolchecksum/experiment.cc @@ -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) { diff --git a/core/experiments/hscsimple/experiment.cc b/core/experiments/hscsimple/experiment.cc index 5dbffbdd..753c1ae3 100644 --- a/core/experiments/hscsimple/experiment.cc +++ b/core/experiments/hscsimple/experiment.cc @@ -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);