diff --git a/src/Debug.cpp b/src/Debug.cpp index 6fed818..4472b27 100644 --- a/src/Debug.cpp +++ b/src/Debug.cpp @@ -64,21 +64,11 @@ std::string Debug::receive_packet() { } else if (nbytes == 1) { return std::string("+"); } else { - // 1) find $ - // 2) find # - // 3) assert that two chars follow # - char *start = strchr(iobuf, '$'); char *end = strchr(iobuf, '#'); std::string message(start + 1, end - (start + 1)); - { - //std::string local_checksum = compute_checksum_string(message); - //std::string recv_checksum(end + 1, 2); - //assert(local_checksum == recv_checksum); - } - return message; } } @@ -91,7 +81,6 @@ void Debug::handle_gdb_loop() { while (true) { std::string msg = receive_packet(); -// std::cout << "msg: " << msg << std::endl; if (msg.size() == 0) { std::cout << "remote connection seems to be closed, terminating ..." << std::endl; @@ -99,40 +88,28 @@ void Debug::handle_gdb_loop() { } else if (msg == "+") { // NOTE: just ignore this message, nothing to do in this case } else if (boost::starts_with(msg, "qSupported")) { - printf("qSupported\n"); - send_packet(conn, "PacketSize=1024;swbreak-;hwbreak+;vContSupported+"); + send_packet(conn, "PacketSize=256;swbreak+;hwbreak+;vContSupported+;multiprocess-"); } else if (msg == "vMustReplyEmpty") { - printf("vMustReplyEmpty\n"); send_packet(conn, ""); } else if (msg == "Hg0") { - printf("Hq0\n"); send_packet(conn, "OK"); } else if (msg == "Hc0") { - printf("Hc0\n"); send_packet(conn, ""); } else if (msg == "qTStatus") { - printf("qTStatus\n"); send_packet(conn, ""); } else if (msg == "?") { - printf("?\n"); send_packet(conn, "S05"); } else if (msg == "qfThreadInfo") { - printf("qThreadInfo\n"); send_packet(conn, ""); } else if (boost::starts_with(msg, "qL")) { - printf("qL\n"); send_packet(conn, ""); } else if (msg == "Hc-1") { - printf("Hc-1\n"); send_packet(conn, "OK"); } else if (msg == "qC") { - printf("qC\n"); send_packet(conn, "-1"); } else if (msg == "qAttached") { - printf("qAttached\n"); send_packet(conn, "0"); // 0 process started, 1 attached to process } else if (msg == "g") { -// std::cout << msg << '\n'; std::stringstream stream; stream << std::setfill('0') << std::hex; @@ -141,9 +118,7 @@ void Debug::handle_gdb_loop() { } send_packet(conn, stream.str()); } else if (boost::starts_with(msg, "p")) { - std::cout << "P : " << msg << std::endl; long n = strtol(msg.c_str() + 1, 0, 16); - int reg_value; if (n < 32) { reg_value = register_bank->getValue(n); @@ -159,22 +134,15 @@ void Debug::handle_gdb_loop() { stream << std::setw(8) << htonl(reg_value); send_packet(conn, stream.str()); } else if (boost::starts_with(msg, "P")) { - printf("P\n"); char * pEnd; long reg = strtol(msg.c_str() + 1, &pEnd, 16); - std::cout << "n: " << reg; int val = strtol(pEnd + 1, 0, 16); - std::cout << "= " << val << std::endl; register_bank->setValue(reg + 1, val); send_packet(conn, "OK"); } else if (boost::starts_with(msg, "m")) { - printf("m\n"); - char * pEnd; long addr = strtol(msg.c_str() + 1, &pEnd, 16);; int len = strtol(pEnd + 1, &pEnd, 16); - std::cout << "msg m: " << msg << std::endl; - std::cout << std::hex << "addr: " << addr << " , " << len << std::endl; dbg_trans.set_data_ptr(pyld_array); dbg_trans.set_command(tlm::TLM_READ_COMMAND); @@ -191,44 +159,20 @@ void Debug::handle_gdb_loop() { send_packet(conn, stream.str()); } else if (boost::starts_with(msg, "M")) { - printf("M\n"); - //memory_access_t m = parse_memory_access(msg); - //std::string data = msg.substr(msg.find(":") + 1); - //write_memory(m.start, m.nbytes, data); + printf("M TBD\n"); send_packet(conn, "OK"); } else if (boost::starts_with(msg, "X")) { - printf("X\n"); - send_packet(conn, ""); // binary data unsupported, gdb will send - // text based message M + send_packet(conn, ""); // binary data unsupported } else if (msg == "qOffsets") { - printf("qOffsets\n"); - // NOTE: seems to be additional offsets wrt. the exec. elf file send_packet(conn, "Text=0;Data=0;Bss=0"); } else if (msg == "qSymbol::") { - printf("qSymbol\n"); send_packet(conn, "OK"); } else if (msg == "vCont?") { - printf("vCont?\n"); send_packet(conn, "vCont;cs"); } else if (msg == "c") { - printf("c\n"); - //try { - // core.run(); - //if (core.status == CoreExecStatus::HitBreakpoint) { - // send_packet(conn, "S05"); - // core.status = CoreExecStatus::Runnable; - //} else if (core.status == CoreExecStatus::Terminated) { - //send_packet(conn, "S03"); - //} else { - // assert(false && "invalid core status (apparently still marked as runnable)"); - //} - //} catch (std::exception &e) { - // send_packet(conn, "S04"); - //} bool breakpoint_hit = false; bool bkpt = false; do { -// std::cout << "PC: " << std::hex << register_bank->getPC() << std::endl; bkpt = dbg_cpu->CPU_step(); uint32_t currentPC = register_bank->getPC(); @@ -239,13 +183,10 @@ void Debug::handle_gdb_loop() { } while ((breakpoint_hit == false) && (bkpt == false)); std::cout << "Breakpoint hit at 0x" << std::hex << register_bank->getPC() << std::endl; - - //send_packet(conn, "S05"); - send_packet(conn, "S03"); + send_packet(conn, "S05"); } else if (msg == "s") { - printf("s\n"); - bool breakpoint; + bool breakpoint; dbg_cpu->CPU_step(); uint32_t currentPC = register_bank->getPC(); @@ -263,24 +204,27 @@ void Debug::handle_gdb_loop() { } } else if (boost::starts_with(msg, "vKill")) { - printf("vKill\n"); send_packet(conn, "OK"); break; } else if (boost::starts_with(msg, "Z1")) { char * pEnd; long addr = strtol(msg.c_str() + 3, &pEnd, 16);; - std::cout << "msg m: " << msg << std::endl; breakpoints.insert(addr); - std::cout << "Breakpoint set to addres 0x"<< std::hex << addr << std::endl; + std::cout << "Breakpoint set to address 0x"<< std::hex << addr << std::endl; send_packet(conn, "OK"); } else if (boost::starts_with(msg, "z1")) { + char * pEnd; + long addr = strtol(msg.c_str() + 3, &pEnd, 16);; + breakpoints.erase(addr); send_packet(conn, "OK"); } else if (boost::starts_with(msg, "z0")) { - + char * pEnd; + long addr = strtol(msg.c_str() + 3, &pEnd, 16);; + breakpoints.erase(addr); + send_packet(conn, ""); } else if (boost::starts_with(msg, "Z0")) { char * pEnd; long addr = strtol(msg.c_str() + 3, &pEnd, 16);; - std::cout << "msg m: " << msg << std::endl; breakpoints.insert(addr); std::cout << "Breakpoint set to address 0x"<< std::hex << addr << std::endl; send_packet(conn, "OK");