[Lldb-commits] [lldb] r280088 - Revert "gdb-remote: Make the sequence mutex non-recursive"

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Tue Aug 30 06:56:12 PDT 2016


Author: labath
Date: Tue Aug 30 08:56:11 2016
New Revision: 280088

URL: http://llvm.org/viewvc/llvm-project?rev=280088&view=rev
Log:
Revert "gdb-remote: Make the sequence mutex non-recursive"

This reverts commit r279725 as it breaks "dynamic register size" feature of mips.

Modified:
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.h
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h
    lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
    lldb/trunk/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp?rev=280088&r1=280087&r2=280088&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp Tue Aug 30 08:56:11 2016
@@ -208,14 +208,12 @@ GDBRemoteClientBase::SendPacketAndWaitFo
         return PacketResult::ErrorSendFailed;
     }
 
-    return SendPacketAndWaitForResponse(payload, response, lock);
+    return SendPacketAndWaitForResponseNoLock(payload, response);
 }
 
 GDBRemoteCommunication::PacketResult
-GDBRemoteClientBase::SendPacketAndWaitForResponse(llvm::StringRef payload, StringExtractorGDBRemote &response,
-                                                  const Lock &lock)
+GDBRemoteClientBase::SendPacketAndWaitForResponseNoLock(llvm::StringRef payload, StringExtractorGDBRemote &response)
 {
-    assert(lock);
     PacketResult packet_result = SendPacketNoLock(payload);
     if (packet_result != PacketResult::Success)
         return packet_result;

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.h?rev=280088&r1=280087&r2=280088&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.h (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.h Tue Aug 30 08:56:11 2016
@@ -73,7 +73,7 @@ public:
         Lock(GDBRemoteClientBase &comm, bool interrupt);
         ~Lock();
 
-        explicit operator bool() const { return m_acquired; }
+        explicit operator bool() { return m_acquired; }
 
         // Whether we had to interrupt the continue thread to acquire the connection.
         bool
@@ -83,7 +83,7 @@ public:
         }
 
     private:
-        std::unique_lock<std::mutex> m_async_lock;
+        std::unique_lock<std::recursive_mutex> m_async_lock;
         GDBRemoteClientBase &m_comm;
         bool m_acquired;
         bool m_did_interrupt;
@@ -94,7 +94,7 @@ public:
 
 protected:
     PacketResult
-    SendPacketAndWaitForResponse(llvm::StringRef payload, StringExtractorGDBRemote &response, const Lock &lock);
+    SendPacketAndWaitForResponseNoLock(llvm::StringRef payload, StringExtractorGDBRemote &response);
 
     virtual void
     OnRunPacketSent(bool first);
@@ -126,7 +126,7 @@ private:
 
     // This handles the synchronization between individual async threads. For now they just use a
     // simple mutex.
-    std::mutex m_async_mutex;
+    std::recursive_mutex m_async_mutex;
 
     bool
     ShouldStop(const UnixSignals &signals, StringExtractorGDBRemote &response);

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp?rev=280088&r1=280087&r2=280088&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp Tue Aug 30 08:56:11 2016
@@ -518,27 +518,21 @@ GDBRemoteCommunicationClient::GetRemoteQ
     }
 }
 
-void
-GDBRemoteCommunicationClient::ComputeThreadSuffixSupport()
+bool
+GDBRemoteCommunicationClient::GetThreadSuffixSupported ()
 {
-    if (m_supports_thread_suffix != eLazyBoolCalculate)
-        return;
-
-    StringExtractorGDBRemote response;
-    m_supports_thread_suffix = eLazyBoolNo;
-    if (SendPacketAndWaitForResponse("QThreadSuffixSupported", response, false) == PacketResult::Success)
+    if (m_supports_thread_suffix == eLazyBoolCalculate)
     {
-        if (response.IsOKResponse())
-            m_supports_thread_suffix = eLazyBoolYes;
+        StringExtractorGDBRemote response;
+        m_supports_thread_suffix = eLazyBoolNo;
+        if (SendPacketAndWaitForResponse("QThreadSuffixSupported", response, false) == PacketResult::Success)
+        {
+            if (response.IsOKResponse())
+                m_supports_thread_suffix = eLazyBoolYes;
+        }
     }
+    return m_supports_thread_suffix;
 }
-
-bool
-GDBRemoteCommunicationClient::GetThreadSuffixSupported()
-{
-    return m_supports_thread_suffix == eLazyBoolYes;
-}
-
 bool
 GDBRemoteCommunicationClient::GetVContSupported (char flavor)
 {
@@ -600,17 +594,26 @@ GDBRemoteCommunicationClient::GetVContSu
 GDBRemoteCommunication::PacketResult
 GDBRemoteCommunicationClient::SendThreadSpecificPacketAndWaitForResponse(lldb::tid_t tid, StreamString &&payload,
                                                                          StringExtractorGDBRemote &response,
-                                                                         const Lock &lock)
+                                                                         bool send_async)
 {
+    Lock lock(*this, send_async);
+    if (!lock)
+    {
+        if (Log *log = ProcessGDBRemoteLog::GetLogIfAnyCategoryIsSet(GDBR_LOG_PROCESS | GDBR_LOG_PACKETS))
+            log->Printf("GDBRemoteCommunicationClient::%s: Didn't get sequence mutex for %s packet.", __FUNCTION__,
+                        payload.GetString().c_str());
+        return PacketResult::ErrorNoSequenceLock;
+    }
+
     if (GetThreadSuffixSupported())
         payload.Printf(";thread:%4.4" PRIx64 ";", tid);
     else
     {
-        if (!SetCurrentThread(tid, lock))
+        if (!SetCurrentThread(tid))
             return PacketResult::ErrorSendFailed;
     }
 
-    return SendPacketAndWaitForResponse(payload.GetString(), response, lock);
+    return SendPacketAndWaitForResponseNoLock(payload.GetString(), response);
 }
 
 // Check if the target supports 'p' packet. It sends out a 'p'
@@ -623,20 +626,11 @@ GDBRemoteCommunicationClient::GetpPacket
 {
     if (m_supports_p == eLazyBoolCalculate)
     {
-        Lock lock(*this, false);
-        if (!lock)
-        {
-            Log *log(ProcessGDBRemoteLog::GetLogIfAnyCategoryIsSet(GDBR_LOG_PROCESS | GDBR_LOG_PACKETS));
-            if (log)
-                log->Printf("GDBRemoteCommunicationClient::%s failed to get sequence mutex", __FUNCTION__);
-            return false;
-        }
-
         m_supports_p = eLazyBoolNo;
         StreamString payload;
         payload.PutCString("p0");
         StringExtractorGDBRemote response;
-        if (SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, lock) ==
+        if (SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, false) ==
                 PacketResult::Success &&
             response.IsNormalResponse())
         {
@@ -774,7 +768,7 @@ GDBRemoteCommunicationClient::SendPacket
         // Construct payload
         char sizeDescriptor[128];
         snprintf(sizeDescriptor, sizeof(sizeDescriptor), "%x,%x", offset, response_size);
-        PacketResult result = SendPacketAndWaitForResponse(payload_prefix_str + sizeDescriptor, this_response, lock);
+        PacketResult result = SendPacketAndWaitForResponseNoLock(payload_prefix_str + sizeDescriptor, this_response);
         if (result != PacketResult::Success)
             return result;
 
@@ -2769,7 +2763,7 @@ GDBRemoteCommunicationClient::KillSpawne
 }
 
 bool
-GDBRemoteCommunicationClient::SetCurrentThread(uint64_t tid, const Lock &lock)
+GDBRemoteCommunicationClient::SetCurrentThread (uint64_t tid)
 {
     if (m_curr_tid == tid)
         return true;
@@ -2782,7 +2776,7 @@ GDBRemoteCommunicationClient::SetCurrent
         packet_len = ::snprintf (packet, sizeof(packet), "Hg%" PRIx64, tid);
     assert (packet_len + 1 < (int)sizeof(packet));
     StringExtractorGDBRemote response;
-    if (SendPacketAndWaitForResponse(llvm::StringRef(packet, packet_len), response, lock) == PacketResult::Success)
+    if (SendPacketAndWaitForResponse(packet, packet_len, response, false) == PacketResult::Success)
     {
         if (response.IsOKResponse())
         {
@@ -2943,9 +2937,9 @@ GDBRemoteCommunicationClient::GetCurrent
         StringExtractorGDBRemote response;
         
         PacketResult packet_result;
-        for (packet_result = SendPacketAndWaitForResponse("qfThreadInfo", response, lock);
+        for (packet_result = SendPacketAndWaitForResponseNoLock("qfThreadInfo", response);
              packet_result == PacketResult::Success && response.IsNormalResponse();
-             packet_result = SendPacketAndWaitForResponse("qsThreadInfo", response, lock))
+             packet_result = SendPacketAndWaitForResponseNoLock("qsThreadInfo", response))
         {
             char ch = response.GetChar();
             if (ch == 'l')
@@ -3476,12 +3470,12 @@ GDBRemoteCommunicationClient::AvoidGPack
 }
 
 DataBufferSP
-GDBRemoteCommunicationClient::ReadRegister(lldb::tid_t tid, uint32_t reg, const Lock &lock)
+GDBRemoteCommunicationClient::ReadRegister(lldb::tid_t tid, uint32_t reg)
 {
     StreamString payload;
     payload.Printf("p%x", reg);
     StringExtractorGDBRemote response;
-    if (SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, lock) != PacketResult::Success ||
+    if (SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, false) != PacketResult::Success ||
         !response.IsNormalResponse())
         return nullptr;
 
@@ -3491,12 +3485,12 @@ GDBRemoteCommunicationClient::ReadRegist
 }
 
 DataBufferSP
-GDBRemoteCommunicationClient::ReadAllRegisters(lldb::tid_t tid, const Lock &lock)
+GDBRemoteCommunicationClient::ReadAllRegisters(lldb::tid_t tid)
 {
     StreamString payload;
     payload.PutChar('g');
     StringExtractorGDBRemote response;
-    if (SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, lock) != PacketResult::Success ||
+    if (SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, false) != PacketResult::Success ||
         !response.IsNormalResponse())
         return nullptr;
 
@@ -3506,26 +3500,25 @@ GDBRemoteCommunicationClient::ReadAllReg
 }
 
 bool
-GDBRemoteCommunicationClient::WriteRegister(lldb::tid_t tid, uint32_t reg_num, llvm::ArrayRef<uint8_t> data,
-                                            const Lock &lock)
+GDBRemoteCommunicationClient::WriteRegister(lldb::tid_t tid, uint32_t reg_num, llvm::ArrayRef<uint8_t> data)
 {
     StreamString payload;
     payload.Printf("P%x=", reg_num);
     payload.PutBytesAsRawHex8(data.data(), data.size(), endian::InlHostByteOrder(), endian::InlHostByteOrder());
     StringExtractorGDBRemote response;
-    return SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, lock) ==
+    return SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, false) ==
                PacketResult::Success &&
            response.IsOKResponse();
 }
 
 bool
-GDBRemoteCommunicationClient::WriteAllRegisters(lldb::tid_t tid, llvm::ArrayRef<uint8_t> data, const Lock &lock)
+GDBRemoteCommunicationClient::WriteAllRegisters(lldb::tid_t tid, llvm::ArrayRef<uint8_t> data)
 {
     StreamString payload;
     payload.PutChar('G');
     payload.PutBytesAsRawHex8(data.data(), data.size(), endian::InlHostByteOrder(), endian::InlHostByteOrder());
     StringExtractorGDBRemote response;
-    return SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, lock) ==
+    return SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, false) ==
                PacketResult::Success &&
            response.IsOKResponse();
 }
@@ -3536,21 +3529,12 @@ GDBRemoteCommunicationClient::SaveRegist
     save_id = 0; // Set to invalid save ID
     if (m_supports_QSaveRegisterState == eLazyBoolNo)
         return false;
-
-    Lock lock(*this, false);
-    if (!lock)
-    {
-        Log *log(ProcessGDBRemoteLog::GetLogIfAnyCategoryIsSet(GDBR_LOG_PROCESS | GDBR_LOG_PACKETS));
-        if (log)
-            log->Printf("GDBRemoteCommunicationClient::%s failed to get sequence mutex", __FUNCTION__);
-        return false;
-    }
-
+    
     m_supports_QSaveRegisterState = eLazyBoolYes;
     StreamString payload;
     payload.PutCString("QSaveRegisterState");
     StringExtractorGDBRemote response;
-    if (SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, lock) != PacketResult::Success)
+    if (SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, false) != PacketResult::Success)
         return false;
 
     if (response.IsUnsupportedResponse())
@@ -3573,19 +3557,10 @@ GDBRemoteCommunicationClient::RestoreReg
     if (m_supports_QSaveRegisterState == eLazyBoolNo)
         return false;
 
-    Lock lock(*this, false);
-    if (!lock)
-    {
-        Log *log(ProcessGDBRemoteLog::GetLogIfAnyCategoryIsSet(GDBR_LOG_PROCESS | GDBR_LOG_PACKETS));
-        if (log)
-            log->Printf("GDBRemoteCommunicationClient::%s failed to get sequence mutex", __FUNCTION__);
-        return false;
-    }
-
     StreamString payload;
     payload.Printf("QRestoreRegisterState:%u", save_id);
     StringExtractorGDBRemote response;
-    if (SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, lock) != PacketResult::Success)
+    if (SendThreadSpecificPacketAndWaitForResponse(tid, std::move(payload), response, false) != PacketResult::Success)
         return false;
 
     if (response.IsOKResponse())
@@ -3812,7 +3787,7 @@ GDBRemoteCommunicationClient::ServeSymbo
             StreamString packet;
             packet.PutCString ("qSymbol::");
             StringExtractorGDBRemote response;
-            while (SendPacketAndWaitForResponse(packet.GetString(), response, lock) == PacketResult::Success)
+            while (SendPacketAndWaitForResponseNoLock(packet.GetString(), response) == PacketResult::Success)
             {
                 if (response.IsOKResponse())
                 {

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h?rev=280088&r1=280087&r2=280088&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h Tue Aug 30 08:56:11 2016
@@ -64,9 +64,6 @@ public:
     SendPacketsAndConcatenateResponses (const char *send_payload_prefix,
                                         std::string &response_string);
 
-    void
-    ComputeThreadSuffixSupport();
-
     bool
     GetThreadSuffixSupported();
 
@@ -398,6 +395,9 @@ public:
                          uint32_t recv_size);
     
     bool
+    SetCurrentThread (uint64_t tid);
+    
+    bool
     SetCurrentThreadForRun (uint64_t tid);
 
     bool
@@ -488,18 +488,17 @@ public:
 
     lldb::DataBufferSP
     ReadRegister(lldb::tid_t tid,
-                 uint32_t reg_num, // Must be the eRegisterKindProcessPlugin register number
-                 const Lock &lock);
+                 uint32_t reg_num); // Must be the eRegisterKindProcessPlugin register number
 
     lldb::DataBufferSP
-    ReadAllRegisters(lldb::tid_t tid, const Lock &lock);
+    ReadAllRegisters(lldb::tid_t tid);
 
     bool
     WriteRegister(lldb::tid_t tid, uint32_t reg_num, // eRegisterKindProcessPlugin register number
-                  llvm::ArrayRef<uint8_t> data, const Lock &lock);
+                  llvm::ArrayRef<uint8_t> data);
 
     bool
-    WriteAllRegisters(lldb::tid_t tid, llvm::ArrayRef<uint8_t> data, const Lock &lock);
+    WriteAllRegisters(lldb::tid_t tid, llvm::ArrayRef<uint8_t> data);
 
     bool
     SaveRegisterState(lldb::tid_t tid, uint32_t &save_id);
@@ -687,10 +686,7 @@ protected:
 
     PacketResult
     SendThreadSpecificPacketAndWaitForResponse(lldb::tid_t tid, StreamString &&payload,
-                                               StringExtractorGDBRemote &response, const Lock &lock);
-
-    bool
-    SetCurrentThread(uint64_t tid, const Lock &lock);
+                                               StringExtractorGDBRemote &response, bool send_async);
 
 private:
     DISALLOW_COPY_AND_ASSIGN (GDBRemoteCommunicationClient);

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp?rev=280088&r1=280087&r2=280088&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp Tue Aug 30 08:56:11 2016
@@ -119,25 +119,8 @@ GDBRemoteRegisterContext::GetRegisterSet
 bool
 GDBRemoteRegisterContext::ReadRegister (const RegisterInfo *reg_info, RegisterValue &value)
 {
-    ExecutionContext exe_ctx(CalculateThread());
-
-    Process *process = exe_ctx.GetProcessPtr();
-    Thread *thread = exe_ctx.GetThreadPtr();
-    if (process == NULL || thread == NULL)
-        return false;
-
-    GDBRemoteCommunicationClient &gdb_comm(((ProcessGDBRemote *)process)->GetGDBRemote());
-
-    GDBRemoteClientBase::Lock lock(gdb_comm, false);
-    if (!lock)
-    {
-        if (Log *log = ProcessGDBRemoteLog::GetLogIfAnyCategoryIsSet(GDBR_LOG_THREAD | GDBR_LOG_PACKETS))
-            log->Printf("GDBRemoteRegisterContext::%s failed to get packet sequence mutex", __FUNCTION__);
-        return false;
-    }
-
     // Read the register
-    if (ReadRegisterBytes(reg_info, m_reg_data, gdb_comm, lock))
+    if (ReadRegisterBytes (reg_info, m_reg_data))
     {
         const bool partial_data_ok = false;
         Error error (value.SetValueFromData(reg_info, m_reg_data, reg_info->byte_offset, partial_data_ok));
@@ -221,23 +204,30 @@ GDBRemoteRegisterContext::PrivateSetRegi
 
 // Helper function for GDBRemoteRegisterContext::ReadRegisterBytes().
 bool
-GDBRemoteRegisterContext::GetPrimordialRegister(const RegisterInfo *reg_info, GDBRemoteCommunicationClient &gdb_comm,
-                                                const GDBRemoteCommunicationClient::Lock &lock)
+GDBRemoteRegisterContext::GetPrimordialRegister(const RegisterInfo *reg_info,
+                                                GDBRemoteCommunicationClient &gdb_comm)
 {
     const uint32_t lldb_reg = reg_info->kinds[eRegisterKindLLDB];
     const uint32_t remote_reg = reg_info->kinds[eRegisterKindProcessPlugin];
     StringExtractorGDBRemote response;
-    if (DataBufferSP buffer_sp = gdb_comm.ReadRegister(m_thread.GetProtocolID(), remote_reg, lock))
+    if (DataBufferSP buffer_sp = gdb_comm.ReadRegister(m_thread.GetProtocolID(), remote_reg))
         return PrivateSetRegisterValue(lldb_reg,
                                        llvm::ArrayRef<uint8_t>(buffer_sp->GetBytes(), buffer_sp->GetByteSize()));
     return false;
 }
 
 bool
-GDBRemoteRegisterContext::ReadRegisterBytes(const RegisterInfo *reg_info, DataExtractor &data,
-                                            GDBRemoteCommunicationClient &gdb_comm,
-                                            const GDBRemoteCommunicationClient::Lock &lock)
+GDBRemoteRegisterContext::ReadRegisterBytes (const RegisterInfo *reg_info, DataExtractor &data)
 {
+    ExecutionContext exe_ctx (CalculateThread());
+
+    Process *process = exe_ctx.GetProcessPtr();
+    Thread *thread = exe_ctx.GetThreadPtr();
+    if (process == NULL || thread == NULL)
+        return false;
+
+    GDBRemoteCommunicationClient &gdb_comm (((ProcessGDBRemote *)process)->GetGDBRemote());
+
     InvalidateIfNeeded(false);
 
     const uint32_t reg = reg_info->kinds[eRegisterKindLLDB];
@@ -246,7 +236,7 @@ GDBRemoteRegisterContext::ReadRegisterBy
     {
         if (m_read_all_at_once)
         {
-            if (DataBufferSP buffer_sp = gdb_comm.ReadAllRegisters(m_thread.GetProtocolID(), lock))
+            if (DataBufferSP buffer_sp = gdb_comm.ReadAllRegisters(m_thread.GetProtocolID()))
             {
                 memcpy(const_cast<uint8_t *>(m_reg_data.GetDataStart()), buffer_sp->GetBytes(),
                        std::min(buffer_sp->GetByteSize(), m_reg_data.GetByteSize()));
@@ -279,7 +269,7 @@ GDBRemoteRegisterContext::ReadRegisterBy
                 {
                     // Read the containing register if it hasn't already been read
                     if (!GetRegisterIsValid(prim_reg))
-                        success = GetPrimordialRegister(prim_reg_info, gdb_comm, lock);
+                        success = GetPrimordialRegister(prim_reg_info, gdb_comm);
                 }
             }
 
@@ -293,7 +283,7 @@ GDBRemoteRegisterContext::ReadRegisterBy
         else
         {
             // Get each register individually
-            GetPrimordialRegister(reg_info, gdb_comm, lock);
+            GetPrimordialRegister(reg_info, gdb_comm);
         }
 
         // Make sure we got a valid register value after reading it
@@ -335,8 +325,8 @@ GDBRemoteRegisterContext::WriteRegister
 
 // Helper function for GDBRemoteRegisterContext::WriteRegisterBytes().
 bool
-GDBRemoteRegisterContext::SetPrimordialRegister(const RegisterInfo *reg_info, GDBRemoteCommunicationClient &gdb_comm,
-                                                const GDBRemoteCommunicationClient::Lock &lock)
+GDBRemoteRegisterContext::SetPrimordialRegister(const RegisterInfo *reg_info,
+                                                GDBRemoteCommunicationClient &gdb_comm)
 {
     StreamString packet;
     StringExtractorGDBRemote response;
@@ -346,7 +336,7 @@ GDBRemoteRegisterContext::SetPrimordialR
 
     return gdb_comm.WriteRegister(
         m_thread.GetProtocolID(), reg_info->kinds[eRegisterKindProcessPlugin],
-        {m_reg_data.PeekData(reg_info->byte_offset, reg_info->byte_size), reg_info->byte_size}, lock);
+        {m_reg_data.PeekData(reg_info->byte_offset, reg_info->byte_size), reg_info->byte_size});
 }
 
 bool
@@ -393,7 +383,7 @@ GDBRemoteRegisterContext::WriteRegisterB
 
                     // Set all registers in one packet
                     if (gdb_comm.WriteAllRegisters(m_thread.GetProtocolID(),
-                                                   {m_reg_data.GetDataStart(), size_t(m_reg_data.GetByteSize())}, lock))
+                                                   {m_reg_data.GetDataStart(), size_t(m_reg_data.GetByteSize())}))
 
                     {
                         SetAllRegisterValid (false);
@@ -423,13 +413,13 @@ GDBRemoteRegisterContext::WriteRegisterB
                             if (value_reg_info == NULL)
                                 success = false;
                             else
-                                success = SetPrimordialRegister(value_reg_info, gdb_comm, lock);
+                                success = SetPrimordialRegister(value_reg_info, gdb_comm);
                         }
                     }
                     else
                     {
                         // This is an actual register, write it
-                        success = SetPrimordialRegister(reg_info, gdb_comm, lock);
+                        success = SetPrimordialRegister(reg_info, gdb_comm);
                     }
 
                     // Check if writing this register will invalidate any other register values?
@@ -535,7 +525,7 @@ GDBRemoteRegisterContext::ReadAllRegiste
         if (gdb_comm.SyncThreadState(m_thread.GetProtocolID()))
             InvalidateAllRegisters();
 
-        if (use_g_packet && (data_sp = gdb_comm.ReadAllRegisters(m_thread.GetProtocolID(), lock)))
+        if (use_g_packet && (data_sp = gdb_comm.ReadAllRegisters(m_thread.GetProtocolID())))
             return true;
 
         // We're going to read each register
@@ -546,7 +536,7 @@ GDBRemoteRegisterContext::ReadAllRegiste
         {
             if (reg_info->value_regs) // skip registers that are slices of real registers
                 continue;
-            ReadRegisterBytes(reg_info, m_reg_data, gdb_comm, lock);
+            ReadRegisterBytes(reg_info, m_reg_data);
             // ReadRegisterBytes saves the contents of the register in to the m_reg_data buffer
         }
         data_sp.reset(new DataBufferHeap(m_reg_data.GetDataStart(), m_reg_info.GetRegisterDataByteSize()));
@@ -597,7 +587,7 @@ GDBRemoteRegisterContext::WriteAllRegist
         if (use_g_packet)
         {
             if (gdb_comm.WriteAllRegisters(m_thread.GetProtocolID(),
-                                           {data_sp->GetBytes(), size_t(data_sp->GetByteSize())}, lock))
+                                           {data_sp->GetBytes(), size_t(data_sp->GetByteSize())}))
                 return true;
 
             uint32_t num_restored = 0;
@@ -684,7 +674,7 @@ GDBRemoteRegisterContext::WriteAllRegist
                 {
                     SetRegisterIsValid(reg, false);
                     if (gdb_comm.WriteRegister(m_thread.GetProtocolID(), reg_info->kinds[eRegisterKindProcessPlugin],
-                                               {restore_src, reg_byte_size}, lock))
+                                               {restore_src, reg_byte_size}))
                         ++num_restored;
                 }
             }
@@ -723,7 +713,7 @@ GDBRemoteRegisterContext::WriteAllRegist
 
                 SetRegisterIsValid(reg_info, false);
                 if (gdb_comm.WriteRegister(m_thread.GetProtocolID(), reg_info->kinds[eRegisterKindProcessPlugin],
-                                           {data_sp->GetBytes() + reg_info->byte_offset, reg_info->byte_size}, lock))
+                                           {data_sp->GetBytes() + reg_info->byte_offset, reg_info->byte_size}))
                     ++num_restored;
             }
             return num_restored > 0;

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h?rev=280088&r1=280087&r2=280088&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h Tue Aug 30 08:56:11 2016
@@ -98,8 +98,8 @@ protected:
     friend class ThreadGDBRemote;
 
     bool
-    ReadRegisterBytes(const RegisterInfo *reg_info, DataExtractor &data, GDBRemoteCommunicationClient &gdb_comm,
-                      const GDBRemoteCommunicationClient::Lock &lock);
+    ReadRegisterBytes (const RegisterInfo *reg_info,
+                       DataExtractor &data);
 
     bool
     WriteRegisterBytes (const RegisterInfo *reg_info,
@@ -150,13 +150,11 @@ protected:
 
 private:
     // Helper function for ReadRegisterBytes().
-    bool
-    GetPrimordialRegister(const RegisterInfo *reg_info, GDBRemoteCommunicationClient &gdb_comm,
-                          const GDBRemoteCommunicationClient::Lock &lock);
+    bool GetPrimordialRegister(const RegisterInfo *reg_info,
+                               GDBRemoteCommunicationClient &gdb_comm);
     // Helper function for WriteRegisterBytes().
-    bool
-    SetPrimordialRegister(const RegisterInfo *reg_info, GDBRemoteCommunicationClient &gdb_comm,
-                          const GDBRemoteCommunicationClient::Lock &lock);
+    bool SetPrimordialRegister(const RegisterInfo *reg_info,
+                               GDBRemoteCommunicationClient &gdb_comm);
 
     DISALLOW_COPY_AND_ASSIGN (GDBRemoteRegisterContext);
 };

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp?rev=280088&r1=280087&r2=280088&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp Tue Aug 30 08:56:11 2016
@@ -1144,7 +1144,7 @@ ProcessGDBRemote::ConnectToDebugserver (
         GetTarget().SetNonStopModeEnabled (m_gdb_comm.SetNonStopMode(true));
 
     m_gdb_comm.GetEchoSupported ();
-    m_gdb_comm.ComputeThreadSuffixSupport();
+    m_gdb_comm.GetThreadSuffixSupported ();
     m_gdb_comm.GetListThreadsInStopReplySupported ();
     m_gdb_comm.GetHostInfo ();
     m_gdb_comm.GetVContSupported ('c');

Modified: lldb/trunk/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp?rev=280088&r1=280087&r2=280088&view=diff
==============================================================================
--- lldb/trunk/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp (original)
+++ lldb/trunk/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp Tue Aug 30 08:56:11 2016
@@ -76,22 +76,17 @@ TEST_F(GDBRemoteCommunicationClientTest,
     if (HasFailure())
         return;
 
-    std::future<void> suffix_result = std::async(std::launch::async, [&] { client.ComputeThreadSuffixSupport(); });
-    Handle_QThreadSuffixSupported(server, true);
-    suffix_result.get();
-
-    GDBRemoteCommunicationClient::Lock lock(client, false);
-    ASSERT_TRUE(bool(lock));
-
     const lldb::tid_t tid = 0x47;
     const uint32_t reg_num = 4;
     std::future<bool> write_result =
-        std::async(std::launch::async, [&] { return client.WriteRegister(tid, reg_num, one_register, lock); });
+        std::async(std::launch::async, [&] { return client.WriteRegister(tid, reg_num, one_register); });
+
+    Handle_QThreadSuffixSupported(server, true);
 
     HandlePacket(server, "P4=" + one_register_hex + ";thread:0047;", "OK");
     ASSERT_TRUE(write_result.get());
 
-    write_result = std::async(std::launch::async, [&] { return client.WriteAllRegisters(tid, all_registers, lock); });
+    write_result = std::async(std::launch::async, [&] { return client.WriteAllRegisters(tid, all_registers); });
 
     HandlePacket(server, "G" + all_registers_hex + ";thread:0047;", "OK");
     ASSERT_TRUE(write_result.get());
@@ -105,23 +100,17 @@ TEST_F(GDBRemoteCommunicationClientTest,
     if (HasFailure())
         return;
 
-    std::future<void> suffix_result = std::async(std::launch::async, [&] { client.ComputeThreadSuffixSupport(); });
-    Handle_QThreadSuffixSupported(server, false);
-    suffix_result.get();
-
-    GDBRemoteCommunicationClient::Lock lock(client, false);
-    ASSERT_TRUE(bool(lock));
-
     const lldb::tid_t tid = 0x47;
     const uint32_t reg_num = 4;
     std::future<bool> write_result =
-        std::async(std::launch::async, [&] { return client.WriteRegister(tid, reg_num, one_register, lock); });
+        std::async(std::launch::async, [&] { return client.WriteRegister(tid, reg_num, one_register); });
 
+    Handle_QThreadSuffixSupported(server, false);
     HandlePacket(server, "Hg47", "OK");
     HandlePacket(server, "P4=" + one_register_hex, "OK");
     ASSERT_TRUE(write_result.get());
 
-    write_result = std::async(std::launch::async, [&] { return client.WriteAllRegisters(tid, all_registers, lock); });
+    write_result = std::async(std::launch::async, [&] { return client.WriteAllRegisters(tid, all_registers); });
 
     HandlePacket(server, "G" + all_registers_hex, "OK");
     ASSERT_TRUE(write_result.get());
@@ -135,27 +124,21 @@ TEST_F(GDBRemoteCommunicationClientTest,
     if (HasFailure())
         return;
 
-    std::future<void> suffix_result = std::async(std::launch::async, [&] { client.ComputeThreadSuffixSupport(); });
-    Handle_QThreadSuffixSupported(server, true);
-    suffix_result.get();
-
     const lldb::tid_t tid = 0x47;
     const uint32_t reg_num = 4;
     std::future<bool> async_result = std::async(std::launch::async, [&] { return client.GetpPacketSupported(tid); });
+    Handle_QThreadSuffixSupported(server, true);
     HandlePacket(server, "p0;thread:0047;", one_register_hex);
     ASSERT_TRUE(async_result.get());
 
-    GDBRemoteCommunicationClient::Lock lock(client, false);
-    ASSERT_TRUE(bool(lock));
-
     std::future<DataBufferSP> read_result =
-        std::async(std::launch::async, [&] { return client.ReadRegister(tid, reg_num, lock); });
+        std::async(std::launch::async, [&] { return client.ReadRegister(tid, reg_num); });
     HandlePacket(server, "p4;thread:0047;", "41424344");
     auto buffer_sp = read_result.get();
     ASSERT_TRUE(bool(buffer_sp));
     ASSERT_EQ(0, memcmp(buffer_sp->GetBytes(), one_register, sizeof one_register));
 
-    read_result = std::async(std::launch::async, [&] { return client.ReadAllRegisters(tid, lock); });
+    read_result = std::async(std::launch::async, [&] { return client.ReadAllRegisters(tid); });
     HandlePacket(server, "g;thread:0047;", all_registers_hex);
     buffer_sp = read_result.get();
     ASSERT_TRUE(bool(buffer_sp));
@@ -170,14 +153,11 @@ TEST_F(GDBRemoteCommunicationClientTest,
     if (HasFailure())
         return;
 
-    std::future<void> suffix_result = std::async(std::launch::async, [&] { client.ComputeThreadSuffixSupport(); });
-    Handle_QThreadSuffixSupported(server, false);
-    suffix_result.get();
-
     const lldb::tid_t tid = 0x47;
     uint32_t save_id;
     std::future<bool> async_result =
         std::async(std::launch::async, [&] { return client.SaveRegisterState(tid, save_id); });
+    Handle_QThreadSuffixSupported(server, false);
     HandlePacket(server, "Hg47", "OK");
     HandlePacket(server, "QSaveRegisterState", "1");
     ASSERT_TRUE(async_result.get());




More information about the lldb-commits mailing list