kern: improve single-step around user-exception entry

This commit is contained in:
Michael Scire authored and SciresM committed 2021-09-11 19:41:47 -07:00
1 parent c10265676f
commit ebb0bd2b41
2 files changed
+11 -11

No files matched your search

@@ -109,13 +109,9 @@ namespace ams::kern::arch::arm64 {
break;
}
/* If we should, clear the thread's state as single-step. */
/* In the event that we return from this exception, we want SPSR.SS set so that we advance an instruction if single-stepping. */
#if defined(MESOSPHERE_ENABLE_HARDWARE_SINGLE_STEP)
if (AMS_UNLIKELY(GetCurrentThread().IsSingleStep())) {
GetCurrentThread().ClearSingleStep();
cpu::MonitorDebugSystemControlRegisterAccessor().SetSoftwareStep(false).Store();
cpu::EnsureInstructionConsistency();
}
context->psr |= (1ul << 21);
#endif
/* If we should process the user exception (and it's not a breakpoint), try to enter. */
@@ -224,6 +220,15 @@ namespace ams::kern::arch::arm64 {
}
}
/* If we should, clear the thread's state as single-step. */
#if defined(MESOSPHERE_ENABLE_HARDWARE_SINGLE_STEP)
if (AMS_UNLIKELY(GetCurrentThread().IsSingleStep())) {
GetCurrentThread().ClearSingleStep();
cpu::MonitorDebugSystemControlRegisterAccessor().SetSoftwareStep(false).Store();
cpu::EnsureInstructionConsistency();
}
#endif
{
/* Collect additional information based on the ec. */
ams::svc::DebugException exception;