core/sal: Added features that indicate whether FAIL* is initialized

GEM5 throws a reset trap during initialization.
This happens before the startup function is called.
This leads to problems because the startup function fills the m_CPUs list.
m_CPUs is needed for the TrapListener.
Therefore, we only react on traps after initialization.
This is needed in the following commit (see gem5/src/arch/arm/faults.cc).

Change-Id: I9ec6fd453705feb54b4f8a87d024181323a2d7ef
This commit is contained in:
Richard Hellwig
2014-01-14 13:07:21 +01:00
parent 0907dfb0ae
commit 3c7861ff06
2 changed files with 11 additions and 2 deletions

View File

@ -50,6 +50,9 @@ void SimulatorController::startup()
std::cout << "[SimulatorController] Initializing..." << std::endl;
// TODO: Log-Level?
// Set Fail* as initialized
m_isInitialized = true;
// Activate previously added experiments to allow initialization:
initExperiments();
}

View File

@ -34,14 +34,15 @@ class MemoryManager;
*/
class SimulatorController {
protected:
bool m_isInitialized;
ListenerManager m_LstList; //!< storage where listeners are being buffered
CoroutineManager m_Flows; //!< managed experiment flows
MemoryManager *m_Mem; //!< access to memory pool
std::vector<ConcreteCPU*> m_CPUs; //!< list of CPUs in the target system
friend class ListenerManager; //!< "outsources" the listener management
public:
SimulatorController() : m_Mem(NULL) { }
SimulatorController(MemoryManager* mem) : m_Mem(mem) { }
SimulatorController() : m_isInitialized(false), m_Mem(NULL) { }
SimulatorController(MemoryManager* mem) : m_isInitialized(false), m_Mem(mem) { }
virtual ~SimulatorController() { }
/**
* @brief Initialization function each implementation needs to call on
@ -251,6 +252,11 @@ public:
* @see SimulatorController::getTimerTicks()
*/
virtual simtime_t getTimerTicksPerSecond() { return 0; }
/**
* Returns whether FAIL* has already been initialized.
* @return A Boolean, indicating whether FAIL* has been initialized.
*/
bool isInitialized() { return m_isInitialized; }
};
} // end-of-namespace: fail