5#include <sys/kconfig.h>
6#include <sys/kassert.h>
10#include <sys/spinlock.h>
12#include <sys/syscall.h>
15#include <machine/amd64.h>
16#include <machine/lapic.h>
17#include <machine/trap.h>
18#include <machine/mp.h>
20#include <sys/thread.h>
37 kprintf(
"Initializing IDT... ");
39 for (i = 0; i <
T_MAX; i++) {
51 for (; i < 256; i++) {
81 for (i = 0; i < 256; i++) {
98 kprintf(
"Interrupt %d Error Code: %016llx\n",
100 kprintf(
"cr0: %016llx cr2: %016llx\n",
102 kprintf(
"cr3: %016llx cr4: %016llx\n",
104 kprintf(
"dr0: %016llx dr1: %016llx dr2: %016llx\n",
106 kprintf(
"dr3: %016llx dr6: %016llx dr7: %016llx\n",
108 kprintf(
"rip: %04x:%016llx rsp: %04x:%016llx\n",
110 kprintf(
"rflags: %016llx ds: %04x es: %04x fs: %04x gs: %04x\n",
112 kprintf(
"rax: %016llx rbx: %016llx rcx: %016llx\n",
114 kprintf(
"rdx: %016llx rsi: %016llx rdi: %016llx\n",
116 kprintf(
"rbp: %016llx r8: %016llx r9: %016llx\n",
118 kprintf(
"r10: %016llx r11: %016llx r12: %016llx\n",
120 kprintf(
"r13: %016llx r14: %016llx r15: %016llx\n",
131 for (rsp = tf->
rsp; (rsp & 0xFFF) != 0; rsp += 8) {
133 kprintf(
"%016llx: %016llx\n", rsp, *data);
173 kprintf(
"Faulted in copy_unsafe\n");
182 kprintf(
"Faulted in copystr_unsafe\n");
208 kprintf(
"Userlevel breakpoint\n");
255 kprintf(
"Spurious Interrupt!\n");
282 kprintf(
"Trap Interrupts Trap Interrupts\n");
283 for (i = 0; i <
T_MAX / 2; i++)
285 kprintf(
"%-4d %-12d %-4d %-12d\n",
static INLINE uint64_t read_dr1()
static INLINE uint16_t read_es()
static INLINE uint16_t read_ds()
static INLINE uint64_t read_cr2()
static INLINE uint16_t read_fs()
static INLINE uint64_t read_cr3()
static INLINE uint64_t read_dr3()
static INLINE uint64_t read_dr7()
static INLINE uint64_t read_dr6()
static INLINE uint16_t read_gs()
static INLINE uint64_t read_cr4()
static INLINE void lidt(PseudoDescriptor *idt)
static INLINE uint64_t read_cr0()
static INLINE uint64_t read_dr0()
static INLINE uint64_t read_dr2()
void IRQ_Handler(int irq)
#define VLOG(_module, _format,...)
int kprintf(const char *fmt,...)
#define REGISTER_DBGCMD(_NAME, _DESC, _FUNC)
uint64_t Syscall_Entry(uint64_t syscall, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5)
void copy_unsafe_done(void)
int copystr_unsafe(void *to, void *from, uintptr_t len)
static uint64_t intStats[256]
void trap_entry(TrapFrame *tf)
void copy_unsafe_fault(void)
void Debug_HaltIPI(TrapFrame *tf)
int copy_unsafe(void *to, void *from, uintptr_t len)
void Trap_StackDump(TrapFrame *tf)
static InteruptGate64 idt[256]
void Debug_Breakpoint(TrapFrame *tf)
void trap_pop(TrapFrame *tf)
void copystr_unsafe_done(void)
void Trap_Dump(TrapFrame *tf)
static void Debug_Traps(int argc, const char *argv[])
void copystr_unsafe_fault(void)
static PseudoDescriptor idtdesc
uint64_t trap_table[T_MAX]
int syscall(int number,...)