llvm.org GIT mirror llvm / release_29 lib / Support / PluginLoader.cpp
release_29

Tree @release_29 (Download .tar.gz)

PluginLoader.cpp @release_29

c1b5d09
f976c85
b576c94
 
4ee451d
 
f976c85
b576c94
c1b5d09
13a253a
c1b5d09
 
 
13a253a
e7d3af5
551ccae
d9ea85a
1f6efa3
 
4b93476
2cdd21c
d0fde30
e7d3af5
61ffc0c
4b93476
13a253a
a9d1f2c
17aa9d3
 
d9ea85a
 
17aa9d3
 
 
c1b5d09
4b93476
17aa9d3
a9d1f2c
e7d3af5
4b93476
 
17aa9d3
a9d1f2c
e7d3af5
 
17aa9d3
4b93476
//===-- PluginLoader.cpp - Implement -load command line option ------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the -load <plugin> command line option handler.
//
//===----------------------------------------------------------------------===//

#define DONT_GET_PLUGIN_LOADER_OPTION
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/PluginLoader.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/DynamicLibrary.h"
#include "llvm/Support/Mutex.h"
#include <vector>
using namespace llvm;

static ManagedStatic<std::vector<std::string> > Plugins;
static ManagedStatic<sys::SmartMutex<true> > PluginsLock;

void PluginLoader::operator=(const std::string &Filename) {
  sys::SmartScopedLock<true> Lock(*PluginsLock);
  std::string Error;
  if (sys::DynamicLibrary::LoadLibraryPermanently(Filename.c_str(), &Error)) {
    errs() << "Error opening '" << Filename << "': " << Error
           << "\n  -load request ignored.\n";
  } else {
    Plugins->push_back(Filename);
  }
}

unsigned PluginLoader::getNumPlugins() {
  sys::SmartScopedLock<true> Lock(*PluginsLock);
  return Plugins.isConstructed() ? Plugins->size() : 0;
}

std::string &PluginLoader::getPlugin(unsigned num) {
  sys::SmartScopedLock<true> Lock(*PluginsLock);
  assert(Plugins.isConstructed() && num < Plugins->size() &&
         "Asking for an out of bounds plugin");
  return (*Plugins)[num];
}