marsupial created this revision.

https://reviews.llvm.org/D35070

Files:
  include/lldb/Core/Debugger.h
  include/lldb/lldb-private-types.h
  source/API/SBDebugger.cpp
  source/Core/Debugger.cpp
  source/Core/PluginManager.cpp

Index: source/Core/PluginManager.cpp
===================================================================
--- source/Core/PluginManager.cpp
+++ source/Core/PluginManager.cpp
@@ -52,11 +52,9 @@
 typedef void (*PluginTermCallback)();
 
 struct PluginInfo {
-  PluginInfo() : plugin_init_callback(nullptr), plugin_term_callback(nullptr) {}
-
-  llvm::sys::DynamicLibrary library;
-  PluginInitCallback plugin_init_callback;
-  PluginTermCallback plugin_term_callback;
+  llvm::sys::DynamicLibrary* library = nullptr;
+  PluginInitCallback plugin_init_callback = nullptr;
+  PluginTermCallback plugin_term_callback = nullptr;
 };
 
 typedef std::map<FileSpec, PluginInfo> PluginTerminateMap;
@@ -113,19 +111,19 @@
       std::string pluginLoadError;
       plugin_info.library = llvm::sys::DynamicLibrary::getPermanentLibrary(
           plugin_file_spec.GetPath().c_str(), &pluginLoadError);
-      if (plugin_info.library.isValid()) {
+      if (plugin_info.library) {
         bool success = false;
         plugin_info.plugin_init_callback = CastToFPtr<PluginInitCallback>(
-            plugin_info.library.getAddressOfSymbol("LLDBPluginInitialize"));
+            plugin_info.library->getAddressOfSymbol("LLDBPluginInitialize"));
         if (plugin_info.plugin_init_callback) {
           // Call the plug-in "bool LLDBPluginInitialize(void)" function
           success = plugin_info.plugin_init_callback();
         }
 
         if (success) {
           // It is ok for the "LLDBPluginTerminate" symbol to be nullptr
           plugin_info.plugin_term_callback = CastToFPtr<PluginTermCallback>(
-              plugin_info.library.getAddressOfSymbol("LLDBPluginTerminate"));
+              plugin_info.library->getAddressOfSymbol("LLDBPluginTerminate"));
         } else {
           // The initialize function returned FALSE which means the plug-in
           // might not be
@@ -185,14 +183,12 @@
   std::lock_guard<std::recursive_mutex> guard(GetPluginMapMutex());
   PluginTerminateMap &plugin_map = GetPluginMap();
 
-  PluginTerminateMap::const_iterator pos, end = plugin_map.end();
-  for (pos = plugin_map.begin(); pos != end; ++pos) {
+  for (const auto &pos : plugin_map) {
+    const PluginInfo &plugin = pos.second;
     // Call the plug-in "void LLDBPluginTerminate (void)" function if there
     // is one (if the symbol was not nullptr).
-    if (pos->second.library.isValid()) {
-      if (pos->second.plugin_term_callback)
-        pos->second.plugin_term_callback();
-    }
+    if (plugin.library && plugin.plugin_term_callback)
+      plugin.plugin_term_callback();
   }
   plugin_map.clear();
 }
Index: source/Core/Debugger.cpp
===================================================================
--- source/Core/Debugger.cpp
+++ source/Core/Debugger.cpp
@@ -582,9 +582,8 @@
 
 bool Debugger::LoadPlugin(const FileSpec &spec, Status &error) {
   if (g_load_plugin_callback) {
-    llvm::sys::DynamicLibrary dynlib =
-        g_load_plugin_callback(shared_from_this(), spec, error);
-    if (dynlib.isValid()) {
+    if (llvm::sys::DynamicLibrary *dynlib =
+        g_load_plugin_callback(shared_from_this(), spec, error)) {
       m_loaded_plugins.push_back(dynlib);
       return true;
     }
Index: source/API/SBDebugger.cpp
===================================================================
--- source/API/SBDebugger.cpp
+++ source/API/SBDebugger.cpp
@@ -55,21 +55,20 @@
 using namespace lldb;
 using namespace lldb_private;
 
-static llvm::sys::DynamicLibrary LoadPlugin(const lldb::DebuggerSP &debugger_sp,
-                                            const FileSpec &spec,
-                                            Status &error) {
-  llvm::sys::DynamicLibrary dynlib =
-      llvm::sys::DynamicLibrary::getPermanentLibrary(spec.GetPath().c_str());
-  if (dynlib.isValid()) {
+static llvm::sys::DynamicLibrary *
+LoadPlugin(const lldb::DebuggerSP &debugger_sp, const FileSpec &spec,
+           Status &error) {
+  if (llvm::sys::DynamicLibrary *dynlib =
+      llvm::sys::DynamicLibrary::getPermanentLibrary(spec.GetPath().c_str())) {
     typedef bool (*LLDBCommandPluginInit)(lldb::SBDebugger & debugger);
 
     lldb::SBDebugger debugger_sb(debugger_sp);
     // This calls the bool lldb::PluginInitialize(lldb::SBDebugger debugger)
     // function.
     // TODO: mangle this differently for your system - on OSX, the first
     // underscore needs to be removed and the second one stays
     LLDBCommandPluginInit init_func =
-        (LLDBCommandPluginInit)dynlib.getAddressOfSymbol(
+        (LLDBCommandPluginInit)dynlib->getAddressOfSymbol(
             "_ZN4lldb16PluginInitializeENS_10SBDebuggerE");
     if (init_func) {
       if (init_func(debugger_sb))
@@ -88,7 +87,7 @@
     else
       error.SetErrorString("no such file");
   }
-  return llvm::sys::DynamicLibrary();
+  return nullptr;
 }
 
 static llvm::ManagedStatic<SystemLifetimeManager> g_debugger_lifetime;
Index: include/lldb/lldb-private-types.h
===================================================================
--- include/lldb/lldb-private-types.h
+++ include/lldb/lldb-private-types.h
@@ -26,7 +26,7 @@
 class Platform;
 class ExecutionContext;
 
-typedef llvm::sys::DynamicLibrary (*LoadPluginCallbackType)(
+typedef llvm::sys::DynamicLibrary* (*LoadPluginCallbackType)(
     const lldb::DebuggerSP &debugger_sp, const FileSpec &spec, Status &error);
 
 //----------------------------------------------------------------------
Index: include/lldb/Core/Debugger.h
===================================================================
--- include/lldb/Core/Debugger.h
+++ include/lldb/Core/Debugger.h
@@ -402,7 +402,7 @@
   std::shared_ptr<llvm::raw_ostream> m_log_callback_stream_sp;
   ConstString m_instance_name;
   static LoadPluginCallbackType g_load_plugin_callback;
-  typedef std::vector<llvm::sys::DynamicLibrary> LoadedPluginsList;
+  typedef std::vector<llvm::sys::DynamicLibrary*> LoadedPluginsList;
   LoadedPluginsList m_loaded_plugins;
   HostThread m_event_handler_thread;
   HostThread m_io_handler_thread;
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to