]>
Commit | Line | Data |
---|---|---|
223e47cc LB |
1 | //===-- PluginLoader.cpp - Implement -load command line option ------------===// |
2 | // | |
3 | // The LLVM Compiler Infrastructure | |
4 | // | |
5 | // This file is distributed under the University of Illinois Open Source | |
6 | // License. See LICENSE.TXT for details. | |
7 | // | |
8 | //===----------------------------------------------------------------------===// | |
9 | // | |
10 | // This file implements the -load <plugin> command line option handler. | |
11 | // | |
12 | //===----------------------------------------------------------------------===// | |
13 | ||
14 | #define DONT_GET_PLUGIN_LOADER_OPTION | |
223e47cc | 15 | #include "llvm/Support/PluginLoader.h" |
223e47cc | 16 | #include "llvm/Support/DynamicLibrary.h" |
970d7e83 | 17 | #include "llvm/Support/ManagedStatic.h" |
223e47cc | 18 | #include "llvm/Support/Mutex.h" |
970d7e83 | 19 | #include "llvm/Support/raw_ostream.h" |
223e47cc LB |
20 | #include <vector> |
21 | using namespace llvm; | |
22 | ||
23 | static ManagedStatic<std::vector<std::string> > Plugins; | |
24 | static ManagedStatic<sys::SmartMutex<true> > PluginsLock; | |
25 | ||
26 | void PluginLoader::operator=(const std::string &Filename) { | |
27 | sys::SmartScopedLock<true> Lock(*PluginsLock); | |
28 | std::string Error; | |
29 | if (sys::DynamicLibrary::LoadLibraryPermanently(Filename.c_str(), &Error)) { | |
30 | errs() << "Error opening '" << Filename << "': " << Error | |
31 | << "\n -load request ignored.\n"; | |
32 | } else { | |
33 | Plugins->push_back(Filename); | |
34 | } | |
35 | } | |
36 | ||
37 | unsigned PluginLoader::getNumPlugins() { | |
38 | sys::SmartScopedLock<true> Lock(*PluginsLock); | |
39 | return Plugins.isConstructed() ? Plugins->size() : 0; | |
40 | } | |
41 | ||
42 | std::string &PluginLoader::getPlugin(unsigned num) { | |
43 | sys::SmartScopedLock<true> Lock(*PluginsLock); | |
44 | assert(Plugins.isConstructed() && num < Plugins->size() && | |
45 | "Asking for an out of bounds plugin"); | |
46 | return (*Plugins)[num]; | |
47 | } |