5#include <sys/kassert.h>
6#include <sys/kconfig.h>
10#include <machine/amd64.h>
11#include <machine/amd64op.h>
12#include <machine/atomic.h>
13#include <machine/trap.h>
14#include <machine/lapic.h>
15#include <machine/mp.h>
95 kprintf(
"Invalid CPU number\n");
101 kprintf(
"Interrupt %d Error Code: %016llx\n",
103 kprintf(
"cr0: %016llx cr2: %016llx\n",
105 kprintf(
"cr3: %016llx cr4: %016llx\n",
107 kprintf(
"dr0: %016llx dr1: %016llx dr2: %016llx\n",
109 kprintf(
"dr3: %016llx dr6: %016llx dr7: %016llx\n",
111 kprintf(
"rip: %04x:%016llx rsp: %04x:%016llx\n",
113 kprintf(
"rflags: %016llx ds: %04x es: %04x fs: %04x gs: %04x\n",
115 kprintf(
"rax: %016llx rbx: %016llx rcx: %016llx\n",
117 kprintf(
"rdx: %016llx rsi: %016llx rdi: %016llx\n",
119 kprintf(
"rbp: %016llx r8: %016llx r9: %016llx\n",
121 kprintf(
"r10: %016llx r11: %016llx r12: %016llx\n",
123 kprintf(
"r13: %016llx r14: %016llx r15: %016llx\n",
140 kprintf(
"Invalid CPU number\n");
149 kprintf(
"%-16s %-16s\n",
"IP Pointer",
"Base Pointer");
151 kprintf(
"%016llx %016llx\n", rip, rbp);
153 if (rbp == 0ULL || rip == 0ULL) {
188 kprintf(
"No more breakpoints left!\n");
203 switch (argv[1][0]) {
217 kprintf(
"Specify a breakpoint between 0-3\n");
void Debug_HaltIPI(TrapFrame *tf)
TrapFrame * frames[MAX_CPUS]
static void Debug_ClearBreakpoint(int argc, const char *argv[])
void Debug_Breakpoint(TrapFrame *tf)
static volatile uint64_t debugCmd
static volatile uint64_t debugLock
static void Debug_Registers(int argc, const char *argv[])
static void Debug_SetBreakpoint(int argc, const char *argv[])
static void Debug_Backtrace(int argc, const char *argv[])
static void Debug_Reboot(int argc, const char *argv[])
static void Debug_ListBreakpoints(int argc, const char *argv[])
static volatile uint64_t debugHalted
void MP_SetState(int state)
static INLINE uint64_t read_dr1()
static INLINE void write_dr0(uint64_t val)
static INLINE uint16_t read_es()
static INLINE uint16_t read_ds()
static INLINE uint64_t read_cr2()
static INLINE void write_dr1(uint64_t val)
static INLINE uint16_t read_fs()
static INLINE void write_cr3(uint64_t val)
static INLINE uint64_t read_cr3()
static INLINE uint64_t read_dr3()
static INLINE void write_dr7(uint64_t val)
static INLINE uint64_t read_dr7()
static INLINE void write_dr2(uint64_t val)
static INLINE uint64_t read_dr6()
static INLINE void pause()
static INLINE uint16_t read_gs()
static INLINE void write_dr3(uint64_t val)
static INLINE uint64_t read_cr4()
static INLINE uint64_t read_cr0()
static INLINE uint64_t read_dr0()
static INLINE uint64_t read_dr2()
static INLINE uint64_t atomic_swap_uint64(volatile uint64_t *dst, uint64_t newval)
static void atomic_set_uint64(volatile uint64_t *dst, uint64_t newval)
int kprintf(const char *fmt,...)
uint64_t Debug_StrToInt(const char *s)
#define REGISTER_DBGCMD(_NAME, _DESC, _FUNC)
int LAPIC_BroadcastNMI(int vector)