LCOV - code coverage report
Current view: top level - lib/Support - PluginLoader.cpp (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 11 13 84.6 %
Date: 2018-10-20 13:21:21 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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
      15             : #include "llvm/Support/PluginLoader.h"
      16             : #include "llvm/Support/DynamicLibrary.h"
      17             : #include "llvm/Support/ManagedStatic.h"
      18             : #include "llvm/Support/Mutex.h"
      19             : #include "llvm/Support/raw_ostream.h"
      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          87 : void PluginLoader::operator=(const std::string &Filename) {
      27          87 :   sys::SmartScopedLock<true> Lock(*PluginsLock);
      28             :   std::string Error;
      29          87 :   if (sys::DynamicLibrary::LoadLibraryPermanently(Filename.c_str(), &Error)) {
      30           0 :     errs() << "Error opening '" << Filename << "': " << Error
      31           0 :            << "\n  -load request ignored.\n";
      32             :   } else {
      33          87 :     Plugins->push_back(Filename);
      34             :   }
      35          87 : }
      36             : 
      37         198 : unsigned PluginLoader::getNumPlugins() {
      38         198 :   sys::SmartScopedLock<true> Lock(*PluginsLock);
      39         594 :   return Plugins.isConstructed() ? Plugins->size() : 0;
      40             : }
      41             : 
      42         198 : std::string &PluginLoader::getPlugin(unsigned num) {
      43         198 :   sys::SmartScopedLock<true> Lock(*PluginsLock);
      44             :   assert(Plugins.isConstructed() && num < Plugins->size() &&
      45             :          "Asking for an out of bounds plugin");
      46         198 :   return (*Plugins)[num];
      47             : }

Generated by: LCOV version 1.13