arch-arm: Adjust breakpoint EC depending on source state
The software breakpoint exception class needs to be adjusted depending on the source EL's execution state. This change fixes an incorrect exception class when taking a breakpoint from aarch64. Change-Id: I99d87a04be6bf9ce3a69f6b19969fa006cfd63a4 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Ciro Santilli <ciro.santilli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/10809 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com>
This commit is contained in:
@@ -1543,6 +1543,12 @@ SoftwareBreakpoint::routeToHyp(ThreadContext *tc) const
|
||||
(hcr.tge || mdcr.tde);
|
||||
}
|
||||
|
||||
ExceptionClass
|
||||
SoftwareBreakpoint::ec(ThreadContext *tc) const
|
||||
{
|
||||
return from64 ? EC_SOFTWARE_BREAKPOINT_64 : vals.ec;
|
||||
}
|
||||
|
||||
void
|
||||
ArmSev::invoke(ThreadContext *tc, const StaticInstPtr &inst) {
|
||||
DPRINTF(Faults, "Invoking ArmSev Fault\n");
|
||||
|
||||
@@ -573,6 +573,7 @@ class SoftwareBreakpoint : public ArmFaultVals<SoftwareBreakpoint>
|
||||
SoftwareBreakpoint(ExtMachInst _mach_inst, uint32_t _iss);
|
||||
|
||||
bool routeToHyp(ThreadContext *tc) const override;
|
||||
ExceptionClass ec(ThreadContext *tc) const override;
|
||||
};
|
||||
|
||||
// A fault that flushes the pipe, excluding the faulting instructions
|
||||
|
||||
@@ -623,6 +623,7 @@ namespace ArmISA
|
||||
EC_FP_EXCEPTION_64 = 0x2C,
|
||||
EC_SERROR = 0x2F,
|
||||
EC_SOFTWARE_BREAKPOINT = 0x38,
|
||||
EC_SOFTWARE_BREAKPOINT_64 = 0x3C,
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user