summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/insts/misc.isa
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/isa/insts/misc.isa
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/isa/insts/misc.isa')
-rw-r--r--src/arch/arm/isa/insts/misc.isa10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/arch/arm/isa/insts/misc.isa b/src/arch/arm/isa/insts/misc.isa
index ef579bf5a..932deebbf 100644
--- a/src/arch/arm/isa/insts/misc.isa
+++ b/src/arch/arm/isa/insts/misc.isa
@@ -688,7 +688,15 @@ let {{
decoder_output += RegRegRegRegOpConstructor.subst(usada8Iop)
exec_output += PredOpExecute.subst(usada8Iop)
- bkptCode = 'return std::make_shared<PrefetchAbort>(PC, ArmFault::DebugEvent);\n'
+ bkptCode = '''
+ uint16_t imm16;
+ if (!machInst.thumb)
+ imm16 = ((bits(machInst, 19, 8) << 4) | bits(machInst, 3, 0));
+ else
+ imm16 = bits(machInst, 7, 0);
+
+ return softwareBreakpoint32(xc, imm16);
+ '''
bkptIop = InstObjParams("bkpt", "BkptInst", "PredOp", bkptCode)
header_output += BasicDeclare.subst(bkptIop)
decoder_output += BasicConstructor.subst(bkptIop)