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"
1230fdc8d8SChris Lattner #include "lldb/Core/PluginManager.h"
1330fdc8d8SChris Lattner 
1430fdc8d8SChris Lattner using namespace lldb;
1530fdc8d8SChris Lattner using namespace lldb_private;
1630fdc8d8SChris Lattner 
1730fdc8d8SChris Lattner DynamicLoader*
1830fdc8d8SChris Lattner DynamicLoader::FindPlugin (Process *process, const char *plugin_name)
1930fdc8d8SChris Lattner {
2030fdc8d8SChris Lattner     DynamicLoaderCreateInstance create_callback = NULL;
2130fdc8d8SChris Lattner     if (plugin_name)
2230fdc8d8SChris Lattner     {
2330fdc8d8SChris Lattner         create_callback  = PluginManager::GetDynamicLoaderCreateCallbackForPluginName (plugin_name);
2430fdc8d8SChris Lattner         if (create_callback)
2530fdc8d8SChris Lattner         {
2630fdc8d8SChris Lattner             std::auto_ptr<DynamicLoader> instance_ap(create_callback(process));
2730fdc8d8SChris Lattner             if (instance_ap.get())
2830fdc8d8SChris Lattner                 return instance_ap.release();
2930fdc8d8SChris Lattner         }
3030fdc8d8SChris Lattner     }
3130fdc8d8SChris Lattner     else
3230fdc8d8SChris Lattner     {
3330fdc8d8SChris Lattner         for (uint32_t idx = 0; (create_callback = PluginManager::GetDynamicLoaderCreateCallbackAtIndex(idx)) != NULL; ++idx)
3430fdc8d8SChris Lattner         {
3530fdc8d8SChris Lattner             std::auto_ptr<DynamicLoader> instance_ap(create_callback(process));
3630fdc8d8SChris Lattner             if (instance_ap.get())
3730fdc8d8SChris Lattner                 return instance_ap.release();
3830fdc8d8SChris Lattner         }
3930fdc8d8SChris Lattner     }
4030fdc8d8SChris Lattner     return NULL;
4130fdc8d8SChris Lattner }
4230fdc8d8SChris Lattner 
4330fdc8d8SChris Lattner 
4430fdc8d8SChris Lattner //----------------------------------------------------------------------
4530fdc8d8SChris Lattner // DynamicLoader constructor
4630fdc8d8SChris Lattner //----------------------------------------------------------------------
4730fdc8d8SChris Lattner DynamicLoader::DynamicLoader(Process *process) :
4830fdc8d8SChris Lattner     m_process (process),
4930fdc8d8SChris Lattner     m_stop_when_images_change(false)    // Stop the process by default when a process' images change
5030fdc8d8SChris Lattner {
5130fdc8d8SChris Lattner }
5230fdc8d8SChris Lattner 
5330fdc8d8SChris Lattner //----------------------------------------------------------------------
5430fdc8d8SChris Lattner // Destructor
5530fdc8d8SChris Lattner //----------------------------------------------------------------------
5630fdc8d8SChris Lattner DynamicLoader::~DynamicLoader()
5730fdc8d8SChris Lattner {
5830fdc8d8SChris Lattner }
5930fdc8d8SChris Lattner 
6030fdc8d8SChris Lattner //----------------------------------------------------------------------
61*ed8a705cSGreg Clayton // Accessosors to the global setting as to whether to stop at image
6230fdc8d8SChris Lattner // (shared library) loading/unloading.
6330fdc8d8SChris Lattner //----------------------------------------------------------------------
6430fdc8d8SChris Lattner bool
6530fdc8d8SChris Lattner DynamicLoader::GetStopWhenImagesChange () const
6630fdc8d8SChris Lattner {
6730fdc8d8SChris Lattner     return m_stop_when_images_change;
6830fdc8d8SChris Lattner }
6930fdc8d8SChris Lattner 
7030fdc8d8SChris Lattner void
7130fdc8d8SChris Lattner DynamicLoader::SetStopWhenImagesChange (bool stop)
7230fdc8d8SChris Lattner {
7330fdc8d8SChris Lattner     m_stop_when_images_change = stop;
7430fdc8d8SChris Lattner }
7530fdc8d8SChris Lattner 
76