ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
Injector.h
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-3-Clause
2//
3// This file is part of ETISS. It is licensed under the BSD 3-Clause License; you may not use this file except in
4// compliance with the License. You should have received a copy of the license along with this project. If not, see the
5// LICENSE file.
14#ifndef ETISS_INJECTOR_H_
15#define ETISS_INJECTOR_H_
16
17#ifndef NO_ETISS
18#include "etiss/Misc.h"
19#include "etiss/fault/Defs.h"
20#include "etiss/fault/Misc.h"
21#include "etiss/fault/Trigger.h"
22#else
23#include "fault/Defs.h"
24#include "fault/Misc.h"
25#include "fault/Trigger.h"
26#endif
27
28#if CXX0X_UP_SUPPORTED
29#include <functional>
30#include <memory>
31#include <mutex>
32#endif
33
34#include <fstream>
35
36namespace etiss
37{
38
39namespace fault
40{
41
42class Stressor;
43class Fault;
44class Trigger;
45class Action;
46
48{
49 public:
50#if CXX0X_UP_SUPPORTED
51 typedef std::shared_ptr<Injector> ptr;
52#else
53 typedef Injector *ptr;
54#endif
55
56 public: // override in inheriting classes
57 Injector();
58 virtual ~Injector() {};
63 virtual std::list<std::string> listFields() = 0;
68 virtual std::list<std::string> listSubInjectors() = 0;
69
75 virtual ptr getSubInjector(const std::string &name) = 0;
81 virtual ptr getParentInjector() = 0;
82
83 public: // callbacks
84 virtual bool needsCallbacks();
85 virtual bool cycleAccurateCallback(uint64_t time_ps); // returns if trigger fired
86 virtual bool instructionAccurateCallback(uint64_t time_ps); // returns if trigger fired
87
88 public: // currently public functions but might become protected later on
98 virtual void *fastFieldAccessPtr(const std::string &name, std::string &errormsg) = 0;
107 virtual void freeFastFieldAccessPtr(void *);
116 virtual bool readField(void *fastfieldaccessptr, uint64_t &val, std::string &errormsg) = 0;
123 virtual bool applyAction(const etiss::fault::Fault &fault, const etiss::fault::Action &action,
124 std::string &errormsg) = 0;
125
126 virtual bool acceleratedTrigger(const etiss::fault::Trigger &, int32_t fault_id);
127
132 virtual bool update_field_access_rights(const etiss::fault::Action &action, std::string &errormsg) = 0;
133
134 public: // static
140 static ptr get(const std::string &injectorPath);
141
148 virtual std::string getInjectorPath();
149
150 private:
151#if CXX0X_UP_SUPPORTED
152 std::mutex sync;
153#endif
154 bool has_pending_triggers{ false };
155 bool has_remove_triggers{ false };
156 std::list<std::pair<Trigger, int32_t>> pending_triggers;
157 std::list<std::pair<Trigger, int32_t>> unknown_triggers;
158 std::list<std::pair<Trigger, int32_t>>
161
162 public: // interface for Stressor
163 void addTrigger(const Trigger &t, int32_t fault_id);
164 void removeTrigger(const Trigger &t, int32_t fault_id);
165};
166
167} // namespace fault
168
169} // namespace etiss
170
171#endif
contains general definitions used by other fault library code
general configuration and logging
contains the Trigger class that defines conditions under which actions of a Fault need to be applied.
static __inline__ uint64_t
Definition arm_cde.h:31
static __inline__ int32_t
Definition arm_mve.h:51
virtual bool readField(void *fastfieldaccessptr, uint64_t &val, std::string &errormsg)=0
read the value of a field
virtual bool applyAction(const etiss::fault::Fault &fault, const etiss::fault::Action &action, std::string &errormsg)=0
virtual bool acceleratedTrigger(const etiss::fault::Trigger &, int32_t fault_id)
Definition Injector.cpp:216
virtual ptr getParentInjector()=0
get a the parent injector (root returns 0).
virtual void freeFastFieldAccessPtr(void *)
MUST be called to cleanup a pointer acquired with fastFieldAccessPtr() default implementation is nop.
Definition Injector.cpp:37
virtual bool needsCallbacks()
Definition Injector.cpp:43
virtual std::list< std::string > listFields()=0
list all fields directly reachable by this injector
virtual std::string getInjectorPath()
returns the path of the current object.
Definition Injector.cpp:122
virtual void * fastFieldAccessPtr(const std::string &name, std::string &errormsg)=0
virtual ptr getSubInjector(const std::string &name)=0
get a sub injector.
static ptr get(const std::string &injectorPath)
void removeTrigger(const Trigger &t, int32_t fault_id)
Definition Injector.cpp:205
std::list< std::pair< Trigger, int32_t > > remove_triggers
Triggers to synchronously remove on next callback (prio over pending)
Definition Injector.h:159
virtual std::list< std::string > listSubInjectors()=0
list all sub injectors.
std::list< std::pair< Trigger, int32_t > > unknown_triggers
Triggers to look at in callbacks.
Definition Injector.h:157
virtual bool instructionAccurateCallback(uint64_t time_ps)
Definition Injector.cpp:103
virtual bool update_field_access_rights(const etiss::fault::Action &action, std::string &errormsg)=0
Update the field of injector with access rights to allow action (used to get type of action).
virtual bool cycleAccurateCallback(uint64_t time_ps)
Definition Injector.cpp:49
std::list< std::pair< Trigger, int32_t > > pending_triggers
Triggers which were just added.
Definition Injector.h:156
void addTrigger(const Trigger &t, int32_t fault_id)
TODO specialized lists. e.g. time triggers should be sorted and only the earliest time should be chec...
Definition Injector.cpp:184
general helpers for fault
forwards: include/jit/*
Definition Benchmark.h:17