xref: /openbsd-src/gnu/llvm/lldb/source/Target/OperatingSystem.cpp (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1dda28197Spatrick //===-- OperatingSystem.cpp -----------------------------------------------===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9061da546Spatrick #include "lldb/Target/OperatingSystem.h"
10061da546Spatrick #include "lldb/Core/PluginManager.h"
11061da546Spatrick #include "lldb/Target/Thread.h"
12061da546Spatrick 
13061da546Spatrick using namespace lldb;
14061da546Spatrick using namespace lldb_private;
15061da546Spatrick 
FindPlugin(Process * process,const char * plugin_name)16061da546Spatrick OperatingSystem *OperatingSystem::FindPlugin(Process *process,
17061da546Spatrick                                              const char *plugin_name) {
18061da546Spatrick   OperatingSystemCreateInstance create_callback = nullptr;
19061da546Spatrick   if (plugin_name) {
20061da546Spatrick     create_callback =
21061da546Spatrick         PluginManager::GetOperatingSystemCreateCallbackForPluginName(
22*f6aab3d8Srobert             plugin_name);
23061da546Spatrick     if (create_callback) {
24061da546Spatrick       std::unique_ptr<OperatingSystem> instance_up(
25061da546Spatrick           create_callback(process, true));
26061da546Spatrick       if (instance_up)
27061da546Spatrick         return instance_up.release();
28061da546Spatrick     }
29061da546Spatrick   } else {
30061da546Spatrick     for (uint32_t idx = 0;
31061da546Spatrick          (create_callback =
32061da546Spatrick               PluginManager::GetOperatingSystemCreateCallbackAtIndex(idx)) !=
33061da546Spatrick          nullptr;
34061da546Spatrick          ++idx) {
35061da546Spatrick       std::unique_ptr<OperatingSystem> instance_up(
36061da546Spatrick           create_callback(process, false));
37061da546Spatrick       if (instance_up)
38061da546Spatrick         return instance_up.release();
39061da546Spatrick     }
40061da546Spatrick   }
41061da546Spatrick   return nullptr;
42061da546Spatrick }
43061da546Spatrick 
OperatingSystem(Process * process)44061da546Spatrick OperatingSystem::OperatingSystem(Process *process) : m_process(process) {}
45061da546Spatrick 
IsOperatingSystemPluginThread(const lldb::ThreadSP & thread_sp)46061da546Spatrick bool OperatingSystem::IsOperatingSystemPluginThread(
47061da546Spatrick     const lldb::ThreadSP &thread_sp) {
48061da546Spatrick   if (thread_sp)
49061da546Spatrick     return thread_sp->IsOperatingSystemPluginThread();
50061da546Spatrick   return false;
51061da546Spatrick }
52