Page MenuHomeFreeBSD

Reliably enable debug exceptions on all CPUs.
ClosedPublic

Authored by jhb on Aug 12 2017, 3:37 AM.
Tags
None
Referenced Files
Unknown Object (File)
Wed, Nov 6, 3:49 PM
Unknown Object (File)
Fri, Nov 1, 6:42 AM
Unknown Object (File)
Sep 30 2024, 5:00 PM
Unknown Object (File)
Sep 8 2024, 7:02 AM
Unknown Object (File)
Sep 8 2024, 12:41 AM
Unknown Object (File)
Sep 7 2024, 5:29 AM
Unknown Object (File)
Aug 23 2024, 10:42 PM
Unknown Object (File)
Aug 23 2024, 6:23 PM
Subscribers

Details

Summary

Previously, debug exceptions were only enabled on the boot CPU if
DDB was enabled in the dbg_monitor_init() function. APs also called
this function, but since mp_machdep.c doesn't include opt_ddb.h, the
APs ended up calling an empty stub defined in <machine/debug_monitor.h>
instead of the real function. Also, if DDB was not enabled in the kernel,
the boot CPU would not enable debug exceptions.

Fix this by adding a new dbg_init() function that always clears the OS
lock to enable debug exceptions which the boot CPU and the APs call.
This function also calls dbg_monitor_init() to enable hardware breakpoints
from DDB on all CPUs if DDB is enabled. Eventually base support for
hardware breakpoints/watchpoints will need to move out of the DDB-only
debug_monitor.c for use by userland debuggers.

Test Plan
  • cpuset -l 0 gdb /bin/ls and single step would work
  • cpuset -l 1 gdb /bin/ls and single step would not

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

sys/arm64/arm64/machdep.c
225 ↗(On Diff #31974)

This includes D11972 because I tested these in a shared tree, but I will commit D11972 first.

I think Semihalf was only interested in the kernel debugger when they added this.

This revision is now accepted and ready to land.Aug 12 2017, 7:49 AM
This revision was automatically updated to reflect the committed changes.