180814287SRaphael Isemann //===-- OperatingSystem.cpp -----------------------------------------------===//
256d9a1b3SGreg Clayton //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
656d9a1b3SGreg Clayton //
756d9a1b3SGreg Clayton //===----------------------------------------------------------------------===//
856d9a1b3SGreg Clayton 
99394d772SEugene Zelenko #include "lldb/Target/OperatingSystem.h"
1056d9a1b3SGreg Clayton #include "lldb/Core/PluginManager.h"
11160c9d81SGreg Clayton #include "lldb/Target/Thread.h"
1256d9a1b3SGreg Clayton 
1356d9a1b3SGreg Clayton using namespace lldb;
1456d9a1b3SGreg Clayton using namespace lldb_private;
1556d9a1b3SGreg Clayton 
FindPlugin(Process * process,const char * plugin_name)16b9c1b51eSKate Stone OperatingSystem *OperatingSystem::FindPlugin(Process *process,
17b9c1b51eSKate Stone                                              const char *plugin_name) {
189394d772SEugene Zelenko   OperatingSystemCreateInstance create_callback = nullptr;
19b9c1b51eSKate Stone   if (plugin_name) {
20b9c1b51eSKate Stone     create_callback =
21b9c1b51eSKate Stone         PluginManager::GetOperatingSystemCreateCallbackForPluginName(
22*2ace1e57SPavel Labath             plugin_name);
23b9c1b51eSKate Stone     if (create_callback) {
24d5b44036SJonas Devlieghere       std::unique_ptr<OperatingSystem> instance_up(
25b9c1b51eSKate Stone           create_callback(process, true));
26d5b44036SJonas Devlieghere       if (instance_up)
27d5b44036SJonas Devlieghere         return instance_up.release();
2856d9a1b3SGreg Clayton     }
29b9c1b51eSKate Stone   } else {
30b9c1b51eSKate Stone     for (uint32_t idx = 0;
31b9c1b51eSKate Stone          (create_callback =
32b9c1b51eSKate Stone               PluginManager::GetOperatingSystemCreateCallbackAtIndex(idx)) !=
33b9c1b51eSKate Stone          nullptr;
34b9c1b51eSKate Stone          ++idx) {
35d5b44036SJonas Devlieghere       std::unique_ptr<OperatingSystem> instance_up(
36b9c1b51eSKate Stone           create_callback(process, false));
37d5b44036SJonas Devlieghere       if (instance_up)
38d5b44036SJonas Devlieghere         return instance_up.release();
3956d9a1b3SGreg Clayton     }
4056d9a1b3SGreg Clayton   }
419394d772SEugene Zelenko   return nullptr;
4256d9a1b3SGreg Clayton }
4356d9a1b3SGreg Clayton 
OperatingSystem(Process * process)44b9c1b51eSKate Stone OperatingSystem::OperatingSystem(Process *process) : m_process(process) {}
4556d9a1b3SGreg Clayton 
IsOperatingSystemPluginThread(const lldb::ThreadSP & thread_sp)46b9c1b51eSKate Stone bool OperatingSystem::IsOperatingSystemPluginThread(
47b9c1b51eSKate Stone     const lldb::ThreadSP &thread_sp) {
48160c9d81SGreg Clayton   if (thread_sp)
49160c9d81SGreg Clayton     return thread_sp->IsOperatingSystemPluginThread();
50160c9d81SGreg Clayton   return false;
51160c9d81SGreg Clayton }
52