[llvm-branch-commits] [lldb] r270132 - Use Process Plugin register indices when communicating with remote

Francis Ricci via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu May 19 14:03:41 PDT 2016


Author: fjricci
Date: Thu May 19 16:03:40 2016
New Revision: 270132

URL: http://llvm.org/viewvc/llvm-project?rev=270132&view=rev
Log:
Use Process Plugin register indices when communicating with remote

Summary:
eRegisterKindProcessPlugin is used to store the register
indices used by the remote, and eRegisterKindLLDB is used
to store the internal lldb register indices. However, we're currently
using the lldb indices instead of the process plugin indices
when sending p/P packets. This will break if the remote uses
non-contiguous register indices.

Reviewers: jasonmolenda, clayborg

Subscribers: lldb-commits, sas

Differential Revision: http://reviews.llvm.org/D19305

This is a cherry-pick of r267466

Modified:
    lldb/branches/release_38/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
    lldb/branches/release_38/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp

Modified: lldb/branches/release_38/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/release_38/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h?rev=270132&r1=270131&r2=270132&view=diff
==============================================================================
--- lldb/branches/release_38/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h (original)
+++ lldb/branches/release_38/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h Thu May 19 16:03:40 2016
@@ -527,7 +527,7 @@ public:
 
     bool
     ReadRegister(lldb::tid_t tid,
-                 uint32_t reg_num,
+                 uint32_t reg_num,   // Must be the eRegisterKindProcessPlugin register number, to be sent to the remote
                  StringExtractorGDBRemote &response);
 
     bool

Modified: lldb/branches/release_38/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/release_38/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp?rev=270132&r1=270131&r2=270132&view=diff
==============================================================================
--- lldb/branches/release_38/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp (original)
+++ lldb/branches/release_38/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp Thu May 19 16:03:40 2016
@@ -198,10 +198,11 @@ bool
 GDBRemoteRegisterContext::GetPrimordialRegister(const RegisterInfo *reg_info,
                                                 GDBRemoteCommunicationClient &gdb_comm)
 {
-    const uint32_t reg = reg_info->kinds[eRegisterKindLLDB];
+    const uint32_t lldb_reg = reg_info->kinds[eRegisterKindLLDB];
+    const uint32_t remote_reg = reg_info->kinds[eRegisterKindProcessPlugin];
     StringExtractorGDBRemote response;
-    if (gdb_comm.ReadRegister(m_thread.GetProtocolID(), reg, response))
-        return PrivateSetRegisterValue (reg, response);
+    if (gdb_comm.ReadRegister(m_thread.GetProtocolID(), remote_reg, response))
+        return PrivateSetRegisterValue (lldb_reg, response);
     return false;
 }
 
@@ -316,7 +317,7 @@ GDBRemoteRegisterContext::SetPrimordialR
     StreamString packet;
     StringExtractorGDBRemote response;
     const uint32_t reg = reg_info->kinds[eRegisterKindLLDB];
-    packet.Printf ("P%x=", reg);
+    packet.Printf ("P%x=", reg_info->kinds[eRegisterKindProcessPlugin]);
     packet.PutBytesAsRawHex8 (m_reg_data.PeekData(reg_info->byte_offset, reg_info->byte_size),
                               reg_info->byte_size,
                               endian::InlHostByteOrder(),
@@ -813,7 +814,7 @@ GDBRemoteRegisterContext::WriteAllRegist
                             if (restore_src)
                             {
                                 StreamString packet;
-                                packet.Printf ("P%x=", reg);
+                                packet.Printf ("P%x=", reg_info->kinds[eRegisterKindProcessPlugin]);
                                 packet.PutBytesAsRawHex8 (restore_src,
                                                           reg_byte_size,
                                                           endian::InlHostByteOrder(),
@@ -836,7 +837,7 @@ GDBRemoteRegisterContext::WriteAllRegist
                                 if (write_reg)
                                 {
                                     StreamString packet;
-                                    packet.Printf ("P%x=", reg);
+                                    packet.Printf ("P%x=", reg_info->kinds[eRegisterKindProcessPlugin]);
                                     packet.PutBytesAsRawHex8 (restore_src,
                                                               reg_byte_size,
                                                               endian::InlHostByteOrder(),
@@ -894,7 +895,7 @@ GDBRemoteRegisterContext::WriteAllRegist
                         continue;
                     }
                     StreamString packet;
-                    packet.Printf ("P%x=", reg_info->kinds[eRegisterKindLLDB]);
+                    packet.Printf ("P%x=", reg_info->kinds[eRegisterKindProcessPlugin]);
                     packet.PutBytesAsRawHex8 (data_sp->GetBytes() + reg_info->byte_offset, reg_info->byte_size, endian::InlHostByteOrder(), endian::InlHostByteOrder());
                     if (thread_suffix_supported)
                         packet.Printf (";thread:%4.4" PRIx64 ";", m_thread.GetProtocolID());




More information about the llvm-branch-commits mailing list