gem5  v19.0.0.0
thread_context.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2019 Google, Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met: redistributions of source code must retain the above copyright
7  * notice, this list of conditions and the following disclaimer;
8  * redistributions in binary form must reproduce the above copyright
9  * notice, this list of conditions and the following disclaimer in the
10  * documentation and/or other materials provided with the distribution;
11  * neither the name of the copyright holders nor the names of its
12  * contributors may be used to endorse or promote products derived from
13  * this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  *
27  * Authors: Gabe Black
28  */
29 
30 #ifndef __ARCH_ARM_FASTMODEL_IRIS_THREAD_CONTEXT_HH__
31 #define __ARCH_ARM_FASTMODEL_IRIS_THREAD_CONTEXT_HH__
32 
33 #include <list>
34 #include <map>
35 #include <memory>
36 
37 #include "cpu/base.hh"
38 #include "cpu/thread_context.hh"
39 #include "iris/IrisInstance.h"
40 #include "iris/detail/IrisErrorCode.h"
41 #include "iris/detail/IrisObjects.h"
42 #include "sim/system.hh"
43 
44 namespace Iris
45 {
46 
47 // This class is the base for ThreadContexts which read and write state using
48 // the Iris API.
50 {
51  public:
52  typedef std::map<std::string, iris::ResourceInfo> ResourceMap;
53 
55  typedef std::map<int, std::string> IdxNameMap;
56 
57  protected:
59  int _threadId;
64 
65  std::string _irisPath;
66  iris::InstanceId _instId = iris::IRIS_UINT64_MAX;
67 
68  // Temporary holding places for the vector reg accessors to return.
69  // These are not updated live, only when requested.
72 
74 
75  virtual void initFromIrisInstance(const ResourceMap &resources);
76 
77  iris::ResourceId extractResourceId(
78  const ResourceMap &resources, const std::string &name);
79  void extractResourceMap(ResourceIds &ids,
80  const ResourceMap &resources, const IdxNameMap &idx_names);
81 
82 
83  ResourceIds miscRegIds;
84  ResourceIds intReg32Ids;
85  ResourceIds intReg64Ids;
86  ResourceIds flattenedIntIds;
87  ResourceIds ccRegIds;
88 
89  iris::ResourceId pcRscId = iris::IRIS_UINT64_MAX;
90  iris::ResourceId icountRscId;
91 
92  ResourceIds vecRegIds;
93  ResourceIds vecPredRegIds;
94 
97 
98  std::unique_ptr<PortProxy> virtProxy = nullptr;
99  std::unique_ptr<PortProxy> physProxy = nullptr;
100 
101 
102  // A queue to keep track of instruction count based events.
104  // A helper function to maintain the IRIS step count. This makes sure the
105  // step count is correct even after IRIS resets it for us, and also handles
106  // events which are supposed to happen at the current instruction count.
107  void maintainStepping();
108 
109 
110  using BpId = uint64_t;
111  struct BpInfo
112  {
116 
117  BpInfo(Addr _pc) : pc(_pc), id(iris::IRIS_UINT64_MAX) {}
118 
119  bool empty() const { return events.empty(); }
120  bool validId() const { return id != iris::IRIS_UINT64_MAX; }
121  void clearId() { id = iris::IRIS_UINT64_MAX; }
122  };
123 
124  using BpInfoPtr = std::unique_ptr<BpInfo>;
125  using BpInfoMap = std::map<Addr, BpInfoPtr>;
126  using BpInfoIt = BpInfoMap::iterator;
127 
129 
131 
132  void installBp(BpInfoIt it);
133  void uninstallBp(BpInfoIt it);
134  void delBp(BpInfoIt it);
135 
136  virtual iris::MemorySpaceId getBpSpaceId(Addr pc) const = 0;
137 
138 
139  iris::IrisErrorCode instanceRegistryChanged(
140  uint64_t esId, const iris::IrisValueMap &fields, uint64_t time,
141  uint64_t sInstId, bool syncEc, std::string &error_message_out);
142  iris::IrisErrorCode phaseInitLeave(
143  uint64_t esId, const iris::IrisValueMap &fields, uint64_t time,
144  uint64_t sInstId, bool syncEc, std::string &error_message_out);
145  iris::IrisErrorCode simulationTimeEvent(
146  uint64_t esId, const iris::IrisValueMap &fields, uint64_t time,
147  uint64_t sInstId, bool syncEc, std::string &error_message_out);
148  iris::IrisErrorCode breakpointHit(
149  uint64_t esId, const iris::IrisValueMap &fields, uint64_t time,
150  uint64_t sInstId, bool syncEc, std::string &error_message_out);
151 
152  iris::EventStreamId regEventStreamId;
153  iris::EventStreamId initEventStreamId;
154  iris::EventStreamId timeEventStreamId;
155  iris::EventStreamId breakpointEventStreamId;
156 
157  mutable iris::IrisInstance client;
158  iris::IrisCppAdapter &call() const { return client.irisCall(); }
159  iris::IrisCppAdapter &noThrow() const { return client.irisCallNoThrow(); }
160 
161  bool translateAddress(Addr &paddr, iris::MemorySpaceId p_space,
162  Addr vaddr, iris::MemorySpaceId v_space);
163 
164  public:
165  ThreadContext(::BaseCPU *cpu, int id, System *system,
166  ::BaseTLB *dtb, ::BaseTLB *itb,
167  iris::IrisConnectionInterface *iris_if,
168  const std::string &iris_path);
169  virtual ~ThreadContext();
170 
171  virtual bool translateAddress(Addr &paddr, Addr vaddr) = 0;
172 
173  bool schedule(PCEvent *e) override;
174  bool remove(PCEvent *e) override;
175 
176  void scheduleInstCountEvent(Event *event, Tick count) override;
177  void descheduleInstCountEvent(Event *event) override;
178  Tick getCurrentInstCount() override;
179 
180  ::BaseCPU *getCpuPtr() override { return _cpu; }
181  int cpuId() const override { return _cpu->cpuId(); }
182  uint32_t socketId() const override { return _cpu->socketId(); }
183 
184  int threadId() const override { return _threadId; }
185  void setThreadId(int id) override { _threadId = id; }
186 
187  int contextId() const override { return _contextId; }
188  void setContextId(int id) override { _contextId = id; }
189 
190  BaseTLB *
191  getITBPtr() override
192  {
193  return _itb;
194  }
195  BaseTLB *
196  getDTBPtr() override
197  {
198  return _dtb;
199  }
200  CheckerCPU *
201  getCheckerCpuPtr() override
202  {
203  panic("%s not implemented.", __FUNCTION__);
204  }
206  getDecoderPtr() override
207  {
208  panic("%s not implemented.", __FUNCTION__);
209  }
210 
211  System *getSystemPtr() override { return _cpu->system; }
212 
213  BaseISA *
214  getIsaPtr() override
215  {
216  panic("%s not implemented.", __FUNCTION__);
217  }
218 
220  getKernelStats() override
221  {
222  panic("%s not implemented.", __FUNCTION__);
223  }
224 
225  PortProxy &getPhysProxy() override { return *physProxy; }
226  PortProxy &getVirtProxy() override { return *virtProxy; }
227  void initMemProxies(::ThreadContext *tc) override;
228 
229  Process *
230  getProcessPtr() override
231  {
232  panic("%s not implemented.", __FUNCTION__);
233  }
234  void
236  {
237  panic("%s not implemented.", __FUNCTION__);
238  }
239 
240  Status status() const override;
241  void setStatus(Status new_status) override;
242  void activate() override { setStatus(Active); }
243  void suspend() override { setStatus(Suspended); }
244  void halt() override { setStatus(Halted); }
245 
246  void
247  dumpFuncProfile() override
248  {
249  panic("%s not implemented.", __FUNCTION__);
250  }
251 
252  void
253  takeOverFrom(::ThreadContext *old_context) override
254  {
255  panic("%s not implemented.", __FUNCTION__);
256  }
257 
258  void regStats(const std::string &name) override {}
259 
261  getQuiesceEvent() override
262  {
263  panic("%s not implemented.", __FUNCTION__);
264  }
265 
266  // Not necessarily the best location for these...
267  // Having an extra function just to read these is obnoxious
268  Tick
269  readLastActivate() override
270  {
271  panic("%s not implemented.", __FUNCTION__);
272  }
274  {
275  panic("%s not implemented.", __FUNCTION__);
276  }
277 
278  void
279  profileClear() override
280  {
281  panic("%s not implemented.", __FUNCTION__);
282  }
283  void
284  profileSample() override
285  {
286  panic("%s not implemented.", __FUNCTION__);
287  }
288 
289  void
290  copyArchRegs(::ThreadContext *tc) override
291  {
292  panic("%s not implemented.", __FUNCTION__);
293  }
294 
295  void
296  clearArchRegs() override
297  {
298  panic("%s not implemented.", __FUNCTION__);
299  }
300 
301  //
302  // New accessors for new decoder.
303  //
304  RegVal readIntReg(RegIndex reg_idx) const override;
305 
306  RegVal
307  readFloatReg(RegIndex reg_idx) const override
308  {
309  panic("%s not implemented.", __FUNCTION__);
310  }
311 
312  const VecRegContainer &readVecReg(const RegId &reg) const override;
314  getWritableVecReg(const RegId &reg) override
315  {
316  panic("%s not implemented.", __FUNCTION__);
317  }
318 
323  readVec8BitLaneReg(const RegId &reg) const override
324  {
325  panic("%s not implemented.", __FUNCTION__);
326  }
327 
330  readVec16BitLaneReg(const RegId &reg) const override
331  {
332  panic("%s not implemented.", __FUNCTION__);
333  }
334 
337  readVec32BitLaneReg(const RegId &reg) const override
338  {
339  panic("%s not implemented.", __FUNCTION__);
340  }
341 
344  readVec64BitLaneReg(const RegId &reg) const override
345  {
346  panic("%s not implemented.", __FUNCTION__);
347  }
348 
350  void
351  setVecLane(const RegId &reg, const LaneData<LaneSize::Byte> &val) override
352  {
353  panic("%s not implemented.", __FUNCTION__);
354  }
355  void
356  setVecLane(const RegId &reg,
357  const LaneData<LaneSize::TwoByte> &val) override
358  {
359  panic("%s not implemented.", __FUNCTION__);
360  }
361  void
362  setVecLane(const RegId &reg,
363  const LaneData<LaneSize::FourByte> &val) override
364  {
365  panic("%s not implemented.", __FUNCTION__);
366  }
367  void
368  setVecLane(const RegId &reg,
369  const LaneData<LaneSize::EightByte> &val) override
370  {
371  panic("%s not implemented.", __FUNCTION__);
372  }
375  const VecElem &
376  readVecElem(const RegId &reg) const override
377  {
378  panic("%s not implemented.", __FUNCTION__);
379  }
380 
381  const VecPredRegContainer &readVecPredReg(const RegId &reg) const override;
383  getWritableVecPredReg(const RegId &reg) override
384  {
385  panic("%s not implemented.", __FUNCTION__);
386  }
387 
388  RegVal
389  readCCReg(RegIndex reg_idx) const override
390  {
391  return readCCRegFlat(reg_idx);
392  }
393 
394  void setIntReg(RegIndex reg_idx, RegVal val) override;
395 
396  void
397  setFloatReg(RegIndex reg_idx, RegVal val) override
398  {
399  panic("%s not implemented.", __FUNCTION__);
400  }
401 
402  void
403  setVecReg(const RegId &reg, const VecRegContainer &val) override
404  {
405  panic("%s not implemented.", __FUNCTION__);
406  }
407 
408  void
409  setVecElem(const RegId& reg, const VecElem& val) override
410  {
411  panic("%s not implemented.", __FUNCTION__);
412  }
413 
414  void
415  setVecPredReg(const RegId &reg,
416  const VecPredRegContainer &val) override
417  {
418  panic("%s not implemented.", __FUNCTION__);
419  }
420 
421  void
422  setCCReg(RegIndex reg_idx, RegVal val) override
423  {
424  setCCRegFlat(reg_idx, val);
425  }
426 
427  void pcStateNoRecord(const ArmISA::PCState &val) override { pcState(val); }
428  MicroPC microPC() const override { return 0; }
429 
430  ArmISA::PCState pcState() const override;
431  void pcState(const ArmISA::PCState &val) override;
432  Addr instAddr() const override;
433  Addr nextInstAddr() const override;
434 
435  RegVal readMiscRegNoEffect(RegIndex misc_reg) const override;
436  RegVal
437  readMiscReg(RegIndex misc_reg) override
438  {
439  return readMiscRegNoEffect(misc_reg);
440  }
441 
442  void setMiscRegNoEffect(RegIndex misc_reg, const RegVal val) override;
443  void
444  setMiscReg(RegIndex misc_reg, const RegVal val) override
445  {
446  setMiscRegNoEffect(misc_reg, val);
447  }
448 
449  RegId
450  flattenRegId(const RegId& regId) const override
451  {
452  panic("%s not implemented.", __FUNCTION__);
453  }
454 
455  // Also not necessarily the best location for these two. Hopefully will go
456  // away once we decide upon where st cond failures goes.
457  unsigned
458  readStCondFailures() const override
459  {
460  panic("%s not implemented.", __FUNCTION__);
461  }
462 
463  void
464  setStCondFailures(unsigned sc_failures) override
465  {
466  panic("%s not implemented.", __FUNCTION__);
467  }
468 
469  // Same with st cond failures.
470  Counter
471  readFuncExeInst() const override
472  {
473  panic("%s not implemented.", __FUNCTION__);
474  }
475 
476  void
477  syscall(Fault *fault) override
478  {
479  panic("%s not implemented.", __FUNCTION__);
480  }
481 
494  RegVal readIntRegFlat(RegIndex idx) const override;
495  void setIntRegFlat(RegIndex idx, uint64_t val) override;
496 
497  RegVal
498  readFloatRegFlat(RegIndex idx) const override
499  {
500  panic("%s not implemented.", __FUNCTION__);
501  }
502  void
503  setFloatRegFlat(RegIndex idx, RegVal val) override
504  {
505  panic("%s not implemented.", __FUNCTION__);
506  }
507 
508  const VecRegContainer &readVecRegFlat(RegIndex idx) const override;
511  {
512  panic("%s not implemented.", __FUNCTION__);
513  }
514  void
515  setVecRegFlat(RegIndex idx, const VecRegContainer &val) override
516  {
517  panic("%s not implemented.", __FUNCTION__);
518  }
519 
520  const VecElem&
521  readVecElemFlat(RegIndex idx, const ElemIndex& elemIdx) const override
522  {
523  panic("%s not implemented.", __FUNCTION__);
524  }
525  void
526  setVecElemFlat(RegIndex idx, const ElemIndex &elemIdx,
527  const VecElem &val) override
528  {
529  panic("%s not implemented.", __FUNCTION__);
530  }
531 
532  const VecPredRegContainer &readVecPredRegFlat(RegIndex idx) const override;
535  {
536  panic("%s not implemented.", __FUNCTION__);
537  }
538  void
540  {
541  panic("%s not implemented.", __FUNCTION__);
542  }
543 
544  RegVal readCCRegFlat(RegIndex idx) const override;
545  void setCCRegFlat(RegIndex idx, RegVal val) override;
548 };
549 
550 } // namespace Iris
551 
552 #endif // __ARCH_ARM_FASTMODEL_IRIS_THREAD_CONTEXT_HH__
count
Definition: misc.hh:705
void setStatus(Status new_status) override
void setCCRegFlat(RegIndex idx, RegVal val) override
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:167
VecRegContainer & getWritableVecReg(const RegId &reg) override
void setThreadId(int id) override
TheISA::VecElem VecElem
Bitfield< 5, 3 > reg
Definition: types.hh:89
Addr instAddr() const override
RegVal readCCRegFlat(RegIndex idx) const override
ResourceIds intReg64Ids
void clearArchRegs() override
void setVecLane(const RegId &reg, const LaneData< LaneSize::Byte > &val) override
Write a lane of the destination vector register.
const std::string & name()
Definition: trace.cc:54
CheckerCPU class.
Definition: cpu.hh:87
BaseISA * getIsaPtr() override
std::vector< iris::MemorySpaceInfo > memorySpaces
VecPredRegContainer & getWritableVecPredRegFlat(RegIndex idx) override
VecRegContainer & getWritableVecRegFlat(RegIndex idx) override
iris::EventStreamId initEventStreamId
std::vector< ArmISA::VecPredRegContainer > vecPredRegs
Vector Register Abstraction This generic class is the model in a particularization of MVC...
Definition: vec_reg.hh:160
const VecPredRegContainer & readVecPredRegFlat(RegIndex idx) const override
iris::InstanceId _instId
int cpuId() const override
CheckerCPU * getCheckerCpuPtr() override
RegVal readFloatRegFlat(RegIndex idx) const override
iris::IrisCppAdapter & noThrow() const
uint64_t RegVal
Definition: types.hh:168
void setStCondFailures(unsigned sc_failures) override
std::vector< iris::MemorySupportedAddressTranslationResult > translations
BpInfoIt getOrAllocBp(Addr pc)
Definition: system.hh:77
const VecRegContainer & readVecReg(const RegId &reg) const override
ArmISA::PCState pcState() const override
System * system
Definition: base.hh:386
std::unique_ptr< PortProxy > physProxy
void setMiscRegNoEffect(RegIndex misc_reg, const RegVal val) override
RegVal readIntRegFlat(RegIndex idx) const override
Flat register interfaces.
const VecElem & readVecElemFlat(RegIndex idx, const ElemIndex &elemIdx) const override
std::map< std::string, iris::ResourceInfo > ResourceMap
iris::ResourceId pcRscId
std::vector< iris::ResourceId > ResourceIds
int cpuId() const
Reads this CPU&#39;s ID.
Definition: base.hh:183
void setIntReg(RegIndex reg_idx, RegVal val) override
ResourceIds miscRegIds
iris::EventStreamId timeEventStreamId
Event for timing out quiesce instruction.
std::map< Addr, BpInfoPtr > BpInfoMap
Bitfield< 63 > val
Definition: misc.hh:771
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
void setMiscReg(RegIndex misc_reg, const RegVal val) override
iris::ResourceId icountRscId
ResourceIds intReg32Ids
EndQuiesceEvent * getQuiesceEvent() override
VecPredRegContainer & getWritableVecPredReg(const RegId &reg) override
RegVal readCCReg(RegIndex reg_idx) const override
void setIntRegFlat(RegIndex idx, uint64_t val) override
void descheduleInstCountEvent(Event *event) override
BaseTLB * getDTBPtr() override
RegVal readIntReg(RegIndex reg_idx) const override
int threadId() const override
Definition: tlb.hh:52
void setVecLane(const RegId &reg, const LaneData< LaneSize::TwoByte > &val) override
LaneSize is an abstraction of a LS byte value for the execution and thread contexts to handle values ...
Definition: vec_reg.hh:457
ConstVecLane8 readVec8BitLaneReg(const RegId &reg) const override
Vector Register Lane Interfaces.
EventQueue comInstEventQueue
Queue of events sorted in time order.
Definition: eventq.hh:492
std::unique_ptr< PortProxy > virtProxy
uint16_t RegIndex
Definition: types.hh:42
const VecRegContainer & readVecRegFlat(RegIndex idx) const override
void setVecElem(const RegId &reg, const VecElem &val) override
Bitfield< 39, 36 > ids
virtual void initFromIrisInstance(const ResourceMap &resources)
iris::IrisErrorCode phaseInitLeave(uint64_t esId, const iris::IrisValueMap &fields, uint64_t time, uint64_t sInstId, bool syncEc, std::string &error_message_out)
uint64_t Tick
Tick count type.
Definition: types.hh:63
void setCCReg(RegIndex reg_idx, RegVal val) override
void halt() override
Set the status to Halted.
virtual iris::MemorySpaceId getBpSpaceId(Addr pc) const =0
PortProxy & getPhysProxy() override
BaseTLB * getITBPtr() override
void syscall(Fault *fault) override
unsigned readStCondFailures() const override
iris::ResourceId extractResourceId(const ResourceMap &resources, const std::string &name)
RegVal readMiscReg(RegIndex misc_reg) override
void setVecElemFlat(RegIndex idx, const ElemIndex &elemIdx, const VecElem &val) override
iris::EventStreamId regEventStreamId
ConstVecLane32 readVec32BitLaneReg(const RegId &reg) const override
Reads source vector 32bit operand.
uint16_t MicroPC
Definition: types.hh:144
const VecElem & readVecElem(const RegId &reg) const override
iris::IrisCppAdapter & call() const
iris::IrisErrorCode breakpointHit(uint64_t esId, const iris::IrisValueMap &fields, uint64_t time, uint64_t sInstId, bool syncEc, std::string &error_message_out)
System * getSystemPtr() override
STL list class.
Definition: stl.hh:54
void setVecRegFlat(RegIndex idx, const VecRegContainer &val) override
iris::IrisErrorCode simulationTimeEvent(uint64_t esId, const iris::IrisValueMap &fields, uint64_t time, uint64_t sInstId, bool syncEc, std::string &error_message_out)
bool schedule(PCEvent *e) override
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
void setFloatReg(RegIndex reg_idx, RegVal val) override
void setVecLane(const RegId &reg, const LaneData< LaneSize::EightByte > &val) override
void setProcessPtr(Process *p) override
int64_t Counter
Statistics counter type.
Definition: types.hh:58
Bitfield< 10, 5 > event
BpInfoMap::iterator BpInfoIt
void activate() override
Set the status to Active.
Tick getCurrentInstCount() override
void delBp(BpInfoIt it)
Bitfield< 15 > system
Definition: misc.hh:999
void profileClear() override
ArmISA::Decoder * getDecoderPtr() override
Kernel::Statistics * getKernelStats() override
void initMemProxies(::ThreadContext *tc) override
void profileSample() override
void setVecPredRegFlat(RegIndex idx, const VecPredRegContainer &val) override
void setContextId(int id) override
This object is a proxy for a port or other object which implements the functional response protocol...
Definition: port_proxy.hh:82
Bitfield< 9 > e
const VecPredRegContainer & readVecPredReg(const RegId &reg) const override
MicroPC microPC() const override
void setVecPredReg(const RegId &reg, const VecPredRegContainer &val) override
int contextId() const override
uint16_t ElemIndex
Logical vector register elem index type.
Definition: types.hh:45
Permanently shut down.
std::map< int, std::string > IdxNameMap
Definition: eventq.hh:189
GenericISA::SimplePCState< MachInst > PCState
Definition: types.hh:43
ConstVecLane64 readVec64BitLaneReg(const RegId &reg) const override
Reads source vector 64bit operand.
std::unique_ptr< BpInfo > BpInfoPtr
ResourceIds vecPredRegIds
uint32_t socketId() const
Reads this CPU&#39;s Socket ID.
Definition: base.hh:186
std::vector< ArmISA::VecRegContainer > vecRegs
Generic predicate register container.
Definition: vec_pred_reg.hh:51
ResourceIds flattenedIntIds
Process * getProcessPtr() override
void dumpFuncProfile() override
void setVecReg(const RegId &reg, const VecRegContainer &val) override
::BaseCPU * getCpuPtr() override
void uninstallBp(BpInfoIt it)
Status status() const override
ThreadContext(::BaseCPU *cpu, int id, System *system, ::BaseTLB *dtb, ::BaseTLB *itb, iris::IrisConnectionInterface *iris_if, const std::string &iris_path)
void regStats(const std::string &name) override
Tick readLastSuspend() override
Register ID: describe an architectural register with its class and index.
Definition: reg_class.hh:79
Addr nextInstAddr() const override
void setVecLane(const RegId &reg, const LaneData< LaneSize::FourByte > &val) override
iris::IrisInstance client
Temporarily inactive.
Definition: isa.hh:35
void suspend() override
Set the status to Suspended.
std::list< PCEvent * > events
iris::EventStreamId breakpointEventStreamId
ConstVecLane16 readVec16BitLaneReg(const RegId &reg) const override
Reads source vector 16bit operand.
PortProxy & getVirtProxy() override
iris::IrisErrorCode instanceRegistryChanged(uint64_t esId, const iris::IrisValueMap &fields, uint64_t time, uint64_t sInstId, bool syncEc, std::string &error_message_out)
Vector Lane abstraction Another view of a container.
Definition: vec_reg.hh:262
Counter readFuncExeInst() const override
void extractResourceMap(ResourceIds &ids, const ResourceMap &resources, const IdxNameMap &idx_names)
Bitfield< 0 > p
void copyArchRegs(::ThreadContext *tc) override
RegVal readFloatReg(RegIndex reg_idx) const override
std::shared_ptr< FaultBase > Fault
Definition: types.hh:240
Tick readLastActivate() override
RegId flattenRegId(const RegId &regId) const override
void installBp(BpInfoIt it)
uint32_t socketId() const override
int ContextID
Globally unique thread context ID.
Definition: types.hh:231
void setFloatRegFlat(RegIndex idx, RegVal val) override
void pcStateNoRecord(const ArmISA::PCState &val) override
Definition: cpu.cc:36
void takeOverFrom(::ThreadContext *old_context) override
void scheduleInstCountEvent(Event *event, Tick count) override
bool translateAddress(Addr &paddr, iris::MemorySpaceId p_space, Addr vaddr, iris::MemorySpaceId v_space)

Generated on Fri Feb 28 2020 16:26:56 for gem5 by doxygen 1.8.13