Page MenuHomeFreeBSD

arm64: fix hardware single-stepping from EL1
ClosedPublic

Authored by mhorne on Feb 26 2021, 5:44 PM.

Details

Summary

The main issue is that debug exceptions must to be disabled for the
entire duration that SS bit in MDSCR_EL1 is set. Otherwise, a
single-step exception will be generated immediately. This can occur
before returning from the debugger (when MDSCR is written to) or before
re-entering it after the single-step (when debug exceptions are unmasked
in the exception handler).

Solve this by delaying the unmask to C code for EL1, and avoid unmasking
at all while handling debug exceptions, thus avoiding any recursive
debug traps.

Test Plan

step from ddb works without hanging or resetting the system. Stepping over a watchpoint works as well.

Diff Detail

Repository
R10 FreeBSD src repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.