summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2016-08-25 08:34:57 +0000
committerPavel Labath <labath@google.com>2016-08-25 08:34:57 +0000
commit0faf37333c8bf7eaca3500c7d79c7fb99112caa5 (patch)
tree4ed0654fdfd3d54bf74b110cfc86e910192ad71a /lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
parentc1566308aa7596efad6d3ddc852eb3b443748309 (diff)
downloadbcm5719-llvm-0faf37333c8bf7eaca3500c7d79c7fb99112caa5.tar.gz
bcm5719-llvm-0faf37333c8bf7eaca3500c7d79c7fb99112caa5.zip
gdb-remote: Make the sequence mutex non-recursive
Summary: This is a preparatory commit for D22914, where I'd like to replace this mutex by an R/W lock (which is also not recursive). This required a couple of changes: - The only caller of Read/WriteRegister, GDBRemoteRegisterContext class, was already acquiring the mutex, so these functions do not need to. All functions which now do not take a lock, take an lock argument instead, to remind the caller of this fact. - GetThreadSuffixSupported() was being called from locked and unlocked contexts (including contexts where the process was running, and the call would fail if it did not have the result cached). I have split this into two functions, one which computes the thread suffix support and caches it (this one always takes the lock), and another, which returns the cached value (and never needs to take the lock). This feels quite natural as ProcessGdbRemote was already pre-caching this value at the start. Reviewers: clayborg Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D23802 llvm-svn: 279725
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h')
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h20
1 files changed, 12 insertions, 8 deletions
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
index eeeecb53992..a714b403bab 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
@@ -64,6 +64,9 @@ public:
SendPacketsAndConcatenateResponses (const char *send_payload_prefix,
std::string &response_string);
+ void
+ ComputeThreadSuffixSupport();
+
bool
GetThreadSuffixSupported();
@@ -395,9 +398,6 @@ public:
uint32_t recv_size);
bool
- SetCurrentThread (uint64_t tid);
-
- bool
SetCurrentThreadForRun (uint64_t tid);
bool
@@ -488,17 +488,18 @@ public:
lldb::DataBufferSP
ReadRegister(lldb::tid_t tid,
- uint32_t reg_num); // Must be the eRegisterKindProcessPlugin register number
+ uint32_t reg_num, // Must be the eRegisterKindProcessPlugin register number
+ const Lock &lock);
lldb::DataBufferSP
- ReadAllRegisters(lldb::tid_t tid);
+ ReadAllRegisters(lldb::tid_t tid, const Lock &lock);
bool
WriteRegister(lldb::tid_t tid, uint32_t reg_num, // eRegisterKindProcessPlugin register number
- llvm::ArrayRef<uint8_t> data);
+ llvm::ArrayRef<uint8_t> data, const Lock &lock);
bool
- WriteAllRegisters(lldb::tid_t tid, llvm::ArrayRef<uint8_t> data);
+ WriteAllRegisters(lldb::tid_t tid, llvm::ArrayRef<uint8_t> data, const Lock &lock);
bool
SaveRegisterState(lldb::tid_t tid, uint32_t &save_id);
@@ -686,7 +687,10 @@ protected:
PacketResult
SendThreadSpecificPacketAndWaitForResponse(lldb::tid_t tid, StreamString &&payload,
- StringExtractorGDBRemote &response, bool send_async);
+ StringExtractorGDBRemote &response, const Lock &lock);
+
+ bool
+ SetCurrentThread(uint64_t tid, const Lock &lock);
private:
DISALLOW_COPY_AND_ASSIGN (GDBRemoteCommunicationClient);
OpenPOWER on IntegriCloud