Page MenuHomeFreeBSD

arm64: fix hardware single-stepping from EL1
ClosedPublic

Authored by mhorne on Feb 26 2021, 5:44 PM.
Tags
None
Referenced Files
F80232869: D28944.diff
Fri, Mar 29, 12:58 PM
Unknown Object (File)
Thu, Mar 7, 5:09 PM
Unknown Object (File)
Feb 19 2024, 6:08 PM
Unknown Object (File)
Jan 12 2024, 2:47 AM
Unknown Object (File)
Dec 20 2023, 7:51 AM
Unknown Object (File)
Dec 18 2023, 4:34 PM
Unknown Object (File)
Dec 11 2023, 5:18 PM
Unknown Object (File)
Oct 26 2023, 12:37 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
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable