280a281,285
> template<> ArmFault::FaultVals ArmFaultVals<SoftwareBreakpoint>::vals = {
> // Some dummy values (SoftwareBreakpoint is AArch64-only)
> "Software Breakpoint", 0x000, 0x000, 0x200, 0x400, 0x600, MODE_SVC,
> 0, 0, 0, 0, true, false, false, EC_SOFTWARE_BREAKPOINT, FaultStat()
> };
1395a1401,1419
>
> SoftwareBreakpoint::SoftwareBreakpoint(ExtMachInst _mach_inst, uint32_t _iss)
> : ArmFaultVals<SoftwareBreakpoint>(_mach_inst, _iss)
> {}
>
> bool
> SoftwareBreakpoint::routeToHyp(ThreadContext *tc) const
> {
> assert(from64);
>
> const bool have_el2 = ArmSystem::haveVirtualization(tc);
>
> const HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR_EL2);
> const HDCR mdcr = tc->readMiscRegNoEffect(MISCREG_MDCR_EL2);
>
> return have_el2 && !inSecureState(tc) && fromEL <= EL1 &&
> (hcr.tge || mdcr.tde);
> }
>
1427a1452
> template class ArmFaultVals<SoftwareBreakpoint>;