[Lldb-commits] [lldb] r255260 - Add modules downloaded by ModuleCache to the global ModuleList

Tamas Berghammer via lldb-commits lldb-commits at lists.llvm.org
Thu Dec 10 09:08:23 PST 2015


Author: tberghammer
Date: Thu Dec 10 11:08:23 2015
New Revision: 255260

URL: http://llvm.org/viewvc/llvm-project?rev=255260&view=rev
Log:
Add modules downloaded by ModuleCache to the global ModuleList

Adding the modules to the global module list eleminate issues in the
case when a module is unloaded from the target but some object (e.g.
breakpoint) still referencing them with weak pointers. It also speeds
up the case when we load, unload, load the same shared library because
the global module cache will keep the parsed debug info around between
the 2 load (this scenario happens for some code on android).

Differential revision: http://reviews.llvm.org/D15415

Modified:
    lldb/trunk/source/Utility/ModuleCache.cpp

Modified: lldb/trunk/source/Utility/ModuleCache.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/ModuleCache.cpp?rev=255260&r1=255259&r2=255260&view=diff
==============================================================================
--- lldb/trunk/source/Utility/ModuleCache.cpp (original)
+++ lldb/trunk/source/Utility/ModuleCache.cpp Thu Dec 10 11:08:23 2015
@@ -11,6 +11,7 @@
 
 #include "lldb/Core/Log.h"
 #include "lldb/Core/Module.h"
+#include "lldb/Core/ModuleList.h"
 #include "lldb/Core/ModuleSpec.h"
 #include "lldb/Host/File.h"
 #include "lldb/Host/FileSystem.h"
@@ -234,7 +235,7 @@ ModuleCache::Get (const FileSpec &root_d
         return Error ("Module %s has invalid file size", module_file_path.GetPath ().c_str ());
 
     // We may have already cached module but downloaded from an another host - in this case let's create a link to it.
-    const auto error = CreateHostSysRootModuleLink(root_dir_spec, hostname, module_spec.GetFileSpec(), module_file_path, false);
+    auto error = CreateHostSysRootModuleLink(root_dir_spec, hostname, module_spec.GetFileSpec(), module_file_path, false);
     if (error.Fail ())
         return Error ("Failed to create link to %s: %s", module_file_path.GetPath().c_str(), error.AsCString());
 
@@ -242,15 +243,20 @@ ModuleCache::Get (const FileSpec &root_d
     cached_module_spec.GetUUID ().Clear ();  // Clear UUID since it may contain md5 content hash instead of real UUID.
     cached_module_spec.GetFileSpec () = module_file_path;
     cached_module_spec.GetPlatformFileSpec () = module_spec.GetFileSpec ();
-    cached_module_sp.reset (new Module (cached_module_spec));
+    
+    error = ModuleList::GetSharedModule(cached_module_spec,
+                                        cached_module_sp,
+                                        nullptr,
+                                        nullptr,
+                                        did_create_ptr,
+                                        false);
+    if (error.Fail())
+        return error;
 
     FileSpec symfile_spec = GetSymbolFileSpec(cached_module_sp->GetFileSpec ());
     if (symfile_spec.Exists ())
         cached_module_sp->SetSymbolFileFileSpec (symfile_spec);
 
-    if (did_create_ptr)
-        *did_create_ptr = true;
-
     m_loaded_modules.insert (std::make_pair (module_spec.GetUUID ().GetAsString (), cached_module_sp));
 
     return Error ();




More information about the lldb-commits mailing list