fjricci created this revision.
fjricci added reviewers: jasonmolenda, clayborg.
fjricci added subscribers: sas, lldb-commits.

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.

http://reviews.llvm.org/D19305

Files:
  source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp

Index: source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
===================================================================
--- source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
+++ source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
@@ -198,10 +198,11 @@
 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 @@
     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 @@
                             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 @@
                                 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 @@
                         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());


Index: source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
===================================================================
--- source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
+++ source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
@@ -198,10 +198,11 @@
 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 @@
     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 @@
                             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 @@
                                 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 @@
                         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());
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to