180814287SRaphael Isemann //===-- JITLoaderList.cpp -------------------------------------------------===//
24b047f23SGreg 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
64b047f23SGreg Clayton //
74b047f23SGreg Clayton //===----------------------------------------------------------------------===//
84b047f23SGreg Clayton 
94b047f23SGreg Clayton #include "lldb/Target/JITLoader.h"
104b047f23SGreg Clayton #include "lldb/Target/JITLoaderList.h"
11b9c1b51eSKate Stone #include "lldb/lldb-private.h"
124b047f23SGreg Clayton 
134b047f23SGreg Clayton using namespace lldb;
144b047f23SGreg Clayton using namespace lldb_private;
154b047f23SGreg Clayton 
JITLoaderList()16b9c1b51eSKate Stone JITLoaderList::JITLoaderList() : m_jit_loaders_vec(), m_jit_loaders_mutex() {}
174b047f23SGreg Clayton 
18*fd2433e1SJonas Devlieghere JITLoaderList::~JITLoaderList() = default;
194b047f23SGreg Clayton 
Append(const JITLoaderSP & jit_loader_sp)20b9c1b51eSKate Stone void JITLoaderList::Append(const JITLoaderSP &jit_loader_sp) {
2116ff8604SSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(m_jit_loaders_mutex);
224b047f23SGreg Clayton   m_jit_loaders_vec.push_back(jit_loader_sp);
234b047f23SGreg Clayton }
244b047f23SGreg Clayton 
Remove(const JITLoaderSP & jit_loader_sp)25b9c1b51eSKate Stone void JITLoaderList::Remove(const JITLoaderSP &jit_loader_sp) {
2616ff8604SSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(m_jit_loaders_mutex);
274b047f23SGreg Clayton   m_jit_loaders_vec.erase(std::remove(m_jit_loaders_vec.begin(),
284b047f23SGreg Clayton                                       m_jit_loaders_vec.end(), jit_loader_sp),
294b047f23SGreg Clayton                           m_jit_loaders_vec.end());
304b047f23SGreg Clayton }
314b047f23SGreg Clayton 
GetSize() const32b9c1b51eSKate Stone size_t JITLoaderList::GetSize() const { return m_jit_loaders_vec.size(); }
334b047f23SGreg Clayton 
GetLoaderAtIndex(size_t idx)34b9c1b51eSKate Stone JITLoaderSP JITLoaderList::GetLoaderAtIndex(size_t idx) {
3516ff8604SSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(m_jit_loaders_mutex);
364b047f23SGreg Clayton   return m_jit_loaders_vec[idx];
374b047f23SGreg Clayton }
384b047f23SGreg Clayton 
DidLaunch()39b9c1b51eSKate Stone void JITLoaderList::DidLaunch() {
4016ff8604SSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(m_jit_loaders_mutex);
414b047f23SGreg Clayton   for (auto const &jit_loader : m_jit_loaders_vec)
424b047f23SGreg Clayton     jit_loader->DidLaunch();
434b047f23SGreg Clayton }
444b047f23SGreg Clayton 
DidAttach()45b9c1b51eSKate Stone void JITLoaderList::DidAttach() {
4616ff8604SSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(m_jit_loaders_mutex);
474b047f23SGreg Clayton   for (auto const &jit_loader : m_jit_loaders_vec)
484b047f23SGreg Clayton     jit_loader->DidAttach();
494b047f23SGreg Clayton }
50eb4d0607SAndrew MacPherson 
ModulesDidLoad(ModuleList & module_list)51b9c1b51eSKate Stone void JITLoaderList::ModulesDidLoad(ModuleList &module_list) {
5216ff8604SSaleem Abdulrasool   std::lock_guard<std::recursive_mutex> guard(m_jit_loaders_mutex);
53eb4d0607SAndrew MacPherson   for (auto const &jit_loader : m_jit_loaders_vec)
54eb4d0607SAndrew MacPherson     jit_loader->ModulesDidLoad(module_list);
55eb4d0607SAndrew MacPherson }
56