HomeFreeBSD

Silently ignore unexpected single-step traps (except for turning

Description

Silently ignore unexpected single-step traps (except for turning
off single-stepping). Only do this on arches (only x86 so far)
which classify single-step traps unambiguously.

This allows other parts of the kernel to be intentionally and
unintentionally sloppy about generating single-step traps. On
x86, at least the following places were unintentionally sloppy:

  • all operations that context-switched [er]flags. Especially spinlock_enter()/exit() and cpu_switch(). When single-stepped, saving the flags leaves PSL_T set in the saved flags, so restoring gives a trap that is spurious if it occurs after single-step mode has been left. Switching contexts away from a low priority thread gives especially long-lived saved copies.
  • the vm86 emulation allows user mode to set PSL_T. This was correct until vm86 bios call mode was unintentionally given access to kdb handling its single-step traps.

Now these places are intentionally sloppy, but unexpected
debugger traps still cause panics if no debugger that handles
the trap is attached when the trap is delivered.

Details

Provenance
bdeAuthored on
Parents
rS305896: Implement BLKSSZGET ioctl for the Linuxulator.
Branches
Unknown
Tags
Unknown