gem5  v20.1.0.0
self_debug.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 Metempsy Technology LSC
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  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  */
37 
38 #ifndef __ARCH_ARM_SELF_DEBUG_HH__
39 #define __ARCH_ARM_SELF_DEBUG_HH__
40 
41 
42 #include "arch/arm/faults.hh"
43 #include "arch/arm/miscregs.hh"
44 #include "arch/arm/system.hh"
45 #include "arch/arm/types.hh"
46 #include "arch/arm/utility.hh"
47 #include "arch/generic/tlb.hh"
48 #include "cpu/thread_context.hh"
49 
50 class ThreadContext;
51 
52 namespace ArmISA
53 {
54 
55 class SelfDebug;
56 
57 class BrkPoint
58 {
59  private:
66  bool enable;
68  bool onUse;
69 
70  public:
71  friend class SelfDebug;
72 
73  BrkPoint(MiscRegIndex ctrl_index, MiscRegIndex val_index,
74  SelfDebug* _conf, bool ctx_aw, bool lva,
75  bool vmid16, bool aarch32):
76  ctrlRegIndex(ctrl_index), valRegIndex(val_index),
77  conf(_conf), isCntxtAware(ctx_aw),
78  VMID16enabled(vmid16), activePc(0x0), enable(false)
79  {
80  maxAddrSize = lva ? 52: 48 ;
81  maxAddrSize = aarch32 ? 31 : maxAddrSize;
82  onUse = false;
83  }
84 
86  bool test(ThreadContext *tc, Addr pc, ExceptionLevel el, DBGBCR ctr,
87  bool from_link);
88 
89  protected:
90  inline Addr
92  {
93  return bits(tc->readMiscReg(valRegIndex), maxAddrSize, 2);
94  }
95 
96  inline RegVal
97  getContextfromReg(ThreadContext *tc, bool ctxid1) const
98  {
99  if (ctxid1)
100  return bits(tc->readMiscReg(valRegIndex), 31, 0);
101  else
102  return bits(tc->readMiscReg(valRegIndex), 63, 32);
103  }
104 
105 
106  inline uint32_t getVMIDfromReg(ThreadContext *tc);
107 
108  public:
109  bool testAddrMatch(ThreadContext *tc, Addr pc, uint8_t bas);
110  bool testAddrMissMatch(ThreadContext *tc, Addr pc, uint8_t bas);
111  bool testContextMatch(ThreadContext *tc, bool ctx1, bool low_ctx);
112  bool testContextMatch(ThreadContext *tc, bool ctx1);
113  bool testVMIDMatch(ThreadContext *tc);
114 
115  const DBGBCR
117  {
118  return tc->readMiscReg(ctrlRegIndex);
119  }
120 
122  uint8_t hmc, uint8_t ssc, uint8_t pmc);
123 
124  bool
126  {
127  if (vaddr == activePc) {
128  activePc = 0x0;
129  return false;
130  } else {
131  activePc = vaddr;
132  return true;
133  }
134  }
135 
136  inline void
138  {
139  enable = val.e == 0x1;
140  }
141 };
142 
144 {
145  private:
149  bool enable;
151 
152  public:
153  friend class SelfDebug;
154 
155  WatchPoint(MiscRegIndex ctrl_index, MiscRegIndex val_index,
156  SelfDebug* _conf, bool lva, bool aarch32) :
157  ctrlRegIndex(ctrl_index),
158  valRegIndex(val_index), conf(_conf), enable(false)
159  {
160  maxAddrSize = lva ? 52: 48 ;
161  maxAddrSize = aarch32 ? 31 : maxAddrSize;
162  }
163 
164  bool compareAddress(ThreadContext *tc, Addr in_addr,
165  uint8_t bas, uint8_t mask, unsigned size);
166 
167  inline Addr
169  {
170  return bits(tc->readMiscReg(valRegIndex), maxAddrSize, 0);
171  }
172 
173  inline bool
175  {
176  return addr & 0x4;
177  }
178 
179  inline void
181  {
182  enable = val.e == 0x1;
183  }
184 
185  bool isEnabled(ThreadContext* tc, ExceptionLevel el, bool hmc,
186  uint8_t ssc, uint8_t pac);
187  bool test(ThreadContext *tc, Addr addr, ExceptionLevel el, bool& wrt,
188  bool atomic, unsigned size);
189 };
190 
192 {
193  private:
194  static const uint8_t INACTIVE_STATE = 0;
195  static const uint8_t ACTIVE_PENDING_STATE = 1;
196  static const uint8_t ACTIVE_NOT_PENDING_STATE = 2;
197 
198  bool bSS;
199  int stateSS;
203  bool cpsrD;
204 
205  public:
206  friend class SelfDebug;
207 
209  : bSS(false), stateSS(INACTIVE_STATE),
210  conf(s), steppedLdx(false)
211  {}
212 
213  bool debugExceptionReturnSS(ThreadContext *tc, CPSR spsr,
214  ExceptionLevel dest);
215  bool advanceSS(ThreadContext *tc);
216 
217  void
219  {
221  steppedLdx = true;
222  }
223 
224  void
226  {
228  steppedLdx = false;
229  }
230 
231  bool
232  getLdx() const
233  {
234  return prevSteppedLdx;
235  }
236 };
237 
239 {
240  private:
241  bool vcmatch;
244 
245  public:
246  VectorCatch(bool _vcmatch, SelfDebug* s) : vcmatch(_vcmatch), conf(s)
247  {}
248 
251  ArmFault* fault);
252 
253  bool isVCMatch() const { return vcmatch; }
254 
255  private:
256  Addr
257  getVectorBase(ThreadContext *tc, bool monitor)
258  {
259  if (monitor) {
260  return tc->readMiscReg(MISCREG_MVBAR) & ~0x1F;
261  }
262  SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
263  if (sctlr.v) {
264  return (Addr) 0xFFFF0000;
265  } else {
266  Addr vbar = tc->readMiscReg(MISCREG_VBAR) & ~0x1F;
267  return vbar;
268  }
269  }
270 
271 };
272 
274 {
275  private:
280 
282  bool enableTdeTge; // MDCR_EL2.TDE || HCR_EL2.TGE
283 
284  bool mde; // MDSCR_EL1.MDE, DBGDSCRext.MDBGen
285  bool sdd; // MDCR_EL3.SDD
286  bool kde; // MDSCR_EL1.KDE
287  bool oslk; // OS lock flag
288 
289  bool aarch32; // updates with stage1 aarch64/32
290  bool to32;
291 
292  public:
294  : initialized(false), enableTdeTge(false),
295  mde(false), sdd(false), kde(false), oslk(false)
296  {
297  softStep = new SoftwareStep(this);
298  }
299 
301  {
302  delete softStep;
303  delete vcExcpt;
304  }
305 
306  Fault testDebug(ThreadContext *tc, const RequestPtr &req,
308 
309  protected:
311  Fault testWatchPoints(ThreadContext *tc, Addr vaddr, bool write,
312  bool atomic, unsigned size, bool cm);
313 
316  bool write, bool cm);
317  public:
319 
320  bool enabled() const { return mde || softStep->bSS; };
321 
322  inline BrkPoint*
324  {
325  return &arBrkPoints[index];
326  }
327 
328  static inline bool
330  {
331  switch (ssc) {
332  case 0x0: return true;
333  case 0x1: return !isSecure(tc);
334  case 0x2: return isSecure(tc);
335  case 0x3:
336  {
337  bool b = hmc? true: isSecure(tc);
338  return b;
339  }
340  default: panic("Unreachable value");
341  }
342  return false;
343  }
344 
346  bool secure, bool mask);
348  bool secure, bool mask);
349 
350  void
352  {
353  for (auto &p: arBrkPoints){
354  p.onUse = false;
355  }
356  }
357 
358  inline bool
360  {
361  CPSR cpsr = tc->readMiscReg(MISCREG_CPSR);
363  if (aarch32) {
364  return isDebugEnabledForEL32(tc, el, isSecure(tc),
365  (bool)cpsr.d == 1);
366  } else {
367  return isDebugEnabledForEL64(tc, el, isSecure(tc),
368  (bool)cpsr.d == 1 );
369  }
370  }
371 
372  inline void
374  {
375  sdd = bits(val, 16);
376  }
377 
378  inline void
380  {
381  mde = bits(val, 15);
382  kde = bits(val, 13);
383  softStep->bSS = bits(val, 0);
384  }
385 
386  inline void
388  {
389  mde = bits(val, 15);
390  }
391 
392  inline void
393  setenableTDETGE(HCR hcr, HDCR mdcr)
394  {
395  enableTdeTge = (mdcr.tde == 0x1 || hcr.tge == 0x1);
396  }
397 
398  inline void
400  {
401  oslk = bool(bits(val, 0));
402  }
403 
404  inline void
405  updateDBGBCR(int index, DBGBCR val)
406  {
407  arBrkPoints[index].updateControl(val);
408  }
409 
410  inline void
411  updateDBGWCR(int index, DBGWCR val)
412  {
413  arWatchPoints[index].updateControl(val);
414  }
415 
416  inline void
418  {
419  softStep->cpsrD = mask;
420  }
421 
422  inline bool
423  isAArch32() const
424  {
425  return aarch32;
426  }
427 
428  inline void
430  {
431  ExceptionLevel from_el = (ExceptionLevel) currEL(tc);
432  if (from_el == EL0)
433  aarch32 = ELIs32(tc, EL0) && ELIs32(tc, EL1);
434  else
435  aarch32 = ELIs32(tc, from_el);
436  return;
437  }
438 
439  SoftwareStep *
441  {
442  return softStep;
443  }
444 
445  VectorCatch*
447  {
448  if (!initialized)
449  init(tc);
450  return vcExcpt;
451  }
452 
453  bool
455  {
456  ExceptionLevel ELd = debugTargetFrom(tc, isSecure(tc));
457  return ELIs32(tc, ELd) && aarch32;
458  }
459 
460  void init(ThreadContext *tc);
461 };
462 
463 }
464 #endif
ArmISA::SelfDebug::testDebug
Fault testDebug(ThreadContext *tc, const RequestPtr &req, BaseTLB::Mode mode)
Definition: self_debug.cc:48
ArmISA::SoftwareStep::setLdx
void setLdx()
Definition: self_debug.hh:218
ArmISA::SelfDebug
Definition: self_debug.hh:273
ArmISA::debugTargetFrom
ExceptionLevel debugTargetFrom(ThreadContext *tc, bool secure)
Definition: utility.cc:193
ArmISA::WatchPoint::isDoubleAligned
bool isDoubleAligned(Addr addr)
Definition: self_debug.hh:174
ArmISA::SelfDebug::securityStateMatch
static bool securityStateMatch(ThreadContext *tc, uint8_t ssc, bool hmc)
Definition: self_debug.hh:329
ArmISA::VectorCatch::exceptionTrapping
bool exceptionTrapping(ThreadContext *tc, ExceptionLevel el, ArmFault *fault)
Definition: self_debug.cc:806
ArmISA::SelfDebug::init
void init(ThreadContext *tc)
Definition: self_debug.cc:330
ArmISA::BrkPoint::test
bool test(ThreadContext *tc, Addr pc, ExceptionLevel el, DBGBCR ctr, bool from_link)
Definition: self_debug.cc:221
ArmISA::SoftwareStep::stateSS
int stateSS
Definition: self_debug.hh:199
ArmISA::cm
Bitfield< 13 > cm
Definition: miscregs_types.hh:423
ArmISA::SelfDebug::enabled
bool enabled() const
Definition: self_debug.hh:320
ArmISA::SoftwareStep::getLdx
bool getLdx() const
Definition: self_debug.hh:232
ArmISA::bas
Bitfield< 8, 5 > bas
Definition: miscregs_types.hh:703
MipsISA::index
Bitfield< 30, 0 > index
Definition: pra_constants.hh:44
ArmISA::VectorCatch::getVectorBase
Addr getVectorBase(ThreadContext *tc, bool monitor)
Definition: self_debug.hh:257
ArmISA::BrkPoint::testLinkedBk
bool testLinkedBk(ThreadContext *tc, Addr vaddr, ExceptionLevel el)
Definition: self_debug.cc:210
ArmISA::VectorCatch::VectorCatch
VectorCatch(bool _vcmatch, SelfDebug *s)
Definition: self_debug.hh:246
ArmISA::BrkPoint::valRegIndex
MiscRegIndex valRegIndex
Definition: self_debug.hh:61
ArmISA::atomic
Bitfield< 23, 20 > atomic
Definition: miscregs_types.hh:96
ArmISA::BrkPoint
Definition: self_debug.hh:57
ArmISA::EL0
@ EL0
Definition: types.hh:622
ArmISA::WatchPoint
Definition: self_debug.hh:143
ArmISA::SelfDebug::setAArch32
void setAArch32(ThreadContext *tc)
Definition: self_debug.hh:429
ArmISA::SoftwareStep::ACTIVE_NOT_PENDING_STATE
static const uint8_t ACTIVE_NOT_PENDING_STATE
Definition: self_debug.hh:196
ArmISA::SelfDebug::softStep
SoftwareStep * softStep
Definition: self_debug.hh:278
ArmISA::SelfDebug::setMDBGen
void setMDBGen(RegVal val)
Definition: self_debug.hh:387
ArmISA::ssc
Bitfield< 15, 14 > ssc
Definition: miscregs_types.hh:700
ArmISA::currEL
static ExceptionLevel currEL(const ThreadContext *tc)
Definition: utility.hh:143
ArmISA::SoftwareStep::SoftwareStep
SoftwareStep(SelfDebug *s)
Definition: self_debug.hh:208
tlb.hh
ArmISA::SoftwareStep::conf
SelfDebug * conf
Definition: self_debug.hh:200
BaseTLB::Mode
Mode
Definition: tlb.hh:57
ArmISA::SelfDebug::updateDBGWCR
void updateDBGWCR(int index, DBGWCR val)
Definition: self_debug.hh:411
RequestPtr
std::shared_ptr< Request > RequestPtr
Definition: request.hh:82
std::vector
STL vector class.
Definition: stl.hh:37
ArmISA::SelfDebug::arBrkPoints
std::vector< BrkPoint > arBrkPoints
Definition: self_debug.hh:276
ArmISA::BrkPoint::testContextMatch
bool testContextMatch(ThreadContext *tc, bool ctx1, bool low_ctx)
Definition: self_debug.cc:430
ArmISA::BrkPoint::maxAddrSize
int maxAddrSize
Definition: self_debug.hh:67
system.hh
ArmISA::BrkPoint::getVMIDfromReg
uint32_t getVMIDfromReg(ThreadContext *tc)
Definition: self_debug.cc:525
ArmISA
Definition: ccregs.hh:41
types.hh
ArmISA::VectorCatch::conf
SelfDebug * conf
Definition: self_debug.hh:242
ArmISA::SelfDebug::enableTdeTge
bool enableTdeTge
Definition: self_debug.hh:282
ArmISA::SoftwareStep::cpsrD
bool cpsrD
Definition: self_debug.hh:203
ArmISA::SelfDebug::vcExcpt
VectorCatch * vcExcpt
Definition: self_debug.hh:279
ArmISA::BrkPoint::getContextfromReg
RegVal getContextfromReg(ThreadContext *tc, bool ctxid1) const
Definition: self_debug.hh:97
ArmISA::WatchPoint::isEnabled
bool isEnabled(ThreadContext *tc, ExceptionLevel el, bool hmc, uint8_t ssc, uint8_t pac)
Definition: self_debug.cc:535
ArmISA::SelfDebug::triggerException
Fault triggerException(ThreadContext *tc, Addr vaddr)
Definition: self_debug.cc:110
ArmISA::BrkPoint::enable
bool enable
Definition: self_debug.hh:66
ArmISA::SoftwareStep::clearLdx
void clearLdx()
Definition: self_debug.hh:225
ArmISA::pmc
Bitfield< 2, 1 > pmc
Definition: miscregs_types.hh:705
ArmISA::SelfDebug::setDebugMask
void setDebugMask(bool mask)
Definition: self_debug.hh:417
ArmISA::BrkPoint::isEnabled
bool isEnabled(ThreadContext *tc, ExceptionLevel el, uint8_t hmc, uint8_t ssc, uint8_t pmc)
Definition: self_debug.cc:470
ArmISA::ELIs32
bool ELIs32(ThreadContext *tc, ExceptionLevel el)
Definition: utility.cc:383
ArmISA::VectorCatch
Definition: self_debug.hh:238
ArmISA::BrkPoint::getControlReg
const DBGBCR getControlReg(ThreadContext *tc)
Definition: self_debug.hh:116
ArmISA::MISCREG_MVBAR
@ MISCREG_MVBAR
Definition: miscregs.hh:388
ArmISA::BrkPoint::BrkPoint
BrkPoint(MiscRegIndex ctrl_index, MiscRegIndex val_index, SelfDebug *_conf, bool ctx_aw, bool lva, bool vmid16, bool aarch32)
Definition: self_debug.hh:73
ArmISA::SelfDebug::setbSDD
void setbSDD(RegVal val)
Definition: self_debug.hh:373
ArmISA::SelfDebug::testBreakPoints
Fault testBreakPoints(ThreadContext *tc, Addr vaddr)
Definition: self_debug.cc:73
ArmISA::SelfDebug::triggerWatchpointException
Fault triggerWatchpointException(ThreadContext *tc, Addr vaddr, bool write, bool cm)
Definition: self_debug.cc:148
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
ArmISA::VectorCatch::isVCMatch
bool isVCMatch() const
Definition: self_debug.hh:253
ArmISA::SelfDebug::testWatchPoints
Fault testWatchPoints(ThreadContext *tc, Addr vaddr, bool write, bool atomic, unsigned size, bool cm)
Definition: self_debug.cc:123
ArmISA::BrkPoint::onUse
bool onUse
Definition: self_debug.hh:68
ArmISA::ArmFault
Definition: faults.hh:60
ArmISA::BrkPoint::isActive
bool isActive(Addr vaddr)
Definition: self_debug.hh:125
ArmISA::ExceptionLevel
ExceptionLevel
Definition: types.hh:621
ArmISA::SelfDebug::getSstep
SoftwareStep * getSstep()
Definition: self_debug.hh:440
ArmISA::SelfDebug::setMDSCRvals
void setMDSCRvals(RegVal val)
Definition: self_debug.hh:379
Fault
std::shared_ptr< FaultBase > Fault
Definition: types.hh:240
MipsISA::vaddr
vaddr
Definition: pra_constants.hh:275
MipsISA::pc
Bitfield< 4 > pc
Definition: pra_constants.hh:240
ArmISA::SelfDebug::kde
bool kde
Definition: self_debug.hh:286
ArmISA::WatchPoint::ctrlRegIndex
MiscRegIndex ctrlRegIndex
Definition: self_debug.hh:146
ArmISA::SelfDebug::oslk
bool oslk
Definition: self_debug.hh:287
ArmISA::SelfDebug::isDebugEnabled
bool isDebugEnabled(ThreadContext *tc)
Definition: self_debug.hh:359
ArmISA::WatchPoint::enable
bool enable
Definition: self_debug.hh:149
ArmISA::SoftwareStep::advanceSS
bool advanceSS(ThreadContext *tc)
Definition: self_debug.cc:677
ArmISA::mode
Bitfield< 4, 0 > mode
Definition: miscregs_types.hh:70
ArmISA::WatchPoint::valRegIndex
MiscRegIndex valRegIndex
Definition: self_debug.hh:147
ArmISA::el
Bitfield< 3, 2 > el
Definition: miscregs_types.hh:69
ArmISA::WatchPoint::compareAddress
bool compareAddress(ThreadContext *tc, Addr in_addr, uint8_t bas, uint8_t mask, unsigned size)
Definition: self_debug.cc:601
ArmISA::VectorCatch::addressMatching
bool addressMatching(ThreadContext *tc, Addr addr, ExceptionLevel el)
Definition: self_debug.cc:748
ArmISA::VectorCatch::vcmatch
bool vcmatch
Definition: self_debug.hh:241
ArmISA::SelfDebug::isAArch32
bool isAArch32() const
Definition: self_debug.hh:423
ArmISA::WatchPoint::getAddrfromReg
Addr getAddrfromReg(ThreadContext *tc)
Definition: self_debug.hh:168
ArmISA::WatchPoint::WatchPoint
WatchPoint(MiscRegIndex ctrl_index, MiscRegIndex val_index, SelfDebug *_conf, bool lva, bool aarch32)
Definition: self_debug.hh:155
ArmISA::BrkPoint::ctrlRegIndex
MiscRegIndex ctrlRegIndex
Definition: self_debug.hh:60
ArmISA::BrkPoint::testVMIDMatch
bool testVMIDMatch(ThreadContext *tc)
Definition: self_debug.cc:454
ArmISA::SelfDebug::sdd
bool sdd
Definition: self_debug.hh:285
ArmISA::SelfDebug::initialized
bool initialized
Definition: self_debug.hh:281
faults.hh
X86ISA::val
Bitfield< 63 > val
Definition: misc.hh:769
ArmISA::EL1
@ EL1
Definition: types.hh:623
ArmISA::SelfDebug::~SelfDebug
~SelfDebug()
Definition: self_debug.hh:300
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
ArmISA::SoftwareStep::steppedLdx
bool steppedLdx
Definition: self_debug.hh:201
ArmISA::SelfDebug::updateOSLock
void updateOSLock(RegVal val)
Definition: self_debug.hh:399
utility.hh
ArmISA::SelfDebug::activateDebug
void activateDebug()
Definition: self_debug.hh:351
ArmISA::BrkPoint::isCntxtAware
bool isCntxtAware
Definition: self_debug.hh:63
ArmISA::SoftwareStep::INACTIVE_STATE
static const uint8_t INACTIVE_STATE
Definition: self_debug.hh:194
ArmISA::SoftwareStep::bSS
bool bSS
Definition: self_debug.hh:198
ArmISA::SelfDebug::SelfDebug
SelfDebug()
Definition: self_debug.hh:293
ArmISA::SoftwareStep
Definition: self_debug.hh:191
miscregs.hh
ArmISA::BrkPoint::VMID16enabled
bool VMID16enabled
Definition: self_debug.hh:64
ArmISA::MISCREG_VBAR
@ MISCREG_VBAR
Definition: miscregs.hh:385
ArmISA::hmc
Bitfield< 13 > hmc
Definition: miscregs_types.hh:701
ArmISA::BrkPoint::getAddrfromReg
Addr getAddrfromReg(ThreadContext *tc) const
Definition: self_debug.hh:91
ArmISA::MISCREG_CPSR
@ MISCREG_CPSR
Definition: miscregs.hh:57
ArmISA::WatchPoint::updateControl
void updateControl(DBGWCR val)
Definition: self_debug.hh:180
ArmISA::SelfDebug::arWatchPoints
std::vector< WatchPoint > arWatchPoints
Definition: self_debug.hh:277
ArmISA::SelfDebug::mde
bool mde
Definition: self_debug.hh:284
ArmISA::b
Bitfield< 7 > b
Definition: miscregs_types.hh:376
ArmISA::WatchPoint::maxAddrSize
int maxAddrSize
Definition: self_debug.hh:150
ArmISA::SoftwareStep::prevSteppedLdx
bool prevSteppedLdx
Definition: self_debug.hh:202
ArmISA::SelfDebug::testVectorCatch
Fault testVectorCatch(ThreadContext *tc, Addr addr, ArmFault *flt)
Definition: self_debug.cc:715
ArmISA::WatchPoint::test
bool test(ThreadContext *tc, Addr addr, ExceptionLevel el, bool &wrt, bool atomic, unsigned size)
Definition: self_debug.cc:581
ArmISA::SelfDebug::isDebugEnabledForEL32
bool isDebugEnabledForEL32(ThreadContext *tc, ExceptionLevel el, bool secure, bool mask)
Definition: self_debug.cc:183
ArmISA::BrkPoint::testAddrMissMatch
bool testAddrMissMatch(ThreadContext *tc, Addr pc, uint8_t bas)
Definition: self_debug.cc:404
ArmISA::SelfDebug::to32
bool to32
Definition: self_debug.hh:290
ThreadContext::readMiscReg
virtual RegVal readMiscReg(RegIndex misc_reg)=0
ArmISA::MiscRegIndex
MiscRegIndex
Definition: miscregs.hh:56
addr
ip6_addr_t addr
Definition: inet.hh:423
ArmISA::WatchPoint::conf
SelfDebug * conf
Definition: self_debug.hh:148
ArmISA::SoftwareStep::ACTIVE_PENDING_STATE
static const uint8_t ACTIVE_PENDING_STATE
Definition: self_debug.hh:195
ArmISA::BrkPoint::testAddrMatch
bool testAddrMatch(ThreadContext *tc, Addr pc, uint8_t bas)
Definition: self_debug.cc:385
ArmISA::SoftwareStep::debugExceptionReturnSS
bool debugExceptionReturnSS(ThreadContext *tc, CPSR spsr, ExceptionLevel dest)
Definition: self_debug.cc:645
ArmISA::SelfDebug::updateDBGBCR
void updateDBGBCR(int index, DBGBCR val)
Definition: self_debug.hh:405
MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:323
ArmISA::BrkPoint::updateControl
void updateControl(DBGBCR val)
Definition: self_debug.hh:137
ArmISA::s
Bitfield< 4 > s
Definition: miscregs_types.hh:556
ArmISA::BrkPoint::activePc
Addr activePc
Definition: self_debug.hh:65
ArmISA::pac
Bitfield< 2, 1 > pac
Definition: miscregs_types.hh:719
ArmISA::SelfDebug::setenableTDETGE
void setenableTDETGE(HCR hcr, HDCR mdcr)
Definition: self_debug.hh:393
ArmISA::VectorCatch::vectorTypes
std::vector< Fault * > vectorTypes()
ArmISA::SelfDebug::targetAArch32
bool targetAArch32(ThreadContext *tc)
Definition: self_debug.hh:454
thread_context.hh
RegVal
uint64_t RegVal
Definition: types.hh:168
ArmISA::BrkPoint::conf
SelfDebug * conf
Definition: self_debug.hh:62
ArmISA::SelfDebug::getBrkPoint
BrkPoint * getBrkPoint(uint8_t index)
Definition: self_debug.hh:323
ArmISA::mask
Bitfield< 28, 24 > mask
Definition: miscregs_types.hh:711
ArmISA::MISCREG_SCTLR_EL1
@ MISCREG_SCTLR_EL1
Definition: miscregs.hh:571
ArmISA::SelfDebug::aarch32
bool aarch32
Definition: self_debug.hh:289
ArmISA::SelfDebug::getVectorCatch
VectorCatch * getVectorCatch(ThreadContext *tc)
Definition: self_debug.hh:446
ArmISA::isSecure
bool isSecure(ThreadContext *tc)
Definition: utility.cc:174
ArmISA::SelfDebug::isDebugEnabledForEL64
bool isDebugEnabledForEL64(ThreadContext *tc, ExceptionLevel el, bool secure, bool mask)
Definition: self_debug.cc:164
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:171
bits
T bits(T val, int first, int last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Definition: bitfield.hh:75

Generated on Wed Sep 30 2020 14:02:01 for gem5 by doxygen 1.8.17