130fdc8d8SChris Lattner //===-- DynamicLoader.cpp ---------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
1030fdc8d8SChris Lattner #include "lldb/lldb-private.h"
1130fdc8d8SChris Lattner #include "lldb/Target/DynamicLoader.h"
122995077dSJim Ingham #include "lldb/Target/Process.h"
1330fdc8d8SChris Lattner #include "lldb/Core/PluginManager.h"
1430fdc8d8SChris Lattner 
1530fdc8d8SChris Lattner using namespace lldb;
1630fdc8d8SChris Lattner using namespace lldb_private;
1730fdc8d8SChris Lattner 
1830fdc8d8SChris Lattner DynamicLoader*
1930fdc8d8SChris Lattner DynamicLoader::FindPlugin (Process *process, const char *plugin_name)
2030fdc8d8SChris Lattner {
2130fdc8d8SChris Lattner     DynamicLoaderCreateInstance create_callback = NULL;
2230fdc8d8SChris Lattner     if (plugin_name)
2330fdc8d8SChris Lattner     {
24*57abc5d6SGreg Clayton         ConstString const_plugin_name(plugin_name);
25*57abc5d6SGreg Clayton         create_callback  = PluginManager::GetDynamicLoaderCreateCallbackForPluginName (const_plugin_name);
2630fdc8d8SChris Lattner         if (create_callback)
2730fdc8d8SChris Lattner         {
287b0992d9SGreg Clayton             std::unique_ptr<DynamicLoader> instance_ap(create_callback(process, true));
2930fdc8d8SChris Lattner             if (instance_ap.get())
3030fdc8d8SChris Lattner                 return instance_ap.release();
3130fdc8d8SChris Lattner         }
3230fdc8d8SChris Lattner     }
3330fdc8d8SChris Lattner     else
3430fdc8d8SChris Lattner     {
3530fdc8d8SChris Lattner         for (uint32_t idx = 0; (create_callback = PluginManager::GetDynamicLoaderCreateCallbackAtIndex(idx)) != NULL; ++idx)
3630fdc8d8SChris Lattner         {
377b0992d9SGreg Clayton             std::unique_ptr<DynamicLoader> instance_ap(create_callback(process, false));
3830fdc8d8SChris Lattner             if (instance_ap.get())
3930fdc8d8SChris Lattner                 return instance_ap.release();
4030fdc8d8SChris Lattner         }
4130fdc8d8SChris Lattner     }
4230fdc8d8SChris Lattner     return NULL;
4330fdc8d8SChris Lattner }
4430fdc8d8SChris Lattner 
4530fdc8d8SChris Lattner 
4630fdc8d8SChris Lattner //----------------------------------------------------------------------
4730fdc8d8SChris Lattner // DynamicLoader constructor
4830fdc8d8SChris Lattner //----------------------------------------------------------------------
4930fdc8d8SChris Lattner DynamicLoader::DynamicLoader(Process *process) :
502995077dSJim Ingham     m_process (process)
5130fdc8d8SChris Lattner {
5230fdc8d8SChris Lattner }
5330fdc8d8SChris Lattner 
5430fdc8d8SChris Lattner //----------------------------------------------------------------------
5530fdc8d8SChris Lattner // Destructor
5630fdc8d8SChris Lattner //----------------------------------------------------------------------
5730fdc8d8SChris Lattner DynamicLoader::~DynamicLoader()
5830fdc8d8SChris Lattner {
5930fdc8d8SChris Lattner }
6030fdc8d8SChris Lattner 
6130fdc8d8SChris Lattner //----------------------------------------------------------------------
62ed8a705cSGreg Clayton // Accessosors to the global setting as to whether to stop at image
6330fdc8d8SChris Lattner // (shared library) loading/unloading.
6430fdc8d8SChris Lattner //----------------------------------------------------------------------
6530fdc8d8SChris Lattner bool
6630fdc8d8SChris Lattner DynamicLoader::GetStopWhenImagesChange () const
6730fdc8d8SChris Lattner {
682995077dSJim Ingham     return m_process->GetStopOnSharedLibraryEvents();
6930fdc8d8SChris Lattner }
7030fdc8d8SChris Lattner 
7130fdc8d8SChris Lattner void
7230fdc8d8SChris Lattner DynamicLoader::SetStopWhenImagesChange (bool stop)
7330fdc8d8SChris Lattner {
742995077dSJim Ingham     m_process->SetStopOnSharedLibraryEvents (stop);
7530fdc8d8SChris Lattner }
7630fdc8d8SChris Lattner 
77