summaryrefslogtreecommitdiff
path: root/src/arch/arm/insts/static_inst.cc
diff options
context:
space:
mode:
authorGiacomo Travaglini <giacomo.travaglini@arm.com>2018-06-05 16:17:48 +0100
committerGiacomo Travaglini <giacomo.travaglini@arm.com>2018-06-22 10:53:40 +0000
commitb4a10d55e55752c3423a9d0f4b529f7f80432590 (patch)
tree34f6f36084709e9e2ea1568e3a5ff9051d9c5d57 /src/arch/arm/insts/static_inst.cc
parentfc278fffb78512ff3d62a906804d6b285edd00c7 (diff)
downloadgem5-b4a10d55e55752c3423a9d0f4b529f7f80432590.tar.xz
arch-arm: AArch32 execution triggering AArch64 SW Break
AArch32 Software Breakpoint (BKPT) can trigger an AArch64 fault when interprocessing if the trapping conditions are met. Change-Id: I485852ed19429f9cd928a6447a95eb6f471f189c Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/11197 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/arch/arm/insts/static_inst.cc')
-rw-r--r--src/arch/arm/insts/static_inst.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/arch/arm/insts/static_inst.cc b/src/arch/arm/insts/static_inst.cc
index b7f235e98..bd6f11521 100644
--- a/src/arch/arm/insts/static_inst.cc
+++ b/src/arch/arm/insts/static_inst.cc
@@ -605,6 +605,23 @@ ArmStaticInst::generateDisassembly(Addr pc,
return ss.str();
}
+Fault
+ArmStaticInst::softwareBreakpoint32(ExecContext *xc, uint16_t imm) const
+{
+ const auto tc = xc->tcBase();
+ const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
+ const HDCR mdcr = tc->readMiscRegNoEffect(MISCREG_MDCR_EL2);
+ if ((ArmSystem::haveEL(tc, EL2) && !inSecureState(tc) &&
+ !ELIs32(tc, EL2) && (hcr.tge == 1 || mdcr.tde == 1)) ||
+ !ELIs32(tc, EL1)) {
+ // Route to AArch64 Software Breakpoint
+ return std::make_shared<SoftwareBreakpoint>(machInst, imm);
+ } else {
+ // Execute AArch32 Software Breakpoint
+ return std::make_shared<PrefetchAbort>(readPC(xc),
+ ArmFault::DebugEvent);
+ }
+}
Fault
ArmStaticInst::advSIMDFPAccessTrap64(ExceptionLevel el) const