gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
faults.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010, 2012-2013, 2016-2019, 2022 Arm Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Copyright (c) 2003-2005 The Regents of The University of Michigan
15  * Copyright (c) 2007-2008 The Florida State University
16  * All rights reserved.
17  *
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted provided that the following conditions are
20  * met: redistributions of source code must retain the above copyright
21  * notice, this list of conditions and the following disclaimer;
22  * redistributions in binary form must reproduce the above copyright
23  * notice, this list of conditions and the following disclaimer in the
24  * documentation and/or other materials provided with the distribution;
25  * neither the name of the copyright holders nor the names of its
26  * contributors may be used to endorse or promote products derived from
27  * this software without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  */
41 
42 #ifndef __ARM_FAULTS_HH__
43 #define __ARM_FAULTS_HH__
44 
45 #include "arch/arm/pagetable.hh"
46 #include "arch/arm/regs/misc.hh"
47 #include "arch/arm/types.hh"
48 #include "base/logging.hh"
49 #include "cpu/null_static_inst.hh"
50 #include "sim/faults.hh"
51 #include "sim/full_system.hh"
52 
53 namespace gem5
54 {
55 
56 // The design of the "name" and "vect" functions is in sim/faults.hh
57 
58 namespace ArmISA
59 {
60 typedef Addr FaultOffset;
61 
62 class ArmStaticInst;
63 
64 class ArmFault : public FaultBase
65 {
66  protected:
68  uint32_t issRaw;
69 
70  // Helper variables for ARMv8 exception handling
71  bool bStep; // True if the Arm Faul exception is a software Step exception
72  bool from64; // True if the exception is generated from the AArch64 state
73  bool to64; // True if the exception is taken in AArch64 state
74  ExceptionLevel fromEL; // Source exception level
75  ExceptionLevel toEL; // Target exception level
76  OperatingMode fromMode; // Source operating mode (aarch32)
77  OperatingMode toMode; // Next operating mode (aarch32)
78 
79  // This variable is true if the above fault specific informations
80  // have been updated. This is to prevent that a client is using their
81  // un-updated default constructed value.
83 
84  bool hypRouted; // True if the fault has been routed to Hypervisor
85  bool span; // True if the fault is setting the PSTATE.PAN bit
86 
87  virtual Addr getVector(ThreadContext *tc);
89 
90  public:
96  {
98  InstructionCacheMaintenance, // Short-desc. format only
107  TLBConflictAbort, // Requires LPAE
111  AddressSizeLL, // AArch64 only
112 
113  // Not real faults. These are faults to allow the translation function
114  // to inform the memory access function not to proceed for a prefetch
115  // that misses in the TLB or that targets an uncacheable address
118 
121  };
122 
131 
133  {
134  S1PTW, // DataAbort, PrefetchAbort: Stage 1 Page Table Walk,
135  OVA, // DataAbort, PrefetchAbort: stage 1 Virtual Address for stage 2 faults
136  SAS, // DataAbort: Syndrome Access Size
137  SSE, // DataAbort: Syndrome Sign Extend
138  SRT, // DataAbort: Syndrome Register Transfer
139  CM, // DataAbort: Cache Maintenance/Address Translation Op
140  OFA, // DataAbort: Override fault Address. This is needed when
141  // the abort is triggered by a CMO. The faulting address is
142  // then the address specified in the register argument of the
143  // instruction and not the cacheline address (See FAR doc)
144 
145  // AArch64 only
146  SF, // DataAbort: width of the accessed register is SixtyFour
147  AR // DataAbort: Acquire/Release semantics
148  };
149 
151  {
155  };
156 
158  {
159  NODEBUG = 0,
164  };
165 
166  struct FaultVals
167  {
169 
171 
172  // Offsets used for exceptions taken in AArch64 state
173  const uint16_t currELTOffset;
174  const uint16_t currELHOffset;
175  const uint16_t lowerEL64Offset;
176  const uint16_t lowerEL32Offset;
177 
179 
180  const uint8_t armPcOffset;
181  const uint8_t thumbPcOffset;
182  // The following two values are used in place of armPcOffset and
183  // thumbPcOffset when the exception return address is saved into ELR
184  // registers (exceptions taken in HYP mode or in AArch64 state)
185  const uint8_t armPcElrOffset;
186  const uint8_t thumbPcElrOffset;
187 
188  const bool hypTrappable;
189  const bool abortDisable;
190  const bool fiqDisable;
191 
192  // Exception class used to appropriately set the syndrome register
193  // (exceptions taken in HYP mode or in AArch64 state)
195 
196  FaultVals(const FaultName& name_, FaultOffset offset_,
197  uint16_t curr_elt_offset, uint16_t curr_elh_offset,
198  uint16_t lower_el64_offset,
199  uint16_t lower_el32_offset,
200  OperatingMode next_mode, uint8_t arm_pc_offset,
201  uint8_t thumb_pc_offset, uint8_t arm_pc_elr_offset,
202  uint8_t thumb_pc_elr_offset, bool hyp_trappable,
203  bool abort_disable, bool fiq_disable,
204  ExceptionClass ec_)
205  : name(name_), offset(offset_), currELTOffset(curr_elt_offset),
206  currELHOffset(curr_elh_offset), lowerEL64Offset(lower_el64_offset),
207  lowerEL32Offset(lower_el32_offset), nextMode(next_mode),
208  armPcOffset(arm_pc_offset), thumbPcOffset(thumb_pc_offset),
209  armPcElrOffset(arm_pc_elr_offset),
210  thumbPcElrOffset(thumb_pc_elr_offset),
211  hypTrappable(hyp_trappable), abortDisable(abort_disable),
212  fiqDisable(fiq_disable), ec(ec_) {}
213  };
214 
215  ArmFault(ExtMachInst mach_inst = 0, uint32_t _iss = 0) :
216  machInst(mach_inst), issRaw(_iss), bStep(false), from64(false),
218  faultUpdated(false), hypRouted(false), span(false) {}
219 
220  // Returns the actual syndrome register to use based on the target
221  // exception level
223  // Returns the actual fault address register to use based on the target
224  // exception level
226 
227  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
228  nullStaticInstPtr) override;
229  void invoke32(ThreadContext *tc, const StaticInstPtr &inst =
231  void invoke64(ThreadContext *tc, const StaticInstPtr &inst =
233  void update(ThreadContext *tc);
234  bool isResetSPSR(){ return bStep; }
235 
236  bool vectorCatch(ThreadContext *tc, const StaticInstPtr &inst);
237 
239  virtual void annotate(AnnotationIDs id, uint64_t val) {}
240  virtual FaultOffset offset(ThreadContext *tc) = 0;
241  virtual FaultOffset offset64(ThreadContext *tc) = 0;
242  virtual OperatingMode nextMode() = 0;
243  virtual bool routeToMonitor(ThreadContext *tc) const = 0;
244  virtual bool routeToHyp(ThreadContext *tc) const { return false; }
245  virtual uint8_t armPcOffset(bool is_hyp) = 0;
246  virtual uint8_t thumbPcOffset(bool is_hyp) = 0;
247  virtual uint8_t armPcElrOffset() = 0;
248  virtual uint8_t thumbPcElrOffset() = 0;
249  virtual bool abortDisable(ThreadContext *tc) = 0;
250  virtual bool fiqDisable(ThreadContext *tc) = 0;
251  virtual ExceptionClass ec(ThreadContext *tc) const = 0;
252  virtual bool il(ThreadContext *tc) const = 0;
253  virtual uint32_t iss() const = 0;
254  virtual uint32_t vectorCatchFlag() const { return 0x0; }
255  virtual bool isStage2() const { return false; }
256  virtual FSR getFsr(ThreadContext *tc) const { return 0; }
257  virtual void setSyndrome(ThreadContext *tc, MiscRegIndex syndrome_reg);
258  virtual bool getFaultVAddr(Addr &va) const { return false; }
259  OperatingMode getToMode() const { return toMode; }
260 };
261 
262 template<typename T>
263 class ArmFaultVals : public ArmFault
264 {
265  protected:
266  static FaultVals vals;
267 
268  public:
269  ArmFaultVals<T>(ExtMachInst mach_inst = 0, uint32_t _iss = 0) :
270  ArmFault(mach_inst, _iss) {}
271  FaultName name() const override { return vals.name; }
272  FaultOffset offset(ThreadContext *tc) override;
273 
274  FaultOffset offset64(ThreadContext *tc) override;
275 
276  OperatingMode nextMode() override { return vals.nextMode; }
277 
278  virtual bool
279  routeToMonitor(ThreadContext *tc) const override
280  {
281  return false;
282  }
283 
284  uint8_t
285  armPcOffset(bool is_hyp) override
286  {
287  return is_hyp ? vals.armPcElrOffset
288  : vals.armPcOffset;
289  }
290 
291  uint8_t
292  thumbPcOffset(bool is_hyp) override
293  {
294  return is_hyp ? vals.thumbPcElrOffset
296  }
297 
298  uint8_t armPcElrOffset() override { return vals.armPcElrOffset; }
299  uint8_t thumbPcElrOffset() override { return vals.thumbPcElrOffset; }
300  bool abortDisable(ThreadContext* tc) override { return vals.abortDisable; }
301  bool fiqDisable(ThreadContext* tc) override { return vals.fiqDisable; }
302 
304  ExceptionClass ec(ThreadContext *tc) const override { return vals.ec; }
305  bool
306  il(ThreadContext *tc) const override
307  {
308  // ESR.IL = 1 if exception cause is unknown (EC = 0)
309  return ec(tc) == ExceptionClass::UNKNOWN ||
310  !machInst.thumb || machInst.bigThumb;
311  }
312  uint32_t iss() const override { return issRaw; }
313 };
314 
315 class Reset : public ArmFaultVals<Reset>
316 {
317  protected:
318  Addr getVector(ThreadContext *tc) override;
319 
320  public:
321  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
322  nullStaticInstPtr) override;
323 };
324 
325 class UndefinedInstruction : public ArmFaultVals<UndefinedInstruction>
326 {
327  protected:
328  bool unknown;
329  bool disabled;
331  const char *mnemonic;
332 
333  public:
335  bool _unknown,
336  const char *_mnemonic = NULL,
337  bool _disabled = false) :
339  unknown(_unknown), disabled(_disabled),
341  {}
342  UndefinedInstruction(ExtMachInst mach_inst, uint32_t _iss,
343  ExceptionClass _overrideEc, const char *_mnemonic = NULL) :
344  ArmFaultVals<UndefinedInstruction>(mach_inst, _iss),
345  unknown(false), disabled(true), overrideEc(_overrideEc),
346  mnemonic(_mnemonic)
347  {}
348 
349  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
350  nullStaticInstPtr) override;
351  bool routeToHyp(ThreadContext *tc) const override;
352  uint32_t vectorCatchFlag() const override { return 0x02000002; }
353 
355  ExceptionClass ec(ThreadContext *tc) const override;
356  uint32_t iss() const override;
357 };
358 
359 class SupervisorCall : public ArmFaultVals<SupervisorCall>
360 {
361  protected:
363  public:
364  SupervisorCall(ExtMachInst mach_inst, uint32_t _iss,
365  ExceptionClass _overrideEc = ExceptionClass::INVALID) :
366  ArmFaultVals<SupervisorCall>(mach_inst, _iss),
367  overrideEc(_overrideEc)
368  {
369  bStep = true;
370  }
371 
372  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
373  nullStaticInstPtr) override;
374  bool routeToHyp(ThreadContext *tc) const override;
375  uint32_t vectorCatchFlag() const override { return 0x04000404; }
376 
378  ExceptionClass ec(ThreadContext *tc) const override;
379  uint32_t iss() const override;
380 };
381 
382 class SecureMonitorCall : public ArmFaultVals<SecureMonitorCall>
383 {
384  public:
386  ArmFaultVals<SecureMonitorCall>(mach_inst)
387  {
388  bStep = true;
389  }
390 
391  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
392  nullStaticInstPtr) override;
393  uint32_t vectorCatchFlag() const override { return 0x00000400; }
394 
396  ExceptionClass ec(ThreadContext *tc) const override;
397  uint32_t iss() const override;
398 };
399 
400 class SupervisorTrap : public ArmFaultVals<SupervisorTrap>
401 {
402  protected:
405 
406  public:
407  SupervisorTrap(ExtMachInst mach_inst, uint32_t _iss,
408  ExceptionClass _overrideEc = ExceptionClass::INVALID) :
409  ArmFaultVals<SupervisorTrap>(mach_inst, _iss),
410  overrideEc(_overrideEc)
411  {}
412 
413  bool routeToHyp(ThreadContext *tc) const override;
414 
416  ExceptionClass ec(ThreadContext *tc) const override;
417  uint32_t iss() const override;
418 };
419 
420 class SecureMonitorTrap : public ArmFaultVals<SecureMonitorTrap>
421 {
422  protected:
425 
426  public:
427  SecureMonitorTrap(ExtMachInst mach_inst, uint32_t _iss,
428  ExceptionClass _overrideEc = ExceptionClass::INVALID) :
429  ArmFaultVals<SecureMonitorTrap>(mach_inst, _iss),
430  overrideEc(_overrideEc)
431  {}
432 
434  ExceptionClass ec(ThreadContext *tc) const override;
435 };
436 
437 class HypervisorCall : public ArmFaultVals<HypervisorCall>
438 {
439  public:
440  HypervisorCall(ExtMachInst mach_inst, uint32_t _imm);
441 
442  bool routeToHyp(ThreadContext *tc) const override;
443  bool routeToMonitor(ThreadContext *tc) const override;
444  uint32_t vectorCatchFlag() const override { return 0xFFFFFFFF; }
445 
447  ExceptionClass ec(ThreadContext *tc) const override;
448 };
449 
450 class HypervisorTrap : public ArmFaultVals<HypervisorTrap>
451 {
452  protected:
455 
456  public:
457  HypervisorTrap(ExtMachInst mach_inst, uint32_t _iss,
458  ExceptionClass _overrideEc = ExceptionClass::INVALID) :
459  ArmFaultVals<HypervisorTrap>(mach_inst, _iss),
460  overrideEc(_overrideEc)
461  {}
462 
464  ExceptionClass ec(ThreadContext *tc) const override;
465 };
466 
467 template <class T>
468 class AbortFault : public ArmFaultVals<T>
469 {
470  protected:
484  bool write;
486  uint8_t source;
487  uint8_t srcEncoded;
488  bool stage2;
489  bool s1ptw;
492 
493  public:
494  AbortFault(Addr _faultAddr, bool _write, TlbEntry::DomainType _domain,
495  uint8_t _source, bool _stage2,
498  faultAddr(_faultAddr), OVAddr(0), write(_write),
499  domain(_domain), source(_source), srcEncoded(0),
500  stage2(_stage2), s1ptw(false), tranMethod(_tranMethod),
501  debugType(_debug)
502  {}
503 
504  bool getFaultVAddr(Addr &va) const override;
505 
506  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
507  nullStaticInstPtr) override;
508 
509  FSR getFsr(ThreadContext *tc) const override;
510  uint8_t getFaultStatusCode(ThreadContext *tc) const;
511  bool abortDisable(ThreadContext *tc) override;
512  bool isStage2() const override { return stage2; }
513  void annotate(ArmFault::AnnotationIDs id, uint64_t val) override;
514  void setSyndrome(ThreadContext *tc, MiscRegIndex syndrome_reg) override;
515  bool isMMUFault() const;
516 };
517 
518 class PrefetchAbort : public AbortFault<PrefetchAbort>
519 {
520  public:
524 
525  PrefetchAbort(Addr _addr, uint8_t _source, bool _stage2 = false,
528  AbortFault<PrefetchAbort>(_addr, false, TlbEntry::DomainType::NoAccess,
529  _source, _stage2, _tranMethod, _debug)
530  {}
531 
532  // @todo: external aborts should be routed if SCR.EA == 1
533  bool routeToMonitor(ThreadContext *tc) const override;
534  bool routeToHyp(ThreadContext *tc) const override;
535  uint32_t vectorCatchFlag() const override { return 0x08000808; }
536 
538  ExceptionClass ec(ThreadContext *tc) const override;
539  bool il(ThreadContext *tc) const override { return true; }
540  uint32_t iss() const override;
541 };
542 
543 class DataAbort : public AbortFault<DataAbort>
544 {
545  public:
549  bool isv;
550  uint8_t sas;
551  uint8_t sse;
552  uint8_t srt;
553  uint8_t cm;
554 
555  // AArch64 only
556  bool sf;
557  bool ar;
558 
559  DataAbort(Addr _addr, TlbEntry::DomainType _domain, bool _write, uint8_t _source,
560  bool _stage2=false,
563  AbortFault<DataAbort>(_addr, _write, _domain, _source, _stage2,
564  _tranMethod, _debug_type),
565  isv(false), sas (0), sse(0), srt(0), cm(0), sf(false), ar(false)
566  {}
567 
568  // @todo: external aborts should be routed if SCR.EA == 1
569  bool routeToMonitor(ThreadContext *tc) const override;
570  bool routeToHyp(ThreadContext *tc) const override;
571  void annotate(AnnotationIDs id, uint64_t val) override;
572  uint32_t vectorCatchFlag() const override { return 0x10001010; }
573 
575  ExceptionClass ec(ThreadContext *tc) const override;
576  bool il(ThreadContext *tc) const override;
577  uint32_t iss() const override;
578 };
579 
580 class VirtualDataAbort : public AbortFault<VirtualDataAbort>
581 {
582  public:
586 
587  VirtualDataAbort(Addr _addr, TlbEntry::DomainType _domain, bool _write,
588  uint8_t _source) :
589  AbortFault<VirtualDataAbort>(_addr, _write, _domain, _source, false)
590  {}
591 
592  void invoke(ThreadContext *tc, const StaticInstPtr &inst) override;
593 };
594 
595 class Interrupt : public ArmFaultVals<Interrupt>
596 {
597  public:
598  bool routeToMonitor(ThreadContext *tc) const override;
599  bool routeToHyp(ThreadContext *tc) const override;
600  bool abortDisable(ThreadContext *tc) override;
601  uint32_t vectorCatchFlag() const override { return 0x40004040; }
602 };
603 
604 class VirtualInterrupt : public ArmFaultVals<VirtualInterrupt>
605 {
606  public:
608 };
609 
610 class FastInterrupt : public ArmFaultVals<FastInterrupt>
611 {
612  public:
613  bool routeToMonitor(ThreadContext *tc) const override;
614  bool routeToHyp(ThreadContext *tc) const override;
615  bool abortDisable(ThreadContext *tc) override;
616  bool fiqDisable(ThreadContext *tc) override;
617  uint32_t vectorCatchFlag() const override { return 0x80008080; }
618 };
619 
620 class VirtualFastInterrupt : public ArmFaultVals<VirtualFastInterrupt>
621 {
622  public:
624 };
625 
627 class PCAlignmentFault : public ArmFaultVals<PCAlignmentFault>
628 {
629  protected:
632  public:
633  PCAlignmentFault(Addr fault_pc) : faultPC(fault_pc)
634  {}
635  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
636  nullStaticInstPtr) override;
637  bool routeToHyp(ThreadContext *tc) const override;
638 
640  bool il(ThreadContext *tc) const override { return true; }
641 };
642 
644 class SPAlignmentFault : public ArmFaultVals<SPAlignmentFault>
645 {
646  public:
648  bool routeToHyp(ThreadContext *tc) const override;
649 
651  bool il(ThreadContext *tc) const override { return true; }
652 };
653 
655 class SystemError : public ArmFaultVals<SystemError>
656 {
657  public:
658  SystemError();
659  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
660  nullStaticInstPtr) override;
661  bool routeToMonitor(ThreadContext *tc) const override;
662  bool routeToHyp(ThreadContext *tc) const override;
663 
665  bool il(ThreadContext *tc) const override { return true; }
666 };
667 
669 class SoftwareBreakpoint : public ArmFaultVals<SoftwareBreakpoint>
670 {
671  public:
672  SoftwareBreakpoint(ExtMachInst mach_inst, uint32_t _iss);
673  bool routeToHyp(ThreadContext *tc) const override;
674 
676  ExceptionClass ec(ThreadContext *tc) const override;
677 };
678 
679 class HardwareBreakpoint : public ArmFaultVals<HardwareBreakpoint>
680 {
681  private:
683  public:
684  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
685  nullStaticInstPtr) override;
686  HardwareBreakpoint(Addr _vaddr, uint32_t _iss);
687  bool routeToHyp(ThreadContext *tc) const override;
688 
690  ExceptionClass ec(ThreadContext *tc) const override;
691  bool il(ThreadContext *tc) const override { return true; }
692 };
693 
694 class Watchpoint : public ArmFaultVals<Watchpoint>
695 {
696  private:
698  bool write;
699  bool cm;
700 
701  public:
702  Watchpoint(ExtMachInst mach_inst, Addr vaddr, bool _write, bool _cm);
703  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
704  nullStaticInstPtr) override;
705  bool routeToHyp(ThreadContext *tc) const override;
706  void annotate(AnnotationIDs id, uint64_t val) override;
707 
709  ExceptionClass ec(ThreadContext *tc) const override;
710  bool il(ThreadContext *tc) const override { return true; }
711  uint32_t iss() const override;
712 };
713 
714 class SoftwareStepFault : public ArmFaultVals<SoftwareStepFault>
715 {
716  private:
717  bool isldx;
718  bool stepped;
719 
720  public:
721  SoftwareStepFault(ExtMachInst mach_inst, bool is_ldx, bool stepped);
722  bool routeToHyp(ThreadContext *tc) const override;
723 
725  ExceptionClass ec(ThreadContext *tc) const override;
726  bool il(ThreadContext *tc) const override { return true; }
727  uint32_t iss() const override;
728 };
729 
730 // A fault that flushes the pipe, excluding the faulting instructions
731 class ArmSev : public ArmFaultVals<ArmSev>
732 {
733  public:
734  ArmSev() {}
735  void invoke(ThreadContext *tc, const StaticInstPtr &inst =
736  nullStaticInstPtr) override;
737 };
738 
740 class IllegalInstSetStateFault : public ArmFaultVals<IllegalInstSetStateFault>
741 {
742  public:
744  bool routeToHyp(ThreadContext *tc) const override;
745 
747  bool il(ThreadContext *tc) const override { return true; }
748 };
749 
750 /*
751  * Explicitly declare template static member variables to avoid warnings
752  * in some clang versions
753  */
778 
789 bool getFaultVAddr(Fault fault, Addr &va);
790 
791 } // namespace ArmISA
792 } // namespace gem5
793 
794 #endif // __ARM_FAULTS_HH__
gem5::ArmISA::ArmFault::FaultVals::thumbPcElrOffset
const uint8_t thumbPcElrOffset
Definition: faults.hh:186
gem5::ArmISA::MISCREG_DFAR
@ MISCREG_DFAR
Definition: misc.hh:288
gem5::ArmISA::ArmFault::NODEBUG
@ NODEBUG
Definition: faults.hh:159
gem5::ArmISA::ArmFault::fromEL
ExceptionLevel fromEL
Definition: faults.hh:74
gem5::ArmISA::AbortFault::annotate
void annotate(ArmFault::AnnotationIDs id, uint64_t val) override
Definition: faults.cc:1206
gem5::ArmISA::AbortFault::setSyndrome
void setSyndrome(ThreadContext *tc, MiscRegIndex syndrome_reg) override
Definition: faults.cc:1133
gem5::ArmISA::ArmFault::FaultVals::ec
const ExceptionClass ec
Definition: faults.hh:194
gem5::ArmISA::ArmFault::NumFaultSources
@ NumFaultSources
Definition: faults.hh:119
gem5::ArmISA::SupervisorTrap::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:1034
gem5::ArmISA::UndefinedInstruction::mnemonic
const char * mnemonic
Definition: faults.hh:331
gem5::ArmISA::SPAlignmentFault::SPAlignmentFault
SPAlignmentFault()
Definition: faults.cc:1534
gem5::ArmISA::DataAbort::routeToMonitor
bool routeToMonitor(ThreadContext *tc) const override
Definition: faults.cc:1343
gem5::ArmISA::UndefinedInstruction::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:898
gem5::ArmISA::ArmFaultVals::thumbPcElrOffset
uint8_t thumbPcElrOffset() override
Definition: faults.hh:299
gem5::ArmISA::SoftwareBreakpoint::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1581
gem5::ArmISA::ArmFault::FaultVals::lowerEL32Offset
const uint16_t lowerEL32Offset
Definition: faults.hh:176
gem5::ArmISA::ArmFault::AddressSizeLL
@ AddressSizeLL
Definition: faults.hh:111
gem5::ArmISA::DataAbort::sf
bool sf
Definition: faults.hh:556
gem5::ArmISA::PrefetchAbort::FsrIndex
static const MiscRegIndex FsrIndex
Definition: faults.hh:521
gem5::ArmISA::ArmFault::bStep
bool bStep
Definition: faults.hh:71
gem5::ArmISA::AbortFault::AbortFault
AbortFault(Addr _faultAddr, bool _write, TlbEntry::DomainType _domain, uint8_t _source, bool _stage2, ArmFault::TranMethod _tranMethod=ArmFault::UnknownTran, ArmFault::DebugType _debug=ArmFault::NODEBUG)
Definition: faults.hh:494
gem5::ArmISA::ArmFault::FaultSourceInvalid
@ FaultSourceInvalid
Definition: faults.hh:120
gem5::ArmISA::PCAlignmentFault::faultPC
Addr faultPC
The unaligned value of the PC.
Definition: faults.hh:631
gem5::ArmISA::ArmFault::abortDisable
virtual bool abortDisable(ThreadContext *tc)=0
gem5::ArmISA::VirtualDataAbort
Definition: faults.hh:580
gem5::ArmISA::ArmStaticInst
Definition: static_inst.hh:65
gem5::ArmISA::ArmFault::BRKPOINT
@ BRKPOINT
Definition: faults.hh:160
gem5::ArmISA::IllegalInstSetStateFault::il
bool il(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.hh:747
gem5::ArmISA::HypervisorCall
Definition: faults.hh:437
gem5::ArmISA::PrefetchAbort::vectorCatchFlag
uint32_t vectorCatchFlag() const override
Definition: faults.hh:535
gem5::ArmISA::ArmFault::issRaw
uint32_t issRaw
Definition: faults.hh:68
gem5::ArmISA::ArmFaultVals::il
bool il(ThreadContext *tc) const override
Definition: faults.hh:306
gem5::ArmISA::ArmFault::AR
@ AR
Definition: faults.hh:147
gem5::ArmISA::SystemError::SystemError
SystemError()
Definition: faults.cc:1545
gem5::ArmISA::HypervisorTrap::overrideEc
ExceptionClass overrideEc
Definition: faults.hh:454
gem5::ArmISA::ArmFaultVals::vals
static FaultVals vals
Definition: faults.hh:266
gem5::ArmISA::SecureMonitorCall::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:1011
gem5::ArmISA::ArmFault::from64
bool from64
Definition: faults.hh:72
gem5::ArmISA::HypervisorCall::vectorCatchFlag
uint32_t vectorCatchFlag() const override
Definition: faults.hh:444
gem5::ArmISA::MODE_UNDEFINED
@ MODE_UNDEFINED
Definition: types.hh:295
gem5::ArmISA::HardwareBreakpoint::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1601
gem5::ArmISA::ArmFault::SynchExtAbtOnTranslTableWalkLL
@ SynchExtAbtOnTranslTableWalkLL
Definition: faults.hh:99
gem5::ArmISA::ArmFault::PrefetchUncacheable
@ PrefetchUncacheable
Definition: faults.hh:117
gem5::ArmISA::UndefinedInstruction::UndefinedInstruction
UndefinedInstruction(ExtMachInst mach_inst, bool _unknown, const char *_mnemonic=NULL, bool _disabled=false)
Definition: faults.hh:334
gem5::ArmISA::ArmFault::VECTORCATCH
@ VECTORCATCH
Definition: faults.hh:161
gem5::ArmISA::Interrupt::vectorCatchFlag
uint32_t vectorCatchFlag() const override
Definition: faults.hh:601
gem5::ArmISA::SupervisorCall::vectorCatchFlag
uint32_t vectorCatchFlag() const override
Definition: faults.hh:375
gem5::ArmISA::SupervisorCall
Definition: faults.hh:359
gem5::ArmISA::HypervisorTrap
Definition: faults.hh:450
gem5::ArmISA::PrefetchAbort::HFarIndex
static const MiscRegIndex HFarIndex
Definition: faults.hh:523
gem5::ArmISA::HypervisorTrap::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:934
gem5::ArmISA::UndefinedInstruction
Definition: faults.hh:325
gem5::ArmISA::UndefinedInstruction::overrideEc
ExceptionClass overrideEc
Definition: faults.hh:330
pagetable.hh
gem5::ArmISA::UndefinedInstruction::disabled
bool disabled
Definition: faults.hh:329
gem5::ArmISA::ArmFault::SynchronousExternalAbort
@ SynchronousExternalAbort
Definition: faults.hh:106
gem5::ArmISA::ArmFault::LpaeTran
@ LpaeTran
Definition: faults.hh:152
gem5::ArmISA::ArmFaultVals::abortDisable
bool abortDisable(ThreadContext *tc) override
Definition: faults.hh:300
gem5::ArmISA::ArmFault::faultUpdated
bool faultUpdated
Definition: faults.hh:82
gem5::ArmISA::ArmFault::PrefetchTLBMiss
@ PrefetchTLBMiss
Definition: faults.hh:116
gem5::ArmISA::ArmFault::SSE
@ SSE
Definition: faults.hh:137
gem5::ArmISA::UndefinedInstruction::unknown
bool unknown
Definition: faults.hh:328
gem5::ArmISA::DataAbort::iss
uint32_t iss() const override
Definition: faults.cc:1374
gem5::ArmISA::FastInterrupt::vectorCatchFlag
uint32_t vectorCatchFlag() const override
Definition: faults.hh:617
gem5::ArmISA::PCAlignmentFault::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1528
gem5::ArmISA::ArmFault::ArmFault
ArmFault(ExtMachInst mach_inst=0, uint32_t _iss=0)
Definition: faults.hh:215
gem5::ArmISA::HypervisorCall::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:922
gem5::X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:776
gem5::ArmISA::ExceptionClass::INVALID
@ INVALID
gem5::ArmISA::ArmFault::armPcElrOffset
virtual uint8_t armPcElrOffset()=0
gem5::ArmISA::HardwareBreakpoint::il
bool il(ThreadContext *tc) const override
Definition: faults.hh:691
gem5::ArmISA::Watchpoint::vAddr
Addr vAddr
Definition: faults.hh:697
gem5::ArmISA::AbortFault::getFaultStatusCode
uint8_t getFaultStatusCode(ThreadContext *tc) const
Definition: faults.cc:1144
gem5::ArmISA::PrefetchAbort::routeToMonitor
bool routeToMonitor(ThreadContext *tc) const override
Definition: faults.cc:1286
gem5::ArmISA::ArmSev
Definition: faults.hh:731
gem5::ArmISA::PCAlignmentFault
PC alignment fault (AArch64 only)
Definition: faults.hh:627
gem5::ArmISA::MISCREG_HIFAR
@ MISCREG_HIFAR
Definition: misc.hh:295
gem5::ArmISA::ArmFault::DomainLL
@ DomainLL
Definition: faults.hh:103
gem5::ArmISA::Interrupt::routeToMonitor
bool routeToMonitor(ThreadContext *tc) const override
Definition: faults.cc:1449
gem5::ArmISA::ArmFault::SynchPtyErrOnMemoryAccess
@ SynchPtyErrOnMemoryAccess
Definition: faults.hh:108
gem5::ArmISA::ArmFault::offset64
virtual FaultOffset offset64(ThreadContext *tc)=0
gem5::ArmISA::ArmFault::DebugEvent
@ DebugEvent
Definition: faults.hh:105
gem5::ArmISA::Watchpoint::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1673
gem5::ArmISA::AbortFault::debugType
ArmFault::DebugType debugType
Definition: faults.hh:491
gem5::ArmISA::HypervisorTrap::HypervisorTrap
HypervisorTrap(ExtMachInst mach_inst, uint32_t _iss, ExceptionClass _overrideEc=ExceptionClass::INVALID)
Definition: faults.hh:457
gem5::ArmISA::ArmFault::FaultVals
Definition: faults.hh:166
gem5::ArmISA::Watchpoint
Definition: faults.hh:694
gem5::ArmISA::ArmFault::FaultVals::hypTrappable
const bool hypTrappable
Definition: faults.hh:188
gem5::ArmISA::PrefetchAbort::FarIndex
static const MiscRegIndex FarIndex
Definition: faults.hh:522
gem5::ArmISA::ArmFault::getToMode
OperatingMode getToMode() const
Definition: faults.hh:259
gem5::ArmISA::SupervisorTrap::iss
uint32_t iss() const override
Definition: faults.cc:1024
gem5::ArmISA::UndefinedInstruction::vectorCatchFlag
uint32_t vectorCatchFlag() const override
Definition: faults.hh:352
gem5::ArmISA::HardwareBreakpoint::vAddr
Addr vAddr
Definition: faults.hh:682
gem5::ArmISA::ArmFault::thumbPcOffset
virtual uint8_t thumbPcOffset(bool is_hyp)=0
gem5::ArmISA::VirtualDataAbort::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst) override
Definition: faults.cc:1440
gem5::ArmISA::SoftwareStepFault::isldx
bool isldx
Definition: faults.hh:717
gem5::ArmISA::ArmFault::setSyndrome
virtual void setSyndrome(ThreadContext *tc, MiscRegIndex syndrome_reg)
Definition: faults.cc:398
gem5::ArmISA::ArmFault::to64
bool to64
Definition: faults.hh:73
gem5::ArmISA::getFaultVAddr
bool getFaultVAddr(Fault fault, Addr &va)
Returns true if the fault passed as a first argument was triggered by a memory access,...
Definition: faults.cc:1800
faults.hh
types.hh
gem5::ArmISA::ArmFault::FaultVals::currELTOffset
const uint16_t currELTOffset
Definition: faults.hh:173
gem5::ArmISA::ArmFault::FaultVals::thumbPcOffset
const uint8_t thumbPcOffset
Definition: faults.hh:181
gem5::ArmISA::SoftwareBreakpoint::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:1591
gem5::ArmISA::ArmFaultVals::thumbPcOffset
uint8_t thumbPcOffset(bool is_hyp) override
Definition: faults.hh:292
gem5::ArmISA::SystemError::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1565
gem5::ArmISA::ArmFault::getVector64
Addr getVector64(ThreadContext *tc)
Definition: faults.cc:343
gem5::ArmISA::SystemError::routeToMonitor
bool routeToMonitor(ThreadContext *tc) const override
Definition: faults.cc:1556
gem5::ArmISA::TlbEntry
Definition: pagetable.hh:165
gem5::ArmISA::ArmFault::PermissionLL
@ PermissionLL
Definition: faults.hh:104
gem5::ArmISA::TlbEntry::DomainType
DomainType
Definition: pagetable.hh:177
gem5::ArmISA::SecureMonitorTrap
Definition: faults.hh:420
gem5::ArmISA::ArmSev::ArmSev
ArmSev()
Definition: faults.hh:734
gem5::ArmISA::ArmFault::AsynchronousExternalAbort
@ AsynchronousExternalAbort
Definition: faults.hh:109
gem5::ArmISA::PCAlignmentFault::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:1519
gem5::RefCountingPtr< StaticInst >
gem5::ArmISA::SupervisorCall::SupervisorCall
SupervisorCall(ExtMachInst mach_inst, uint32_t _iss, ExceptionClass _overrideEc=ExceptionClass::INVALID)
Definition: faults.hh:364
gem5::ArmISA::ArmFault::VmsaTran
@ VmsaTran
Definition: faults.hh:153
gem5::ArmISA::DataAbort
Definition: faults.hh:543
gem5::ArmISA::AbortFault::getFsr
FSR getFsr(ThreadContext *tc) const override
Definition: faults.cc:1170
gem5::ArmISA::PrefetchAbort::il
bool il(ThreadContext *tc) const override
Definition: faults.hh:539
gem5::ArmISA::SupervisorCall::iss
uint32_t iss() const override
Definition: faults.cc:882
gem5::ArmISA::MISCREG_IFSR
@ MISCREG_IFSR
Definition: misc.hh:276
gem5::ArmISA::ArmFaultVals::nextMode
OperatingMode nextMode() override
Definition: faults.hh:276
gem5::ArmISA::ArmFault::OFA
@ OFA
Definition: faults.hh:140
gem5::ArmISA::ArmFault::iss
virtual uint32_t iss() const =0
gem5::ArmISA::FastInterrupt::abortDisable
bool abortDisable(ThreadContext *tc) override
Definition: faults.cc:1494
gem5::ArmISA::Watchpoint::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:1664
gem5::ArmISA::ArmFault::instrAnnotate
ArmStaticInst * instrAnnotate(const StaticInstPtr &inst)
Definition: faults.cc:730
gem5::ArmISA::DataAbort::FarIndex
static const MiscRegIndex FarIndex
Definition: faults.hh:547
gem5::nullStaticInstPtr
const StaticInstPtr nullStaticInstPtr
Statically allocated null StaticInstPtr.
Definition: null_static_inst.cc:36
gem5::ArmISA::ArmFault::thumbPcElrOffset
virtual uint8_t thumbPcElrOffset()=0
gem5::ArmISA::ArmFaultVals
Definition: faults.hh:263
gem5::ArmISA::SystemError::il
bool il(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.hh:665
gem5::ArmISA::PCAlignmentFault::il
bool il(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.hh:640
gem5::ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
gem5::ArmISA::ArmFault::offset
virtual FaultOffset offset(ThreadContext *tc)=0
gem5::ArmISA::Reset
Definition: faults.hh:315
gem5::ArmISA::SoftwareStepFault
Definition: faults.hh:714
gem5::ArmISA::HardwareBreakpoint
Definition: faults.hh:679
gem5::Fault
std::shared_ptr< FaultBase > Fault
Definition: types.hh:248
gem5::ArmISA::ArmFault::FaultSource
FaultSource
Generic fault source enums used to index into {short/long/aarch64}DescFaultSources[] to get the actua...
Definition: faults.hh:95
gem5::ArmISA::ArmFault::getSyndromeReg64
MiscRegIndex getSyndromeReg64() const
Definition: faults.cc:366
gem5::ArmISA::SecureMonitorCall::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:1002
gem5::ArmISA::AbortFault::domain
TlbEntry::DomainType domain
Definition: faults.hh:485
gem5::ArmISA::DataAbort::DataAbort
DataAbort(Addr _addr, TlbEntry::DomainType _domain, bool _write, uint8_t _source, bool _stage2=false, ArmFault::TranMethod _tranMethod=ArmFault::UnknownTran, ArmFault::DebugType _debug_type=ArmFault::NODEBUG)
Definition: faults.hh:559
gem5::ArmISA::ArmFaultVals::armPcElrOffset
uint8_t armPcElrOffset() override
Definition: faults.hh:298
gem5::ArmISA::ArmFault::toEL
ExceptionLevel toEL
Definition: faults.hh:75
gem5::ArmISA::SecureMonitorCall
Definition: faults.hh:382
gem5::ArmISA::DataAbort::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:1308
gem5::ArmISA::DataAbort::vectorCatchFlag
uint32_t vectorCatchFlag() const override
Definition: faults.hh:572
gem5::ArmISA::SecureMonitorTrap::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:1043
gem5::ArmISA::SecureMonitorTrap::SecureMonitorTrap
SecureMonitorTrap(ExtMachInst mach_inst, uint32_t _iss, ExceptionClass _overrideEc=ExceptionClass::INVALID)
Definition: faults.hh:427
gem5::ArmISA::FastInterrupt::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1486
gem5::ArmISA::ArmFault::hypRouted
bool hypRouted
Definition: faults.hh:84
gem5::ArmISA::SupervisorTrap::machInst
ExtMachInst machInst
Definition: faults.hh:403
gem5::ArmISA::ArmFault::vectorCatchFlag
virtual uint32_t vectorCatchFlag() const
Definition: faults.hh:254
gem5::ArmISA::SupervisorCall::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:848
gem5::ArmISA::ArmFault::SynchPtyErrOnTranslTableWalkLL
@ SynchPtyErrOnTranslTableWalkLL
Definition: faults.hh:100
gem5::ArmISA::ArmFault::shortDescFaultSources
static uint8_t shortDescFaultSources[NumFaultSources]
Encodings of the fault sources when the short-desc.
Definition: faults.hh:125
gem5::ArmISA::DataAbort::sas
uint8_t sas
Definition: faults.hh:550
gem5::ArmISA::ArmFault::FaultVals::name
const FaultName name
Definition: faults.hh:168
gem5::ArmISA::SupervisorTrap
Definition: faults.hh:400
gem5::ArmISA::ArmFault::update
void update(ThreadContext *tc)
Definition: faults.cc:428
gem5::ArmISA::VirtualFastInterrupt
Definition: faults.hh:620
gem5::ArmISA::HypervisorTrap::machInst
ExtMachInst machInst
Definition: faults.hh:453
gem5::ArmISA::ArmFaultVals::offset64
FaultOffset offset64(ThreadContext *tc) override
Definition: faults.cc:961
gem5::ArmISA::PCAlignmentFault::PCAlignmentFault
PCAlignmentFault(Addr fault_pc)
Definition: faults.hh:633
gem5::ArmISA::UndefinedInstruction::UndefinedInstruction
UndefinedInstruction(ExtMachInst mach_inst, uint32_t _iss, ExceptionClass _overrideEc, const char *_mnemonic=NULL)
Definition: faults.hh:342
gem5::ArmISA::ArmFault::getFaultVAddr
virtual bool getFaultVAddr(Addr &va) const
Definition: faults.hh:258
gem5::ArmISA::SoftwareStepFault::il
bool il(ThreadContext *tc) const override
Definition: faults.hh:726
gem5::ArmISA::Watchpoint::cm
bool cm
Definition: faults.hh:699
gem5::ArmISA::ArmFault::armPcOffset
virtual uint8_t armPcOffset(bool is_hyp)=0
gem5::ArmISA::SecureMonitorCall::iss
uint32_t iss() const override
Definition: faults.cc:890
gem5::ArmISA::UndefinedInstruction::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:811
gem5::ArmISA::AbortFault::abortDisable
bool abortDisable(ThreadContext *tc) override
Definition: faults.cc:1195
gem5::ArmISA::UndefinedInstruction::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:788
gem5::ArmISA::ArmFault::FaultVals::offset
const FaultOffset offset
Definition: faults.hh:170
gem5::ArmISA::SupervisorTrap::overrideEc
ExceptionClass overrideEc
Definition: faults.hh:404
gem5::ArmISA::ArmFault::WPOINT_NOCM
@ WPOINT_NOCM
Definition: faults.hh:163
gem5::PowerISA::AlignmentFault
Definition: faults.hh:82
gem5::ArmISA::ArmFault::FaultVals::armPcOffset
const uint8_t armPcOffset
Definition: faults.hh:180
gem5::ArmISA::MISCREG_IFAR
@ MISCREG_IFAR
Definition: misc.hh:291
gem5::ArmISA::DataAbort::srt
uint8_t srt
Definition: faults.hh:552
gem5::ArmISA::ArmFault::FaultVals::lowerEL64Offset
const uint16_t lowerEL64Offset
Definition: faults.hh:175
gem5::ArmISA::VirtualInterrupt::VirtualInterrupt
VirtualInterrupt()
Definition: faults.cc:1474
gem5::ArmISA::DataAbort::annotate
void annotate(AnnotationIDs id, uint64_t val) override
Definition: faults.cc:1402
gem5::ArmISA::ArmFault::SF
@ SF
Definition: faults.hh:146
gem5::ArmISA::Watchpoint::il
bool il(ThreadContext *tc) const override
Definition: faults.hh:710
gem5::ArmISA::DataAbort::il
bool il(ThreadContext *tc) const override
Definition: faults.cc:1337
gem5::ArmISA::ArmFault::nextMode
virtual OperatingMode nextMode()=0
gem5::ArmISA::FastInterrupt::fiqDisable
bool fiqDisable(ThreadContext *tc) override
Definition: faults.cc:1504
gem5::ArmISA::ArmFault::FaultVals::abortDisable
const bool abortDisable
Definition: faults.hh:189
gem5::ArmISA::PrefetchAbort::iss
uint32_t iss() const override
Definition: faults.cc:1274
gem5::ArmISA::DataAbort::cm
uint8_t cm
Definition: faults.hh:553
gem5::ArmISA::MISCREG_HDFAR
@ MISCREG_HDFAR
Definition: misc.hh:294
null_static_inst.hh
gem5::ArmISA::AbortFault::isStage2
bool isStage2() const override
Definition: faults.hh:512
gem5::ArmISA::VirtualDataAbort::HFarIndex
static const MiscRegIndex HFarIndex
Definition: faults.hh:585
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::ArmISA::PrefetchAbort::PrefetchAbort
PrefetchAbort(Addr _addr, uint8_t _source, bool _stage2=false, ArmFault::TranMethod _tranMethod=ArmFault::UnknownTran, ArmFault::DebugType _debug=ArmFault::NODEBUG)
Definition: faults.hh:525
gem5::ArmISA::SoftwareBreakpoint
Software Breakpoint (AArch64 only)
Definition: faults.hh:669
gem5::ArmISA::ArmFaultVals::offset
FaultOffset offset(ThreadContext *tc) override
Definition: faults.cc:941
gem5::ArmISA::ArmFault::AsynchPtyErrOnMemoryAccess
@ AsynchPtyErrOnMemoryAccess
Definition: faults.hh:110
gem5::ArmISA::PrefetchAbort
Definition: faults.hh:518
gem5::ArmISA::SoftwareStepFault::iss
uint32_t iss() const override
Definition: faults.cc:1736
gem5::ArmISA::MISCREG_DFSR
@ MISCREG_DFSR
Definition: misc.hh:273
gem5::ArmISA::HypervisorCall::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:928
gem5::ArmISA::MiscRegIndex
MiscRegIndex
Definition: misc.hh:64
gem5::ArmISA::HardwareBreakpoint::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:1610
gem5::ArmISA::ArmFaultVals::routeToMonitor
virtual bool routeToMonitor(ThreadContext *tc) const override
Definition: faults.hh:279
gem5::ArmISA::DataAbort::FsrIndex
static const MiscRegIndex FsrIndex
Definition: faults.hh:546
gem5::ArmISA::va
Bitfield< 8 > va
Definition: misc_types.hh:330
gem5::ArmISA::ArmFault::getFsr
virtual FSR getFsr(ThreadContext *tc) const
Definition: faults.hh:256
gem5::ArmISA::ArmFault::InstructionCacheMaintenance
@ InstructionCacheMaintenance
Definition: faults.hh:98
gem5::ArmISA::AbortFault::getFaultVAddr
bool getFaultVAddr(Addr &va) const override
Definition: faults.cc:1242
gem5::ArmISA::AbortFault::OVAddr
Addr OVAddr
Original virtual address.
Definition: faults.hh:483
gem5::ArmISA::ExceptionClass
ExceptionClass
Definition: types.hh:300
gem5::ArmISA::SoftwareStepFault::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1716
full_system.hh
gem5::FaultName
const typedef char * FaultName
Definition: faults.hh:53
gem5::ArmISA::ArmFault::getFaultAddrReg64
MiscRegIndex getFaultAddrReg64() const
Definition: faults.cc:382
gem5::ArmISA::HardwareBreakpoint::HardwareBreakpoint
HardwareBreakpoint(Addr _vaddr, uint32_t _iss)
Definition: faults.cc:1596
gem5::ArmISA::Reset::getVector
Addr getVector(ThreadContext *tc) override
Definition: faults.cc:742
gem5::ArmISA::AbortFault::srcEncoded
uint8_t srcEncoded
Definition: faults.hh:487
gem5::ArmISA::ArmFault
Definition: faults.hh:64
gem5::ArmISA::ArmFault::FaultVals::currELHOffset
const uint16_t currELHOffset
Definition: faults.hh:174
gem5::ArmISA::AbortFault::faultAddr
Addr faultAddr
The virtual address the fault occured at.
Definition: faults.hh:477
gem5::ArmISA::FaultOffset
Addr FaultOffset
Definition: faults.hh:60
gem5::ArmISA::ArmFault::FaultVals::fiqDisable
const bool fiqDisable
Definition: faults.hh:190
gem5::X86ISA::ExtMachInst
Definition: types.hh:212
gem5::ArmISA::ArmFault::aarch64FaultSources
static uint8_t aarch64FaultSources[NumFaultSources]
Encodings of the fault sources in AArch64 state.
Definition: faults.hh:130
gem5::ArmISA::SupervisorCall::overrideEc
ExceptionClass overrideEc
Definition: faults.hh:362
gem5::ArmISA::Watchpoint::Watchpoint
Watchpoint(ExtMachInst mach_inst, Addr vaddr, bool _write, bool _cm)
Definition: faults.cc:1646
gem5::ArmISA::PrefetchAbort::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1293
gem5::ArmISA::EL0
@ EL0
Definition: types.hh:273
gem5::ArmISA::ArmFaultVals::armPcOffset
uint8_t armPcOffset(bool is_hyp) override
Definition: faults.hh:285
gem5::ArmISA::ArmFault::TranMethod
TranMethod
Definition: faults.hh:150
gem5::ArmISA::SupervisorCall::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:867
gem5::ArmISA::ArmFault::invoke64
void invoke64(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr)
Definition: faults.cc:634
gem5::ArmISA::ArmFault::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:477
gem5::ArmISA::SupervisorTrap::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1017
gem5::ArmISA::DataAbort::isv
bool isv
Definition: faults.hh:549
gem5::ArmISA::Watchpoint::annotate
void annotate(AnnotationIDs id, uint64_t val) override
Definition: faults.cc:1683
gem5::ArmISA::SystemError
System error (AArch64 only)
Definition: faults.hh:655
gem5::ArmISA::SupervisorTrap::SupervisorTrap
SupervisorTrap(ExtMachInst mach_inst, uint32_t _iss, ExceptionClass _overrideEc=ExceptionClass::INVALID)
Definition: faults.hh:407
gem5::ArmISA::AbortFault::isMMUFault
bool isMMUFault() const
Definition: faults.cc:1225
gem5::ArmISA::ArmFault::getVector
virtual Addr getVector(ThreadContext *tc)
Definition: faults.cc:311
gem5::ArmISA::ArmFault::isResetSPSR
bool isResetSPSR()
Definition: faults.hh:234
gem5::ArmISA::ArmFaultVals::name
FaultName name() const override
Definition: faults.hh:271
gem5::ArmISA::ArmFault::CM
@ CM
Definition: faults.hh:139
gem5::FaultBase
Definition: translation_gen.test.cc:49
gem5::ArmISA::Watchpoint::iss
uint32_t iss() const override
Definition: faults.cc:1653
gem5::ArmISA::FastInterrupt
Definition: faults.hh:610
gem5::ArmISA::SPAlignmentFault
Stack pointer alignment fault (AArch64 only)
Definition: faults.hh:644
gem5::ArmISA::AbortFault::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:1051
gem5::ArmISA::ArmFault::span
bool span
Definition: faults.hh:85
gem5::ArmISA::ArmFault::TranslationLL
@ TranslationLL
Definition: faults.hh:101
gem5::ArmISA::AbortFault::stage2
bool stage2
Definition: faults.hh:488
misc.hh
gem5::ArmISA::ArmFault::WPOINT_CM
@ WPOINT_CM
Definition: faults.hh:162
gem5::ArmISA::SecureMonitorCall::SecureMonitorCall
SecureMonitorCall(ExtMachInst mach_inst)
Definition: faults.hh:385
gem5::ArmISA::ArmFaultVals::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.hh:304
gem5::ArmISA::ExceptionClass::UNKNOWN
@ UNKNOWN
gem5::ArmISA::ArmFault::ec
virtual ExceptionClass ec(ThreadContext *tc) const =0
gem5::ArmISA::SoftwareBreakpoint::SoftwareBreakpoint
SoftwareBreakpoint(ExtMachInst mach_inst, uint32_t _iss)
Definition: faults.cc:1576
gem5::ArmISA::ArmFault::AnnotationIDs
AnnotationIDs
Definition: faults.hh:132
gem5::ArmISA::ArmFault::DebugType
DebugType
Definition: faults.hh:157
gem5::ArmISA::ArmFault::annotate
virtual void annotate(AnnotationIDs id, uint64_t val)
Definition: faults.hh:239
logging.hh
gem5::ArmISA::ArmFault::TLBConflictAbort
@ TLBConflictAbort
Definition: faults.hh:107
gem5::ArmISA::ArmFault::il
virtual bool il(ThreadContext *tc) const =0
gem5::ArmISA::ArmFault::AccessFlagLL
@ AccessFlagLL
Definition: faults.hh:102
gem5::ArmISA::SoftwareStepFault::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:1726
gem5::ArmISA::UndefinedInstruction::iss
uint32_t iss() const override
Definition: faults.cc:819
gem5::ArmISA::FastInterrupt::routeToMonitor
bool routeToMonitor(ThreadContext *tc) const override
Definition: faults.cc:1478
gem5::ArmISA::ArmFault::S1PTW
@ S1PTW
Definition: faults.hh:134
gem5::ArmISA::VirtualDataAbort::VirtualDataAbort
VirtualDataAbort(Addr _addr, TlbEntry::DomainType _domain, bool _write, uint8_t _source)
Definition: faults.hh:587
gem5::ArmISA::Reset::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:760
gem5::ArmISA::ArmFault::FaultVals::nextMode
const OperatingMode nextMode
Definition: faults.hh:178
gem5::ArmISA::ArmSev::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:1747
gem5::ArmISA::ArmFault::toMode
OperatingMode toMode
Definition: faults.hh:77
gem5::ArmISA::ArmFault::routeToHyp
virtual bool routeToHyp(ThreadContext *tc) const
Definition: faults.hh:244
gem5::ArmISA::ArmFault::SRT
@ SRT
Definition: faults.hh:138
gem5::ArmISA::HardwareBreakpoint::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:1620
gem5::ArmISA::DataAbort::sse
uint8_t sse
Definition: faults.hh:551
gem5::ArmISA::ArmFault::vectorCatch
bool vectorCatch(ThreadContext *tc, const StaticInstPtr &inst)
gem5::ArmISA::Interrupt::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1457
gem5::ArmISA::AbortFault::write
bool write
Definition: faults.hh:484
gem5::MipsISA::vaddr
vaddr
Definition: pra_constants.hh:278
gem5::ArmISA::PrefetchAbort::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:1249
gem5::ArmISA::DataAbort::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1350
gem5::ArmISA::HypervisorCall::routeToMonitor
bool routeToMonitor(ThreadContext *tc) const override
Definition: faults.cc:916
gem5::ArmISA::DataAbort::ar
bool ar
Definition: faults.hh:557
gem5::ArmISA::IllegalInstSetStateFault::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1793
gem5::ArmISA::SystemError::invoke
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
Definition: faults.cc:1549
gem5::ArmISA::ArmFault::machInst
ExtMachInst machInst
Definition: faults.hh:67
gem5::ArmISA::SPAlignmentFault::routeToHyp
bool routeToHyp(ThreadContext *tc) const override
Definition: faults.cc:1538
gem5::ArmISA::ArmFault::fromMode
OperatingMode fromMode
Definition: faults.hh:76
gem5::ArmISA::SecureMonitorTrap::machInst
ExtMachInst machInst
Definition: faults.hh:423
gem5::ArmISA::SupervisorCall::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:875
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::ArmISA::ArmFault::invoke32
void invoke32(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr)
Definition: faults.cc:504
gem5::ArmISA::ArmFault::routeToMonitor
virtual bool routeToMonitor(ThreadContext *tc) const =0
gem5::ArmISA::IllegalInstSetStateFault::IllegalInstSetStateFault
IllegalInstSetStateFault()
Definition: faults.cc:1789
gem5::ArmISA::AbortFault::source
uint8_t source
Definition: faults.hh:486
gem5::ArmISA::ArmFault::isStage2
virtual bool isStage2() const
Definition: faults.hh:255
gem5::ArmISA::VirtualInterrupt
Definition: faults.hh:604
gem5::ArmISA::Interrupt
Definition: faults.hh:595
gem5::ArmISA::ArmFault::longDescFaultSources
static uint8_t longDescFaultSources[NumFaultSources]
Encodings of the fault sources when the long-desc.
Definition: faults.hh:128
gem5::ArmISA::AbortFault
Definition: faults.hh:468
gem5::ArmISA::ArmFault::SAS
@ SAS
Definition: faults.hh:136
gem5::ArmISA::DataAbort::HFarIndex
static const MiscRegIndex HFarIndex
Definition: faults.hh:548
gem5::ArmISA::SecureMonitorCall::vectorCatchFlag
uint32_t vectorCatchFlag() const override
Definition: faults.hh:393
gem5::ArmISA::SPAlignmentFault::il
bool il(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.hh:651
gem5::ArmISA::ArmFault::UnknownTran
@ UnknownTran
Definition: faults.hh:154
gem5::ArmISA::OperatingMode
OperatingMode
Definition: types.hh:279
gem5::ArmISA::ArmFault::OVA
@ OVA
Definition: faults.hh:135
gem5::ArmISA::SoftwareStepFault::stepped
bool stepped
Definition: faults.hh:718
gem5::ArmISA::ArmFault::FaultVals::FaultVals
FaultVals(const FaultName &name_, FaultOffset offset_, uint16_t curr_elt_offset, uint16_t curr_elh_offset, uint16_t lower_el64_offset, uint16_t lower_el32_offset, OperatingMode next_mode, uint8_t arm_pc_offset, uint8_t thumb_pc_offset, uint8_t arm_pc_elr_offset, uint8_t thumb_pc_elr_offset, bool hyp_trappable, bool abort_disable, bool fiq_disable, ExceptionClass ec_)
Definition: faults.hh:196
gem5::ArmISA::AbortFault::s1ptw
bool s1ptw
Definition: faults.hh:489
gem5::ArmISA::VirtualFastInterrupt::VirtualFastInterrupt
VirtualFastInterrupt()
Definition: faults.cc:1515
gem5::ArmISA::SecureMonitorTrap::overrideEc
ExceptionClass overrideEc
Definition: faults.hh:424
gem5::ArmISA::ArmFaultVals::fiqDisable
bool fiqDisable(ThreadContext *tc) override
Definition: faults.hh:301
gem5::ArmISA::SoftwareStepFault::SoftwareStepFault
SoftwareStepFault(ExtMachInst mach_inst, bool is_ldx, bool stepped)
Definition: faults.cc:1707
gem5::ArmISA::VirtualDataAbort::FsrIndex
static const MiscRegIndex FsrIndex
Definition: faults.hh:583
gem5::ArmISA::ArmFaultVals::iss
uint32_t iss() const override
Definition: faults.hh:312
gem5::ArmISA::Interrupt::abortDisable
bool abortDisable(ThreadContext *tc) override
Definition: faults.cc:1465
gem5::ArmISA::VirtualDataAbort::FarIndex
static const MiscRegIndex FarIndex
Definition: faults.hh:584
gem5::ArmISA::ExceptionLevel
ExceptionLevel
Definition: types.hh:271
gem5::ArmISA::Watchpoint::ec
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Definition: faults.cc:1698
gem5::ArmISA::AbortFault::tranMethod
ArmFault::TranMethod tranMethod
Definition: faults.hh:490
gem5::ArmISA::HypervisorCall::HypervisorCall
HypervisorCall(ExtMachInst mach_inst, uint32_t _imm)
Definition: faults.cc:909
gem5::ArmISA::ArmFault::fiqDisable
virtual bool fiqDisable(ThreadContext *tc)=0
gem5::ArmISA::Watchpoint::write
bool write
Definition: faults.hh:698
gem5::ArmISA::IllegalInstSetStateFault
Illegal Instruction Set State fault (AArch64 only)
Definition: faults.hh:740
gem5::ArmISA::ArmFault::FaultVals::armPcElrOffset
const uint8_t armPcElrOffset
Definition: faults.hh:185

Generated on Sun Jul 30 2023 01:56:46 for gem5 by doxygen 1.8.17