1*30fdc8d8SChris Lattner //===-- DynamicLoader.cpp ---------------------------------------*- C++ -*-===//
2*30fdc8d8SChris Lattner //
3*30fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
4*30fdc8d8SChris Lattner //
5*30fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
6*30fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
7*30fdc8d8SChris Lattner //
8*30fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
9*30fdc8d8SChris Lattner 
10*30fdc8d8SChris Lattner #include "lldb/lldb-private.h"
11*30fdc8d8SChris Lattner #include "lldb/Target/DynamicLoader.h"
12*30fdc8d8SChris Lattner #include "lldb/Core/PluginManager.h"
13*30fdc8d8SChris Lattner 
14*30fdc8d8SChris Lattner using namespace lldb;
15*30fdc8d8SChris Lattner using namespace lldb_private;
16*30fdc8d8SChris Lattner 
17*30fdc8d8SChris Lattner DynamicLoader*
18*30fdc8d8SChris Lattner DynamicLoader::FindPlugin (Process *process, const char *plugin_name)
19*30fdc8d8SChris Lattner {
20*30fdc8d8SChris Lattner     DynamicLoaderCreateInstance create_callback = NULL;
21*30fdc8d8SChris Lattner     if (plugin_name)
22*30fdc8d8SChris Lattner     {
23*30fdc8d8SChris Lattner         create_callback  = PluginManager::GetDynamicLoaderCreateCallbackForPluginName (plugin_name);
24*30fdc8d8SChris Lattner         if (create_callback)
25*30fdc8d8SChris Lattner         {
26*30fdc8d8SChris Lattner             std::auto_ptr<DynamicLoader> instance_ap(create_callback(process));
27*30fdc8d8SChris Lattner             if (instance_ap.get())
28*30fdc8d8SChris Lattner                 return instance_ap.release();
29*30fdc8d8SChris Lattner         }
30*30fdc8d8SChris Lattner     }
31*30fdc8d8SChris Lattner     else
32*30fdc8d8SChris Lattner     {
33*30fdc8d8SChris Lattner         for (uint32_t idx = 0; (create_callback = PluginManager::GetDynamicLoaderCreateCallbackAtIndex(idx)) != NULL; ++idx)
34*30fdc8d8SChris Lattner         {
35*30fdc8d8SChris Lattner             std::auto_ptr<DynamicLoader> instance_ap(create_callback(process));
36*30fdc8d8SChris Lattner             if (instance_ap.get())
37*30fdc8d8SChris Lattner                 return instance_ap.release();
38*30fdc8d8SChris Lattner         }
39*30fdc8d8SChris Lattner     }
40*30fdc8d8SChris Lattner     return NULL;
41*30fdc8d8SChris Lattner }
42*30fdc8d8SChris Lattner 
43*30fdc8d8SChris Lattner 
44*30fdc8d8SChris Lattner //----------------------------------------------------------------------
45*30fdc8d8SChris Lattner // DynamicLoader constructor
46*30fdc8d8SChris Lattner //----------------------------------------------------------------------
47*30fdc8d8SChris Lattner DynamicLoader::DynamicLoader(Process *process) :
48*30fdc8d8SChris Lattner     m_process (process),
49*30fdc8d8SChris Lattner     m_stop_when_images_change(false)    // Stop the process by default when a process' images change
50*30fdc8d8SChris Lattner {
51*30fdc8d8SChris Lattner }
52*30fdc8d8SChris Lattner 
53*30fdc8d8SChris Lattner //----------------------------------------------------------------------
54*30fdc8d8SChris Lattner // Destructor
55*30fdc8d8SChris Lattner //----------------------------------------------------------------------
56*30fdc8d8SChris Lattner DynamicLoader::~DynamicLoader()
57*30fdc8d8SChris Lattner {
58*30fdc8d8SChris Lattner }
59*30fdc8d8SChris Lattner 
60*30fdc8d8SChris Lattner //----------------------------------------------------------------------
61*30fdc8d8SChris Lattner // Accessosors to the global setting as to wether to stop at image
62*30fdc8d8SChris Lattner // (shared library) loading/unloading.
63*30fdc8d8SChris Lattner //----------------------------------------------------------------------
64*30fdc8d8SChris Lattner bool
65*30fdc8d8SChris Lattner DynamicLoader::GetStopWhenImagesChange () const
66*30fdc8d8SChris Lattner {
67*30fdc8d8SChris Lattner     return m_stop_when_images_change;
68*30fdc8d8SChris Lattner }
69*30fdc8d8SChris Lattner 
70*30fdc8d8SChris Lattner void
71*30fdc8d8SChris Lattner DynamicLoader::SetStopWhenImagesChange (bool stop)
72*30fdc8d8SChris Lattner {
73*30fdc8d8SChris Lattner     m_stop_when_images_change = stop;
74*30fdc8d8SChris Lattner }
75*30fdc8d8SChris Lattner 
76