//===-- OperatingSystemPlugin.h ---------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "lldb/Core/PluginManager.h" #include "lldb/Target/OperatingSystem.h" #include "lldb/Target/Thread.h" #include "lldb/Target/ThreadList.h" /// An operating system plugin that does nothing: simply keeps the thread lists /// as they are. class OperatingSystemIdentityMap : public lldb_private::OperatingSystem { public: OperatingSystemIdentityMap(lldb_private::Process *process) : OperatingSystem(process) {} static OperatingSystem *CreateInstance(lldb_private::Process *process, bool force) { return new OperatingSystemIdentityMap(process); } static llvm::StringRef GetPluginNameStatic() { return "identity map"; } static llvm::StringRef GetPluginDescriptionStatic() { return ""; } static void Initialize() { lldb_private::PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(), CreateInstance, nullptr); } static void Terminate() { lldb_private::PluginManager::UnregisterPlugin(CreateInstance); } llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } // Simply adds the threads from real_thread_list into new_thread_list. bool UpdateThreadList(lldb_private::ThreadList &old_thread_list, lldb_private::ThreadList &real_thread_list, lldb_private::ThreadList &new_thread_list) override { for (const auto &real_thread : real_thread_list.Threads()) new_thread_list.AddThread(real_thread); return true; } void ThreadWasSelected(lldb_private::Thread *thread) override {} lldb::RegisterContextSP CreateRegisterContextForThread(lldb_private::Thread *thread, lldb::addr_t reg_data_addr) override { return thread->GetRegisterContext(); } lldb::StopInfoSP CreateThreadStopReason(lldb_private::Thread *thread) override { return thread->GetStopInfo(); } };