diff options
author | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2018-06-05 16:17:48 +0100 |
---|---|---|
committer | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2018-06-22 10:53:40 +0000 |
commit | b4a10d55e55752c3423a9d0f4b529f7f80432590 (patch) | |
tree | 34f6f36084709e9e2ea1568e3a5ff9051d9c5d57 /src/arch/arm/insts/static_inst.cc | |
parent | fc278fffb78512ff3d62a906804d6b285edd00c7 (diff) | |
download | gem5-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.cc | 17 |
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 |