mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-12-22 12:21:18 +00:00
kern: improve single-step around user-exception entry
This commit is contained in:
parent
325ae30067
commit
999318838f
2 changed files with 11 additions and 11 deletions
|
@ -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;
|
||||
|
|
|
@ -217,11 +217,6 @@ _ZN3ams4kern4arch5arm6430EL0SynchronousExceptionHandlerEv:
|
|||
ldp x21, x22, [sp, #(EXCEPTION_CONTEXT_PC_PSR)]
|
||||
ldr x23, [sp, #(EXCEPTION_CONTEXT_TPIDR)]
|
||||
|
||||
#if defined(MESOSPHERE_ENABLE_HARDWARE_SINGLE_STEP)
|
||||
/* Since we're returning from an exception, set SPSR.SS so that we advance an instruction if single-stepping. */
|
||||
orr x22, x22, #(1 << 21)
|
||||
#endif
|
||||
|
||||
msr sp_el0, x20
|
||||
msr elr_el1, x21
|
||||
msr spsr_el1, x22
|
||||
|
|
Loading…
Reference in a new issue