diff options
-rw-r--r-- | lldb/test/API/tools/lldb-server/register-reading/TestGdbRemoteGPacket.py | 33 | ||||
-rw-r--r-- | lldb/tools/debugserver/source/RNBRemote.cpp | 95 | ||||
-rw-r--r-- | lldb/tools/debugserver/source/RNBRemote.h | 4 |
3 files changed, 0 insertions, 132 deletions
diff --git a/lldb/test/API/tools/lldb-server/register-reading/TestGdbRemoteGPacket.py b/lldb/test/API/tools/lldb-server/register-reading/TestGdbRemoteGPacket.py index 5bae98d..4c2d23f 100644 --- a/lldb/test/API/tools/lldb-server/register-reading/TestGdbRemoteGPacket.py +++ b/lldb/test/API/tools/lldb-server/register-reading/TestGdbRemoteGPacket.py @@ -25,39 +25,6 @@ def _extract_register_value(reg_info, reg_bank, byte_order, bytes_per_entry=8): class TestGdbRemoteGPacket(gdbremote_testcase.GdbRemoteTestCaseBase): - @skipUnlessDarwin # G packet not supported - def test_g_packet(self): - self.build() - self.prep_debug_monitor_and_inferior() - self.test_sequence.add_log_lines( - [ - "read packet: $g#67", - { - "direction": "send", - "regex": r"^\$(.+)#[0-9a-fA-F]{2}$", - "capture": {1: "register_bank"}, - }, - ], - True, - ) - context = self.expect_gdbremote_sequence() - register_bank = context.get("register_bank") - self.assertNotEqual(register_bank[0], "E") - - self.test_sequence.add_log_lines( - [ - "read packet: $G" + register_bank + "#00", - { - "direction": "send", - "regex": r"^\$(.+)#[0-9a-fA-F]{2}$", - "capture": {1: "G_reply"}, - }, - ], - True, - ) - context = self.expect_gdbremote_sequence() - self.assertNotEqual(context.get("G_reply")[0], "E") - @skipIf(archs=no_match(["x86_64"])) def g_returns_correct_data(self, with_suffix): procs = self.prep_debug_monitor_and_inferior() diff --git a/lldb/tools/debugserver/source/RNBRemote.cpp b/lldb/tools/debugserver/source/RNBRemote.cpp index c225ac1..eb7c5ca 100644 --- a/lldb/tools/debugserver/source/RNBRemote.cpp +++ b/lldb/tools/debugserver/source/RNBRemote.cpp @@ -243,14 +243,10 @@ void RNBRemote::CreatePacketTable() { "Read memory")); t.push_back(Packet(read_register, &RNBRemote::HandlePacket_p, NULL, "p", "Read one register")); - t.push_back(Packet(read_general_regs, &RNBRemote::HandlePacket_g, NULL, "g", - "Read registers")); t.push_back(Packet(write_memory, &RNBRemote::HandlePacket_M, NULL, "M", "Write memory")); t.push_back(Packet(write_register, &RNBRemote::HandlePacket_P, NULL, "P", "Write one register")); - t.push_back(Packet(write_general_regs, &RNBRemote::HandlePacket_G, NULL, "G", - "Write registers")); t.push_back(Packet(insert_mem_bp, &RNBRemote::HandlePacket_z, NULL, "Z0", "Insert memory breakpoint")); t.push_back(Packet(remove_mem_bp, &RNBRemote::HandlePacket_z, NULL, "z0", @@ -3288,97 +3284,6 @@ rnb_err_t RNBRemote::HandlePacket_X(const char *p) { return SendPacket("OK"); } -/* 'g' -- read registers - Get the contents of the registers for the current thread, - send them to gdb. - Should the setting of the Hg packet determine which thread's registers - are returned? */ - -rnb_err_t RNBRemote::HandlePacket_g(const char *p) { - std::ostringstream ostrm; - if (!m_ctx.HasValidProcessID()) { - return SendErrorPacket("E11"); - } - - if (g_num_reg_entries == 0) - InitializeRegisters(); - - nub_process_t pid = m_ctx.ProcessID(); - nub_thread_t tid = ExtractThreadIDFromThreadSuffix(p + 1); - if (tid == INVALID_NUB_THREAD) - return HandlePacket_ILLFORMED(__FILE__, __LINE__, p, - "No thread specified in p packet"); - - // Get the register context size first by calling with NULL buffer - nub_size_t reg_ctx_size = DNBThreadGetRegisterContext(pid, tid, NULL, 0); - if (reg_ctx_size) { - // Now allocate enough space for the entire register context - std::vector<uint8_t> reg_ctx; - reg_ctx.resize(reg_ctx_size); - // Now read the register context - reg_ctx_size = - DNBThreadGetRegisterContext(pid, tid, ®_ctx[0], reg_ctx.size()); - if (reg_ctx_size) { - append_hex_value(ostrm, reg_ctx.data(), reg_ctx.size(), false); - return SendPacket(ostrm.str()); - } - } - return SendErrorPacket("E74"); -} - -/* 'G XXX...' -- write registers - How is the thread for these specified, beyond "the current thread"? - Does gdb actually use the Hg packet to set this? */ - -rnb_err_t RNBRemote::HandlePacket_G(const char *p) { - if (!m_ctx.HasValidProcessID()) { - return SendErrorPacket("E11"); - } - - if (g_num_reg_entries == 0) - InitializeRegisters(); - - p += 1; // Skip the 'G' - - nub_process_t pid = m_ctx.ProcessID(); - nub_thread_t tid = ExtractThreadIDFromThreadSuffix(p); - if (tid == INVALID_NUB_THREAD) - return HandlePacket_ILLFORMED(__FILE__, __LINE__, p, - "No thread specified in p packet"); - // Skip the thread specification in `G;thread:3488ea;[..data...]` - const char *last_semi = strrchr(p, ';'); - if (last_semi) - p = last_semi + 1; - - StdStringExtractor packet(p); - - // Get the register context size first by calling with NULL buffer - nub_size_t reg_ctx_size = DNBThreadGetRegisterContext(pid, tid, NULL, 0); - if (reg_ctx_size) { - // Now allocate enough space for the entire register context - std::vector<uint8_t> reg_ctx; - reg_ctx.resize(reg_ctx_size); - - const nub_size_t bytes_extracted = - packet.GetHexBytes(®_ctx[0], reg_ctx.size(), 0xcc); - if (bytes_extracted == reg_ctx.size()) { - // Now write the register context - reg_ctx_size = - DNBThreadSetRegisterContext(pid, tid, reg_ctx.data(), reg_ctx.size()); - if (reg_ctx_size == reg_ctx.size()) - return SendPacket("OK"); - else - return SendErrorPacket("E55"); - } else { - DNBLogError("RNBRemote::HandlePacket_G(%s): extracted %llu of %llu " - "bytes, size mismatch\n", - p, (uint64_t)bytes_extracted, (uint64_t)reg_ctx_size); - return SendErrorPacket("E64"); - } - } - return SendErrorPacket("E65"); -} - static bool RNBRemoteShouldCancelCallback(void *not_used) { RNBRemoteSP remoteSP(g_remoteSP); if (remoteSP.get() != NULL) { diff --git a/lldb/tools/debugserver/source/RNBRemote.h b/lldb/tools/debugserver/source/RNBRemote.h index a95bece..c552713 100644 --- a/lldb/tools/debugserver/source/RNBRemote.h +++ b/lldb/tools/debugserver/source/RNBRemote.h @@ -46,8 +46,6 @@ public: cont, // 'c' continue_with_sig, // 'C' detach, // 'D' - read_general_regs, // 'g' - write_general_regs, // 'G' set_thread, // 'H' step_inferior_one_cycle, // 'i' signal_and_step_inf_one_cycle, // 'I' @@ -221,8 +219,6 @@ public: rnb_err_t HandlePacket_M(const char *p); rnb_err_t HandlePacket_x(const char *p); rnb_err_t HandlePacket_X(const char *p); - rnb_err_t HandlePacket_g(const char *p); - rnb_err_t HandlePacket_G(const char *p); rnb_err_t HandlePacket_z(const char *p); rnb_err_t HandlePacket_T(const char *p); rnb_err_t HandlePacket_p(const char *p); |