aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Target/UnixSignals.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Target/UnixSignals.cpp')
-rw-r--r--lldb/source/Target/UnixSignals.cpp37
1 files changed, 18 insertions, 19 deletions
diff --git a/lldb/source/Target/UnixSignals.cpp b/lldb/source/Target/UnixSignals.cpp
index d754537..7c643c0 100644
--- a/lldb/source/Target/UnixSignals.cpp
+++ b/lldb/source/Target/UnixSignals.cpp
@@ -7,10 +7,8 @@
//===----------------------------------------------------------------------===//
#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>
@@ -30,24 +28,25 @@ UnixSignals::Signal::Signal(const char *name, bool default_suppress,
m_description.assign(description);
}
-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;
+ 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::CreateForHost() {
- static lldb::UnixSignalsSP s_unix_signals_sp =
- Create(HostInfo::GetArchitecture());
return s_unix_signals_sp;
}