#include <hal/acpi/acpi.h>
#include <hal/ioapic.h>
#include <klibc/stdio.h>
+#include <lunaix/isrm.h>
#include <lunaix/lxconsole.h>
#include <lunaix/peripheral/serial.h>
#include <lunaix/syslog.h>
// #define USE_LSDBG_BACKEND
+LOG_MODULE("SDBG")
+
volatile int debug_mode = 0;
void
serial_enable_irq(SERIAL_COM1);
}
-extern uint8_t
-ioapic_get_irq(acpi_context* acpi_ctx, uint8_t old_irq);
-
+void
+sdbg_imm(const isr_param* param)
+{
+ kprintf(KDEBUG "Quick debug mode\n");
+ kprintf(KDEBUG "cs=%p eip=%p eax=%p ebx=%p\n",
+ param->cs,
+ param->eip,
+ param->registers.eax,
+ param->registers.ebx);
+ kprintf(KDEBUG "ecx=%p edx=%p edi=%p esi=%p\n",
+ param->registers.ecx,
+ param->registers.edx,
+ param->registers.edi,
+ param->registers.esi);
+ kprintf(KDEBUG "u.esp=%p k.esp=%p ebp=%p ps=%p\n",
+ param->registers.esp,
+ param->esp,
+ param->registers.ebp,
+ param->eflags);
+ kprintf(KDEBUG "ss=%p ds=%p es=%p fs=%p gs=%p\n",
+ param->ss,
+ param->registers.ds,
+ param->registers.es,
+ param->registers.fs,
+ param->registers.gs);
+ console_flush();
+ while (1)
+ ;
+}
void
sdbg_init()
{
- intr_subscribe(UART_COM1, sdbg_loop);
- intr_subscribe(INSTR_DEBUG, sdbg_loop); // #DB
+ isrm_bindiv(INSTR_DEBUG, sdbg_loop); // #DB
+ isrm_bindiv(INSTR_BREAK, sdbg_loop); // #BRK
- acpi_context* acpi_ctx = acpi_get_context();
- uint8_t irq = ioapic_get_irq(acpi_ctx, COM1_IRQ);
- ioapic_redirect(irq, UART_COM1, 0, IOAPIC_DELMOD_FIXED);
+ isrm_bindirq(COM1_IRQ, sdbg_loop);
}
\ No newline at end of file