summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Target/ThreadList.h2
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestThreadSelectionBug.py50
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/operating_system.py45
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp7
-rw-r--r--lldb/source/Target/ThreadList.cpp14
5 files changed, 4 insertions, 114 deletions
diff --git a/lldb/include/lldb/Target/ThreadList.h b/lldb/include/lldb/Target/ThreadList.h
index 263d26a033e..2ebcd0b0e2c 100644
--- a/lldb/include/lldb/Target/ThreadList.h
+++ b/lldb/include/lldb/Target/ThreadList.h
@@ -102,8 +102,6 @@ public:
lldb::ThreadSP GetThreadSPForThreadPtr(Thread *thread_ptr);
- lldb::ThreadSP GetBackingThread(const lldb::ThreadSP &real_thread);
-
bool ShouldStop(Event *event_ptr);
Vote ShouldReportStop(Event *event_ptr);
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestThreadSelectionBug.py b/lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestThreadSelectionBug.py
deleted file mode 100644
index 400a9366103..00000000000
--- a/lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestThreadSelectionBug.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from __future__ import print_function
-import lldb
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test.decorators import *
-from gdbclientutils import *
-
-
-class TestThreadSelectionBug(GDBRemoteTestBase):
- def test(self):
- class MyResponder(MockGDBServerResponder):
- def cont(self):
- # Simulate process stopping due to a raise(SIGINT)
- return "T01reason:signal"
-
- self.server.responder = MyResponder()
- target = self.createTarget("a.yaml")
- process = self.connect(target)
- python_os_plugin_path = os.path.join(self.getSourceDir(),
- 'operating_system.py')
- command = "settings set target.process.python-os-plugin-path '{}'".format(
- python_os_plugin_path)
- self.dbg.HandleCommand(command)
-
- self.assertTrue(process, PROCESS_IS_VALID)
- self.assertEqual(process.GetNumThreads(), 3)
-
- # Verify our OS plug-in threads showed up
- thread = process.GetThreadByID(0x1)
- self.assertTrue(
- thread.IsValid(),
- "Make sure there is a thread 0x1 after we load the python OS plug-in")
- thread = process.GetThreadByID(0x2)
- self.assertTrue(
- thread.IsValid(),
- "Make sure there is a thread 0x2 after we load the python OS plug-in")
- thread = process.GetThreadByID(0x3)
- self.assertTrue(
- thread.IsValid(),
- "Make sure there is a thread 0x3 after we load the python OS plug-in")
-
- # Verify that a thread other than 3 is selected.
- thread = process.GetSelectedThread()
- self.assertNotEqual(thread.GetThreadID(), 0x3)
-
- # Verify that we select the thread backed by physical thread 1, rather
- # than virtual thread 1. The mapping comes from the OS plugin, where we
- # specified that thread 3 is backed by real thread 1.
- process.Continue()
- thread = process.GetSelectedThread()
- self.assertEqual(thread.GetThreadID(), 0x3)
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/operating_system.py b/lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/operating_system.py
deleted file mode 100644
index ad9b6fd4e55..00000000000
--- a/lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/operating_system.py
+++ /dev/null
@@ -1,45 +0,0 @@
-import lldb
-import struct
-
-
-class OperatingSystemPlugIn(object):
- """Class that provides data for an instance of a LLDB 'OperatingSystemPython' plug-in class"""
-
- def __init__(self, process):
- '''Initialization needs a valid.SBProcess object.
-
- This plug-in will get created after a live process is valid and has stopped for the first time.
- '''
- self.process = None
- self.registers = None
- self.threads = None
- if isinstance(process, lldb.SBProcess) and process.IsValid():
- self.process = process
- self.threads = None # Will be an dictionary containing info for each thread
-
- def get_target(self):
- return self.process.target
-
- def get_thread_info(self):
- if not self.threads:
- self.threads = [{
- 'tid': 0x1,
- 'name': 'one',
- 'queue': 'queue1',
- 'state': 'stopped',
- 'stop_reason': 'none'
- }, {
- 'tid': 0x2,
- 'name': 'two',
- 'queue': 'queue2',
- 'state': 'stopped',
- 'stop_reason': 'none'
- }, {
- 'tid': 0x3,
- 'name': 'three',
- 'queue': 'queue3',
- 'state': 'stopped',
- 'stop_reason': 'sigstop',
- 'core': 0
- }]
- return self.threads
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index 0fb97b2f7db..fc5f79e3544 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -1822,9 +1822,10 @@ ThreadSP ProcessGDBRemote::SetThreadStopInfo(
if (!thread_sp->StopInfoIsUpToDate()) {
thread_sp->SetStopInfo(StopInfoSP());
// If there's a memory thread backed by this thread, we need to use it
- // to calculate StopInfo.
- if (ThreadSP memory_thread_sp =
- m_thread_list.GetBackingThread(thread_sp))
+ // to calcualte StopInfo.
+ ThreadSP memory_thread_sp =
+ m_thread_list.FindThreadByProtocolID(thread_sp->GetProtocolID());
+ if (memory_thread_sp)
thread_sp = memory_thread_sp;
if (exc_type != 0) {
diff --git a/lldb/source/Target/ThreadList.cpp b/lldb/source/Target/ThreadList.cpp
index 61483914644..4cf8f9061a8 100644
--- a/lldb/source/Target/ThreadList.cpp
+++ b/lldb/source/Target/ThreadList.cpp
@@ -195,20 +195,6 @@ ThreadSP ThreadList::GetThreadSPForThreadPtr(Thread *thread_ptr) {
return thread_sp;
}
-ThreadSP ThreadList::GetBackingThread(const ThreadSP &real_thread) {
- std::lock_guard<std::recursive_mutex> guard(GetMutex());
-
- ThreadSP thread_sp;
- const uint32_t num_threads = m_threads.size();
- for (uint32_t idx = 0; idx < num_threads; ++idx) {
- if (m_threads[idx]->GetBackingThread() == real_thread) {
- thread_sp = m_threads[idx];
- break;
- }
- }
- return thread_sp;
-}
-
ThreadSP ThreadList::FindThreadByIndexID(uint32_t index_id, bool can_update) {
std::lock_guard<std::recursive_mutex> guard(GetMutex());
OpenPOWER on IntegriCloud