HomeFreeBSD

Cleanups related to debug exceptions on x86.

Description

Cleanups related to debug exceptions on x86.

  • Add constants for fields in DR6 and the reserved fields in DR7. Use these constants instead of magic numbers in most places that use DR6 and DR7.
  • Refer to T_TRCTRAP as "debug exception" rather than a "trace trap" as it is not just for trace exceptions.
  • Always read DR6 for debug exceptions and only clear TF in the flags register for user exceptions where DR6.BS is set.
  • Clear DR6 before returning from a debug exception handler as recommended by the SDM dating all the way back to the 386. This allows debuggers to determine the cause of each exception. For kernel traps, clear DR6 in the T_TRCTRAP case and pass DR6 by value to other parts of the handler (namely, user_dbreg_trap()). For user traps, wait until after trapsignal to clear DR6 so that userland debuggers can read DR6 via PT_GETDBREGS while the thread is stopped in trapsignal().

Reviewed by: kib, rgrimes
MFC after: 1 month
Differential Revision: https://reviews.freebsd.org/D15189

Details

Provenance
jhbAuthored on
Reviewer
kib
Differential Revision
D15189: Cleanups related to debug exceptions on x86.
Parents
rS334008: sh: Split CNL syntax category to avoid a check on state[level].syntax
Branches
Unknown
Tags
Unknown