#ifndef _SAVE_STATE_AH__ #define _SAVE_STATE_AH__ #include "config/VariantConfig.hpp" #include "config/FailConfig.hpp" #if defined(BUILD_BOCHS) && defined(CONFIG_SR_SAVE) #include "bochs.h" #include "../SALInst.hpp" aspect SaveState { pointcut cpuLoop() = "void defineCPULoopJoinPoint(...)"; // make sure the "SaveState" aspect comes *after* the breakpoint stuff: In // an "after" advice this means it must get a *higher* precedence, // therefore it's first in the order list. advice execution (cpuLoop()) : order ("SaveState", "Breakpoints"); advice execution (cpuLoop()) : after () { if (!fail::save_bochs_request) return; assert(fail::sr_path.size() > 0 && "FATAL ERROR: tried to save state without valid path"); SIM->save_state(fail::sr_path.c_str()); std::cout << "[FAIL] Save finished" << std::endl; // TODO: Log-Level? fail::simulator.saveDone(); } }; #endif // CONFIG_SR_SAVE #endif // _SAVE_STATE_AH__