Author: Alex Langford Date: 2023-03-27T13:42:14-07:00 New Revision: 41b6d5863fef94bb3a9d184802c5bb6e2759da15
URL: https://github.com/llvm/llvm-project/commit/41b6d5863fef94bb3a9d184802c5bb6e2759da15 DIFF: https://github.com/llvm/llvm-project/commit/41b6d5863fef94bb3a9d184802c5bb6e2759da15.diff LOG: Revert "[lldb] Move UnixSignals creation into Platform plugins" This reverts commit ee232506b870ce5282cc4da5ca493d41d361feb3. As discussed in https://reviews.llvm.org/D146668 we'll find another way forward. Added: lldb/source/Plugins/Process/Utility/FreeBSDSignals.cpp lldb/source/Plugins/Process/Utility/FreeBSDSignals.h lldb/source/Plugins/Process/Utility/GDBRemoteSignals.cpp lldb/source/Plugins/Process/Utility/GDBRemoteSignals.h lldb/source/Plugins/Process/Utility/LinuxSignals.cpp lldb/source/Plugins/Process/Utility/LinuxSignals.h lldb/source/Plugins/Process/Utility/NetBSDSignals.cpp lldb/source/Plugins/Process/Utility/NetBSDSignals.h Modified: lldb/include/lldb/Target/Platform.h lldb/include/lldb/Target/UnixSignals.h lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/CMakeLists.txt lldb/source/Plugins/Platform/FreeBSD/CMakeLists.txt lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.h lldb/source/Plugins/Platform/Linux/CMakeLists.txt lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp lldb/source/Plugins/Platform/Linux/PlatformLinux.h lldb/source/Plugins/Platform/NetBSD/CMakeLists.txt lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.h lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.h lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.h lldb/source/Plugins/Platform/Windows/PlatformWindows.h lldb/source/Plugins/Platform/gdb-server/CMakeLists.txt lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h lldb/source/Plugins/Process/Utility/CMakeLists.txt lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp lldb/source/Target/CMakeLists.txt lldb/source/Target/Platform.cpp lldb/source/Target/UnixSignals.cpp lldb/unittests/Process/gdb-remote/CMakeLists.txt lldb/unittests/Process/gdb-remote/GDBRemoteClientBaseTest.cpp lldb/unittests/Target/RemoteAwarePlatformTest.cpp Removed: lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.cpp lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.h lldb/source/Plugins/Platform/Linux/LinuxSignals.cpp lldb/source/Plugins/Platform/Linux/LinuxSignals.h lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.cpp lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.h lldb/source/Plugins/Platform/gdb-server/GDBRemoteSignals.cpp lldb/source/Plugins/Platform/gdb-server/GDBRemoteSignals.h ################################################################################ diff --git a/lldb/include/lldb/Target/Platform.h b/lldb/include/lldb/Target/Platform.h index e184249a62980..08e47cc132473 100644 --- a/lldb/include/lldb/Target/Platform.h +++ b/lldb/include/lldb/Target/Platform.h @@ -619,12 +619,10 @@ class Platform : public PluginInterface { return 1; } - virtual lldb::UnixSignalsSP GetRemoteUnixSignals(); + virtual const lldb::UnixSignalsSP &GetRemoteUnixSignals(); lldb::UnixSignalsSP GetUnixSignals(); - virtual lldb::UnixSignalsSP CreateUnixSignals() = 0; - /// Locate a queue name given a thread's qaddr /// /// On a system using libdispatch ("Grand Central Dispatch") style queues, a diff --git a/lldb/include/lldb/Target/UnixSignals.h b/lldb/include/lldb/Target/UnixSignals.h index 65eac7ebdd823..859cf0c814f69 100644 --- a/lldb/include/lldb/Target/UnixSignals.h +++ b/lldb/include/lldb/Target/UnixSignals.h @@ -22,6 +22,7 @@ namespace lldb_private { class UnixSignals { public: + static lldb::UnixSignalsSP Create(const ArchSpec &arch); static lldb::UnixSignalsSP CreateForHost(); // Constructors and Destructors diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/CMakeLists.txt b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/CMakeLists.txt index 2844ba6b2bda2..3789f56325980 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/CMakeLists.txt +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/CMakeLists.txt @@ -19,7 +19,6 @@ add_lldb_library(lldbPluginAppleObjCRuntime PLUGIN lldbUtility lldbPluginExpressionParserClang lldbPluginCPPRuntime - lldbPluginProcessUtility lldbPluginTypeSystemClang CLANG_LIBS clangAST diff --git a/lldb/source/Plugins/Platform/FreeBSD/CMakeLists.txt b/lldb/source/Plugins/Platform/FreeBSD/CMakeLists.txt index e277a8f5c9269..530144592ae44 100644 --- a/lldb/source/Plugins/Platform/FreeBSD/CMakeLists.txt +++ b/lldb/source/Plugins/Platform/FreeBSD/CMakeLists.txt @@ -1,5 +1,4 @@ add_lldb_library(lldbPluginPlatformFreeBSD PLUGIN - FreeBSDSignals.cpp PlatformFreeBSD.cpp LINK_LIBS diff --git a/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp b/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp index 5ef029b917031..3d29739c19adf 100644 --- a/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp +++ b/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// #include "PlatformFreeBSD.h" -#include "FreeBSDSignals.h" #include "lldb/Host/Config.h" #include <cstdio> @@ -283,7 +282,3 @@ CompilerType PlatformFreeBSD::GetSiginfoType(const llvm::Triple &triple) { ast->CompleteTagDeclarationDefinition(siginfo_type); return siginfo_type; } - -lldb::UnixSignalsSP PlatformFreeBSD::CreateUnixSignals() { - return std::make_shared<FreeBSDSignals>(); -} diff --git a/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.h b/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.h index d65b15aec243a..1e92bb4a1e147 100644 --- a/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.h +++ b/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.h @@ -59,8 +59,6 @@ class PlatformFreeBSD : public PlatformPOSIX { std::vector<ArchSpec> m_supported_architectures; - lldb::UnixSignalsSP CreateUnixSignals() override; - private: std::mutex m_mutex; std::shared_ptr<TypeSystemClang> m_type_system; diff --git a/lldb/source/Plugins/Platform/Linux/CMakeLists.txt b/lldb/source/Plugins/Platform/Linux/CMakeLists.txt index b8bfa3bc78863..bad039d0ad509 100644 --- a/lldb/source/Plugins/Platform/Linux/CMakeLists.txt +++ b/lldb/source/Plugins/Platform/Linux/CMakeLists.txt @@ -1,5 +1,4 @@ add_lldb_library(lldbPluginPlatformLinux PLUGIN - LinuxSignals.cpp PlatformLinux.cpp LINK_LIBS diff --git a/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp b/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp index d4e09c971eb2d..bf226fabda5c9 100644 --- a/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp +++ b/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// #include "PlatformLinux.h" -#include "LinuxSignals.h" #include "lldb/Host/Config.h" #include <cstdio> @@ -481,7 +480,3 @@ CompilerType PlatformLinux::GetSiginfoType(const llvm::Triple &triple) { ast->CompleteTagDeclarationDefinition(siginfo_type); return siginfo_type; } - -lldb::UnixSignalsSP PlatformLinux::CreateUnixSignals() { - return std::make_shared<LinuxSignals>(); -} diff --git a/lldb/source/Plugins/Platform/Linux/PlatformLinux.h b/lldb/source/Plugins/Platform/Linux/PlatformLinux.h index e604d735ae017..89f0bd709ef60 100644 --- a/lldb/source/Plugins/Platform/Linux/PlatformLinux.h +++ b/lldb/source/Plugins/Platform/Linux/PlatformLinux.h @@ -64,8 +64,6 @@ class PlatformLinux : public PlatformPOSIX { std::vector<ArchSpec> m_supported_architectures; - lldb::UnixSignalsSP CreateUnixSignals() override; - private: std::mutex m_mutex; std::shared_ptr<TypeSystemClang> m_type_system; diff --git a/lldb/source/Plugins/Platform/NetBSD/CMakeLists.txt b/lldb/source/Plugins/Platform/NetBSD/CMakeLists.txt index 9c8083cbf2f2e..5e63f10980672 100644 --- a/lldb/source/Plugins/Platform/NetBSD/CMakeLists.txt +++ b/lldb/source/Plugins/Platform/NetBSD/CMakeLists.txt @@ -1,5 +1,4 @@ add_lldb_library(lldbPluginPlatformNetBSD PLUGIN - NetBSDSignals.cpp PlatformNetBSD.cpp LINK_LIBS diff --git a/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp b/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp index 41a48249dbbe9..59bbc3f638af1 100644 --- a/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp +++ b/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// #include "PlatformNetBSD.h" -#include "NetBSDSignals.h" #include "lldb/Host/Config.h" #include <cstdio> @@ -349,7 +348,3 @@ CompilerType PlatformNetBSD::GetSiginfoType(const llvm::Triple &triple) { ast->CompleteTagDeclarationDefinition(siginfo_type); return siginfo_type; } - -lldb::UnixSignalsSP PlatformNetBSD::CreateUnixSignals() { - return std::make_shared<NetBSDSignals>(); -} diff --git a/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.h b/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.h index de591b8f7a255..3437d7e5eb511 100644 --- a/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.h +++ b/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.h @@ -61,8 +61,6 @@ class PlatformNetBSD : public PlatformPOSIX { std::vector<ArchSpec> m_supported_architectures; - lldb::UnixSignalsSP CreateUnixSignals() override; - private: std::mutex m_mutex; std::shared_ptr<TypeSystemClang> m_type_system; diff --git a/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp b/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp index 7033158c928e6..222dbfa719647 100644 --- a/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp +++ b/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp @@ -27,7 +27,6 @@ #include "lldb/Target/ExecutionContext.h" #include "lldb/Target/Process.h" #include "lldb/Target/Thread.h" -#include "lldb/Target/UnixSignals.h" #include "lldb/Utility/DataBufferHeap.h" #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/LLDBLog.h" @@ -295,13 +294,9 @@ std::string PlatformPOSIX::GetPlatformSpecificConnectionInformation() { return ""; } -lldb::UnixSignalsSP PlatformPOSIX::GetRemoteUnixSignals() { - if (IsRemote() && m_remote_platform_sp) { - if (auto unix_signals_sp = m_remote_platform_sp->GetRemoteUnixSignals()) - return unix_signals_sp; - } - if (auto unix_signals_sp = CreateUnixSignals()) - return unix_signals_sp; +const lldb::UnixSignalsSP &PlatformPOSIX::GetRemoteUnixSignals() { + if (IsRemote() && m_remote_platform_sp) + return m_remote_platform_sp->GetRemoteUnixSignals(); return Platform::GetRemoteUnixSignals(); } @@ -994,7 +989,3 @@ ConstString PlatformPOSIX::GetFullNameForDylib(ConstString basename) { stream.Printf("lib%s.so", basename.GetCString()); return ConstString(stream.GetString()); } - -lldb::UnixSignalsSP PlatformPOSIX::CreateUnixSignals() { - return std::make_shared<UnixSignals>(); -} diff --git a/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.h b/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.h index f48dc6ef53d04..511797ce6bb7c 100644 --- a/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.h +++ b/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.h @@ -35,7 +35,7 @@ class PlatformPOSIX : public lldb_private::RemoteAwarePlatform { GetFile(const lldb_private::FileSpec &source, const lldb_private::FileSpec &destination) override; - lldb::UnixSignalsSP GetRemoteUnixSignals() override; + const lldb::UnixSignalsSP &GetRemoteUnixSignals() override; lldb::ProcessSP Attach(lldb_private::ProcessAttachInfo &attach_info, lldb_private::Debugger &debugger, @@ -69,8 +69,6 @@ class PlatformPOSIX : public lldb_private::RemoteAwarePlatform { lldb_private::ConstString GetFullNameForDylib(lldb_private::ConstString basename) override; - lldb::UnixSignalsSP CreateUnixSignals() override; - protected: std::unique_ptr<lldb_private::OptionGroupPlatformRSync> m_option_group_platform_rsync; diff --git a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.h b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.h index ca72062b21e88..596cf75b591f2 100644 --- a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.h +++ b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.h @@ -69,12 +69,6 @@ class PlatformQemuUser : public Platform { arch, addr, length, prot, flags, fd, offset); } - lldb::UnixSignalsSP CreateUnixSignals() override { - // PlatformQemuUser shouldn't create its own UnixSignals. It should defer to - // other platforms. - return lldb::UnixSignalsSP(); - } - private: static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch); static void DebuggerInitialize(Debugger &debugger); diff --git a/lldb/source/Plugins/Platform/Windows/PlatformWindows.h b/lldb/source/Plugins/Platform/Windows/PlatformWindows.h index 8c36f8c4a13ba..771133f341e90 100644 --- a/lldb/source/Plugins/Platform/Windows/PlatformWindows.h +++ b/lldb/source/Plugins/Platform/Windows/PlatformWindows.h @@ -82,10 +82,6 @@ class PlatformWindows : public RemoteAwarePlatform { std::vector<ArchSpec> m_supported_architectures; - lldb::UnixSignalsSP CreateUnixSignals() override { - return lldb::UnixSignalsSP(); - } - private: std::unique_ptr<lldb_private::UtilityFunction> MakeLoadImageUtilityFunction(lldb_private::ExecutionContext &context, diff --git a/lldb/source/Plugins/Platform/gdb-server/CMakeLists.txt b/lldb/source/Plugins/Platform/gdb-server/CMakeLists.txt index f00aa19cfac9c..2fbe817acbdd2 100644 --- a/lldb/source/Plugins/Platform/gdb-server/CMakeLists.txt +++ b/lldb/source/Plugins/Platform/gdb-server/CMakeLists.txt @@ -1,5 +1,4 @@ add_lldb_library(lldbPluginPlatformGDB PLUGIN - GDBRemoteSignals.cpp PlatformRemoteGDBServer.cpp LINK_LIBS @@ -7,5 +6,6 @@ add_lldb_library(lldbPluginPlatformGDB PLUGIN lldbCore lldbHost lldbTarget + lldbPluginProcessUtility lldbPluginProcessGDBRemote ) diff --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp index b25a151b0fcca..0858a2a8d3c8b 100644 --- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp +++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// #include "PlatformRemoteGDBServer.h" -#include "GDBRemoteSignals.h" #include "lldb/Host/Config.h" #include "lldb/Breakpoint/BreakpointLocation.h" @@ -32,6 +31,7 @@ #include "lldb/Utility/UriParser.h" #include "llvm/Support/FormatAdapters.h" +#include "Plugins/Process/Utility/GDBRemoteSignals.h" #include "Plugins/Process/gdb-remote/ProcessGDBRemote.h" #include <optional> @@ -680,13 +680,17 @@ void PlatformRemoteGDBServer::CalculateTrapHandlerSymbolNames() { m_trap_handlers.push_back(ConstString("_sigtramp")); } -UnixSignalsSP PlatformRemoteGDBServer::GetRemoteUnixSignals() { +const UnixSignalsSP &PlatformRemoteGDBServer::GetRemoteUnixSignals() { if (!IsConnected()) - return UnixSignalsSP(); + return Platform::GetRemoteUnixSignals(); if (m_remote_signals_sp) return m_remote_signals_sp; + // If packet not implemented or JSON failed to parse, we'll guess the signal + // set based on the remote architecture. + m_remote_signals_sp = UnixSignals::Create(GetRemoteSystemArchitecture()); + StringExtractorGDBRemote response; auto result = m_gdb_client_up->SendPacketAndWaitForResponse("jSignalsInfo", response); diff --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h index f83f607830f4a..638f7db5ef800 100644 --- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h +++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h @@ -13,6 +13,7 @@ #include <optional> #include <string> +#include "Plugins/Process/Utility/GDBRemoteSignals.h" #include "Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h" #include "lldb/Target/Platform.h" @@ -145,7 +146,7 @@ class PlatformRemoteGDBServer : public Platform, private UserIDResolver { void CalculateTrapHandlerSymbolNames() override; - lldb::UnixSignalsSP GetRemoteUnixSignals() override; + const lldb::UnixSignalsSP &GetRemoteUnixSignals() override; size_t ConnectToWaitingProcesses(lldb_private::Debugger &debugger, lldb_private::Status &error) override; @@ -153,11 +154,6 @@ class PlatformRemoteGDBServer : public Platform, private UserIDResolver { virtual size_t GetPendingGdbServerList(std::vector<std::string> &connection_urls); - lldb::UnixSignalsSP CreateUnixSignals() override { - // PlatformRemoteGDBServer should defer to other platforms. - return lldb::UnixSignalsSP(); - } - protected: std::unique_ptr<process_gdb_remote::GDBRemoteCommunicationClient> m_gdb_client_up; diff --git a/lldb/source/Plugins/Process/Utility/CMakeLists.txt b/lldb/source/Plugins/Process/Utility/CMakeLists.txt index 7feb8596d8bfe..edf4e851b653c 100644 --- a/lldb/source/Plugins/Process/Utility/CMakeLists.txt +++ b/lldb/source/Plugins/Process/Utility/CMakeLists.txt @@ -1,14 +1,18 @@ add_lldb_library(lldbPluginProcessUtility AuxVector.cpp + FreeBSDSignals.cpp + GDBRemoteSignals.cpp HistoryThread.cpp HistoryUnwind.cpp InferiorCallPOSIX.cpp LinuxProcMaps.cpp + LinuxSignals.cpp MemoryTagManagerAArch64MTE.cpp NativeProcessSoftwareSingleStep.cpp NativeRegisterContextDBReg_arm64.cpp NativeRegisterContextDBReg_x86.cpp NativeRegisterContextRegisterInfo.cpp + NetBSDSignals.cpp RegisterContext_x86.cpp RegisterContextDarwin_arm.cpp RegisterContextDarwin_arm64.cpp diff --git a/lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.cpp b/lldb/source/Plugins/Process/Utility/FreeBSDSignals.cpp similarity index 100% rename from lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.cpp rename to lldb/source/Plugins/Process/Utility/FreeBSDSignals.cpp diff --git a/lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.h b/lldb/source/Plugins/Process/Utility/FreeBSDSignals.h similarity index 100% rename from lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.h rename to lldb/source/Plugins/Process/Utility/FreeBSDSignals.h diff --git a/lldb/source/Plugins/Platform/gdb-server/GDBRemoteSignals.cpp b/lldb/source/Plugins/Process/Utility/GDBRemoteSignals.cpp similarity index 100% rename from lldb/source/Plugins/Platform/gdb-server/GDBRemoteSignals.cpp rename to lldb/source/Plugins/Process/Utility/GDBRemoteSignals.cpp diff --git a/lldb/source/Plugins/Platform/gdb-server/GDBRemoteSignals.h b/lldb/source/Plugins/Process/Utility/GDBRemoteSignals.h similarity index 100% rename from lldb/source/Plugins/Platform/gdb-server/GDBRemoteSignals.h rename to lldb/source/Plugins/Process/Utility/GDBRemoteSignals.h diff --git a/lldb/source/Plugins/Platform/Linux/LinuxSignals.cpp b/lldb/source/Plugins/Process/Utility/LinuxSignals.cpp similarity index 100% rename from lldb/source/Plugins/Platform/Linux/LinuxSignals.cpp rename to lldb/source/Plugins/Process/Utility/LinuxSignals.cpp diff --git a/lldb/source/Plugins/Platform/Linux/LinuxSignals.h b/lldb/source/Plugins/Process/Utility/LinuxSignals.h similarity index 100% rename from lldb/source/Plugins/Platform/Linux/LinuxSignals.h rename to lldb/source/Plugins/Process/Utility/LinuxSignals.h diff --git a/lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.cpp b/lldb/source/Plugins/Process/Utility/NetBSDSignals.cpp similarity index 100% rename from lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.cpp rename to lldb/source/Plugins/Process/Utility/NetBSDSignals.cpp diff --git a/lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.h b/lldb/source/Plugins/Process/Utility/NetBSDSignals.h similarity index 100% rename from lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.h rename to lldb/source/Plugins/Process/Utility/NetBSDSignals.h diff --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp index a0f391b9b26ca..9c1b30d5f8024 100644 --- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp +++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp @@ -18,7 +18,6 @@ #include "lldb/Target/ABI.h" #include "lldb/Target/DynamicLoader.h" #include "lldb/Target/MemoryRegionInfo.h" -#include "lldb/Target/Platform.h" #include "lldb/Target/Target.h" #include "lldb/Target/UnixSignals.h" #include "lldb/Utility/DataBufferHeap.h" @@ -224,10 +223,9 @@ Status ProcessElfCore::DoLoadCore() { ArchSpec target_arch = GetTarget().GetArchitecture(); ArchSpec core_arch(m_core_module_sp->GetArchitecture()); target_arch.MergeFrom(core_arch); - GetTarget().SetArchitecture(target_arch, /* set_platform = */ true); - - if (auto platform_sp = GetTarget().GetPlatform()) - SetUnixSignals(platform_sp->GetUnixSignals()); + GetTarget().SetArchitecture(target_arch); + + SetUnixSignals(UnixSignals::Create(GetArchitecture())); // Ensure we found at least one thread that was stopped on a signal. bool siginfo_signal_found = false; diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index c2e60ac2b1797..7b083e1478db0 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -74,7 +74,7 @@ #include "GDBRemoteRegisterContext.h" #include "GDBRemoteRegisterFallback.h" -#include "Plugins/Platform/gdb-server/GDBRemoteSignals.h" +#include "Plugins/Process/Utility/GDBRemoteSignals.h" #include "Plugins/Process/Utility/InferiorCallPOSIX.h" #include "Plugins/Process/Utility/StopInfoMachException.h" #include "ProcessGDBRemote.h" @@ -967,13 +967,15 @@ void ProcessGDBRemote::DidLaunchOrAttach(ArchSpec &process_arch) { MapSupportedStructuredDataPlugins(*supported_packets); // If connected to LLDB ("native-signals+"), use signal defs for - // the remote platform (assuming it's available). If connected to GDB, just - // use the standard set. - auto platform_sp = GetTarget().GetPlatform(); - if (!platform_sp || !m_gdb_comm.UsesNativeSignals()) + // the remote platform. If connected to GDB, just use the standard set. + if (!m_gdb_comm.UsesNativeSignals()) { SetUnixSignals(std::make_shared<GDBRemoteSignals>()); - else { - SetUnixSignals(platform_sp->GetUnixSignals()); + } else { + PlatformSP platform_sp = GetTarget().GetPlatform(); + if (platform_sp && platform_sp->IsConnected()) + SetUnixSignals(platform_sp->GetUnixSignals()); + else + SetUnixSignals(UnixSignals::Create(GetTarget().GetArchitecture())); } } diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp index f082d6f0e8afa..cf6166ecd77b9 100644 --- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp +++ b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp @@ -206,14 +206,12 @@ Status ProcessMinidump::DoLoadCore() { arch.GetArchitectureName()); return error; } - GetTarget().SetArchitecture(arch, /*set_platform = */ true); + GetTarget().SetArchitecture(arch, true /*set_platform*/); m_thread_list = m_minidump_parser->GetThreads(); m_active_exception = m_minidump_parser->GetExceptionStream(); - auto platform_sp = GetTarget().GetPlatform(); - if (platform_sp) - SetUnixSignals(platform_sp->GetUnixSignals()); + SetUnixSignals(UnixSignals::Create(GetArchitecture())); ReadModuleList(); if (ModuleSP module = GetTarget().GetExecutableModule()) diff --git a/lldb/source/Target/CMakeLists.txt b/lldb/source/Target/CMakeLists.txt index 37040294c618c..d3a922c0ffb5b 100644 --- a/lldb/source/Target/CMakeLists.txt +++ b/lldb/source/Target/CMakeLists.txt @@ -86,6 +86,7 @@ add_lldb_library(lldbTarget lldbInterpreter lldbSymbol lldbUtility + lldbPluginProcessUtility LINK_COMPONENTS Support diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp index e0c0e9b689b03..1ddd7596280ee 100644 --- a/lldb/source/Target/Platform.cpp +++ b/lldb/source/Target/Platform.cpp @@ -1672,7 +1672,7 @@ FileSpec Platform::GetModuleCacheRoot() { const char *Platform::GetCacheHostname() { return GetHostname(); } -UnixSignalsSP Platform::GetRemoteUnixSignals() { +const UnixSignalsSP &Platform::GetRemoteUnixSignals() { static const auto s_default_unix_signals_sp = std::make_shared<UnixSignals>(); return s_default_unix_signals_sp; } diff --git a/lldb/source/Target/UnixSignals.cpp b/lldb/source/Target/UnixSignals.cpp index 7c643c05b2f9b..d754537cc4cf4 100644 --- a/lldb/source/Target/UnixSignals.cpp +++ b/lldb/source/Target/UnixSignals.cpp @@ -7,8 +7,10 @@ //===----------------------------------------------------------------------===// #include "lldb/Target/UnixSignals.h" +#include "Plugins/Process/Utility/FreeBSDSignals.h" +#include "Plugins/Process/Utility/LinuxSignals.h" +#include "Plugins/Process/Utility/NetBSDSignals.h" #include "lldb/Host/HostInfo.h" -#include "lldb/Target/Platform.h" #include "lldb/Utility/ArchSpec.h" #include <optional> #include <sstream> @@ -28,25 +30,24 @@ UnixSignals::Signal::Signal(const char *name, bool default_suppress, m_description.assign(description); } -lldb::UnixSignalsSP UnixSignals::CreateForHost() { - static lldb::UnixSignalsSP s_unix_signals_sp; - if (s_unix_signals_sp) - return s_unix_signals_sp; - - auto host_platform_sp = Platform::GetHostPlatform(); - - // If we have no host platform, be resilient and use default UnixSignals. - if (!host_platform_sp) - s_unix_signals_sp = std::make_shared<UnixSignals>(); - else { - s_unix_signals_sp = host_platform_sp->CreateUnixSignals(); - // If the Host platform cannot create a UnixSignals object, fall back to the - // default UnixSignals. This may happen on platforms without a - // UnixSignals implementation (e.g. Windows). - if (!s_unix_signals_sp) - s_unix_signals_sp = std::make_shared<UnixSignals>(); +lldb::UnixSignalsSP UnixSignals::Create(const ArchSpec &arch) { + const auto &triple = arch.GetTriple(); + switch (triple.getOS()) { + case llvm::Triple::Linux: + return std::make_shared<LinuxSignals>(); + case llvm::Triple::FreeBSD: + case llvm::Triple::OpenBSD: + return std::make_shared<FreeBSDSignals>(); + case llvm::Triple::NetBSD: + return std::make_shared<NetBSDSignals>(); + default: + return std::make_shared<UnixSignals>(); } +} +lldb::UnixSignalsSP UnixSignals::CreateForHost() { + static lldb::UnixSignalsSP s_unix_signals_sp = + Create(HostInfo::GetArchitecture()); return s_unix_signals_sp; } diff --git a/lldb/unittests/Process/gdb-remote/CMakeLists.txt b/lldb/unittests/Process/gdb-remote/CMakeLists.txt index 233065609d841..de14dc0169c13 100644 --- a/lldb/unittests/Process/gdb-remote/CMakeLists.txt +++ b/lldb/unittests/Process/gdb-remote/CMakeLists.txt @@ -11,7 +11,7 @@ add_lldb_unittest(ProcessGdbRemoteTests lldbCore lldbHost lldbPluginPlatformMacOSX - lldbPluginPlatformLinux + lldbPluginProcessUtility lldbPluginProcessGDBRemote LLVMTestingSupport diff --git a/lldb/unittests/Process/gdb-remote/GDBRemoteClientBaseTest.cpp b/lldb/unittests/Process/gdb-remote/GDBRemoteClientBaseTest.cpp index 934f0dcb0596f..99d1e12359e72 100644 --- a/lldb/unittests/Process/gdb-remote/GDBRemoteClientBaseTest.cpp +++ b/lldb/unittests/Process/gdb-remote/GDBRemoteClientBaseTest.cpp @@ -9,7 +9,7 @@ #include "GDBRemoteTestUtils.h" -#include "Plugins/Platform/Linux/LinuxSignals.h" +#include "Plugins/Process/Utility/LinuxSignals.h" #include "Plugins/Process/gdb-remote/GDBRemoteClientBase.h" #include "Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.h" #include "lldb/Utility/GDBRemote.h" diff --git a/lldb/unittests/Target/RemoteAwarePlatformTest.cpp b/lldb/unittests/Target/RemoteAwarePlatformTest.cpp index cf80de6bec056..c36bd35c819dd 100644 --- a/lldb/unittests/Target/RemoteAwarePlatformTest.cpp +++ b/lldb/unittests/Target/RemoteAwarePlatformTest.cpp @@ -35,8 +35,6 @@ class RemoteAwarePlatformTester : public RemoteAwarePlatform { MOCK_METHOD2(ResolveRemoteExecutable, std::pair<Status, ModuleSP>(const ModuleSpec &, const FileSpecList *)); - MOCK_METHOD0(CreateUnixSignals, lldb::UnixSignalsSP()); - Status ResolveRemoteExecutable( const ModuleSpec &module_spec, lldb::ModuleSP &exe_module_sp, const FileSpecList *module_search_paths_ptr) /*override*/ @@ -63,7 +61,6 @@ class TargetPlatformTester : public Platform { ProcessSP(ProcessAttachInfo &, Debugger &, Target *, Status &)); MOCK_METHOD0(CalculateTrapHandlerSymbolNames, void()); MOCK_METHOD0(GetUserIDResolver, UserIDResolver &()); - MOCK_METHOD0(CreateUnixSignals, lldb::UnixSignalsSP()); }; namespace { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits