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

Tree @release_34 (Download .tar.gz)

PluginLoader.cpp @release_34

c1b5d09
f976c85
b576c94
 
4ee451d
 
f976c85
b576c94
c1b5d09
13a253a
c1b5d09
 
 
13a253a
551ccae
1f6efa3
d04a8d4
1f6efa3
d04a8d4
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/PluginLoader.h"
#include "llvm/Support/DynamicLibrary.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/Mutex.h"
#include "llvm/Support/raw_ostream.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];
}