1 // FIXME Re-design needed!!
3 #include <hal/serial.h>
4 #include <klibc/strfmt.h>
5 #include <lunaix/syslog.h>
6 #include <sdbg/gdbstub.h>
7 #include <sdbg/lsdbg.h>
8 #include <sdbg/protocol.h>
10 #include <lunaix/isrm.h>
12 // #define USE_LSDBG_BACKEND
16 volatile int debug_mode = 0;
19 #define DBG_START 0x636d6340UL
22 #define DBG_END 0x79617940UL
25 sdbg_serial_callback(struct serial_dev* sdev)
27 u32_t dbg_sig = *(u32_t*)sdev->rw.buf;
29 if (dbg_sig == DBG_START) {
31 } else if (dbg_sig == DBG_END) {
35 // Debugger should be run later
36 // TODO implement a defer execution mechanism (i.e., soft interrupt)
42 sdbg_imm(const isr_param* param)
44 struct exec_param* execp = param->execp;
45 DEBUG("Quick debug mode\n");
46 DEBUG("cs=%p eip=%p eax=%p ebx=%p\n",
50 param->registers.ebx);
51 DEBUG("ecx=%p edx=%p edi=%p esi=%p\n",
55 param->registers.esi);
56 DEBUG("u.esp=%p k.esp=%p ebp=%p ps=%p\n",
61 DEBUG("ss=%p ds=%p es=%p fs=%p gs=%p\n",
74 __sdbg_breakpoint(const isr_param* param)
82 struct serial_dev* sdev = serial_get_avilable();
85 ERROR("no serial port available\n");
89 kprintf("listening: %s\n", sdev->dev->name.value);
91 serial_rwbuf_async(sdev, buf, 4, sdbg_serial_callback, SERIAL_RW_RX);