void gdb_send_stop_reason(uint8_t reason) { size_t rlen; uint32_t s_rip; uint64_t mode = (uint64_t)cpu_addr_sz(); if(mode == 64) { s_rip = 0x3a36313b; rlen = sizeof(uint64_t)*2; } else /* XXX: gdb seems to wait for 32 bits regs at least */ { s_rip = 0x3a38303b; rlen = sizeof(uint32_t)*2; } gdb_add_str("T", 1); gdb_add_byte(reason); gdb_add_str("md:", 3); gdb_add_number(mode, 2, 0); gdb_add_str(";04:", 4); gdb_add_number(info->vm.cpu.gpr->rsp.raw, rlen, 1); gdb_add_str(";05:", 4); gdb_add_number(info->vm.cpu.gpr->rbp.raw, rlen, 1); gdb_add_str((char*)&s_rip, 4); gdb_add_number(__rip.raw, rlen, 1); gdb_add_str(";", 1); gdb_send_packet(); }
/* ** Query packets */ static void gdb_query_thread() { debug(GDBSTUB_CMD, "query thread 0\n"); gdb_add_str("QC0", 3); gdb_send_packet(); }