@@ -253,23 +253,23 @@ Platform::GetSharedModule (const ModuleSpec &module_spec,
253
253
ModuleSP *old_module_sp_ptr,
254
254
bool *did_create_ptr)
255
255
{
256
- if (! IsHost () && GetGlobalPlatformProperties ()-> GetUseModuleCache ())
257
- {
258
- // Use caching only when talking to a remote platform.
259
- if ( GetCachedSharedModule (module_spec, process, module_sp))
260
- {
261
- if ( did_create_ptr)
262
- *did_create_ptr = true ;
263
-
264
- return Error ();
265
- }
266
- }
267
- return ModuleList::GetSharedModule (module_spec,
268
- module_sp,
269
- module_search_paths_ptr,
270
- old_module_sp_ptr,
271
- did_create_ptr ,
272
- false );
256
+ if (IsHost ())
257
+ return ModuleList::GetSharedModule (module_spec,
258
+ module_sp,
259
+ module_search_paths_ptr,
260
+ old_module_sp_ptr,
261
+ did_create_ptr,
262
+ false ) ;
263
+
264
+ return GetRemoteSharedModule (module_spec,
265
+ process,
266
+ module_sp,
267
+ [&]( const ModuleSpec &spec)
268
+ {
269
+ return ModuleList::GetSharedModule (
270
+ spec, module_sp, module_search_paths_ptr, old_module_sp_ptr, did_create_ptr, false );
271
+ } ,
272
+ did_create_ptr );
273
273
}
274
274
275
275
bool
@@ -1779,66 +1779,80 @@ Platform::LoadCachedExecutable (const ModuleSpec &module_spec,
1779
1779
const FileSpecList *module_search_paths_ptr,
1780
1780
Platform &remote_platform)
1781
1781
{
1782
- if ( GetGlobalPlatformProperties ()-> GetUseModuleCache ())
1783
- {
1784
- if ( GetCachedSharedModule (module_spec, nullptr , module_sp))
1785
- return Error ();
1786
- }
1787
-
1788
- return remote_platform. ResolveExecutable (module_spec,
1789
- module_sp ,
1790
- module_search_paths_ptr );
1782
+ return GetRemoteSharedModule (module_spec,
1783
+ nullptr ,
1784
+ module_sp,
1785
+ [&]( const ModuleSpec &spec)
1786
+ {
1787
+ return remote_platform. ResolveExecutable (
1788
+ spec, module_sp, module_search_paths_ptr);
1789
+ } ,
1790
+ nullptr );
1791
1791
}
1792
1792
1793
- bool
1794
- Platform::GetCachedSharedModule (const ModuleSpec &module_spec,
1793
+ Error
1794
+ Platform::GetRemoteSharedModule (const ModuleSpec &module_spec,
1795
1795
Process* process,
1796
- lldb::ModuleSP &module_sp)
1797
- {
1798
- return (m_module_cache && GetModuleFromLocalCache (module_spec, process, module_sp));
1799
- }
1800
-
1801
- bool
1802
- Platform::GetModuleFromLocalCache (const ModuleSpec& module_spec,
1803
- Process* process,
1804
- lldb::ModuleSP &module_sp)
1796
+ lldb::ModuleSP &module_sp,
1797
+ const ModuleResolver &module_resolver,
1798
+ bool *did_create_ptr)
1805
1799
{
1806
- Log *log = GetLogIfAnyCategoriesSet (LIBLLDB_LOG_PLATFORM);
1807
-
1808
-
1800
+ // Get module information from a target.
1809
1801
ModuleSpec resolved_module_spec;
1810
1802
bool got_module_spec = false ;
1811
-
1812
1803
if (process)
1813
1804
{
1814
1805
// Try to get module information from the process
1815
1806
if (process->GetModuleSpec (module_spec.GetFileSpec (), module_spec.GetArchitecture (), resolved_module_spec))
1816
- got_module_spec = true ;
1807
+ got_module_spec = true ;
1817
1808
}
1818
1809
1819
1810
if (!got_module_spec)
1820
1811
{
1821
1812
// Get module information from a target.
1822
1813
if (!GetModuleSpec (module_spec.GetFileSpec (), module_spec.GetArchitecture (), resolved_module_spec))
1823
- return false ;
1814
+ return module_resolver (module_spec) ;
1824
1815
}
1825
1816
1817
+ // Trying to find a module by UUID on local file system.
1818
+ const auto error = module_resolver (resolved_module_spec);
1819
+ if (error.Fail ())
1820
+ {
1821
+ if (GetCachedSharedModule (resolved_module_spec, module_sp, did_create_ptr))
1822
+ return Error ();
1823
+ }
1824
+
1825
+ return error;
1826
+ }
1827
+
1828
+ bool
1829
+ Platform::GetCachedSharedModule (const ModuleSpec &module_spec,
1830
+ lldb::ModuleSP &module_sp,
1831
+ bool *did_create_ptr)
1832
+ {
1833
+ if (IsHost () ||
1834
+ !GetGlobalPlatformProperties ()->GetUseModuleCache ())
1835
+ return false ;
1836
+
1837
+ Log *log = GetLogIfAnyCategoriesSet (LIBLLDB_LOG_PLATFORM);
1838
+
1826
1839
// Check local cache for a module.
1827
1840
auto error = m_module_cache->Get (GetModuleCacheRoot (),
1828
1841
GetHostname (),
1829
- resolved_module_spec,
1830
- module_sp);
1842
+ module_spec,
1843
+ module_sp,
1844
+ did_create_ptr);
1831
1845
if (error.Success ())
1832
1846
return true ;
1833
1847
1834
1848
if (log )
1835
1849
log ->Printf (" Platform::%s - module %s not found in local cache: %s" ,
1836
- __FUNCTION__, resolved_module_spec .GetUUID ().GetAsString ().c_str (), error.AsCString ());
1850
+ __FUNCTION__, module_spec .GetUUID ().GetAsString ().c_str (), error.AsCString ());
1837
1851
1838
1852
// Get temporary file name for a downloaded module.
1839
1853
llvm::SmallString<PATH_MAX> tmp_download_file_path;
1840
1854
const auto err_code = llvm::sys::fs::createTemporaryFile (
1841
- " lldb" , resolved_module_spec .GetUUID ().GetAsString ().c_str (), tmp_download_file_path);
1855
+ " lldb" , module_spec .GetUUID ().GetAsString ().c_str (), tmp_download_file_path);
1842
1856
if (err_code)
1843
1857
{
1844
1858
if (log )
@@ -1851,9 +1865,9 @@ Platform::GetModuleFromLocalCache (const ModuleSpec& module_spec,
1851
1865
1852
1866
const FileSpec tmp_download_file_spec (tmp_download_file_path.c_str (), true );
1853
1867
// Download a module file.
1854
- error = DownloadModuleSlice (resolved_module_spec .GetFileSpec (),
1855
- resolved_module_spec .GetObjectOffset (),
1856
- resolved_module_spec .GetObjectSize (),
1868
+ error = DownloadModuleSlice (module_spec .GetFileSpec (),
1869
+ module_spec .GetObjectOffset (),
1870
+ module_spec .GetObjectSize (),
1857
1871
tmp_download_file_spec);
1858
1872
if (error.Fail ())
1859
1873
{
@@ -1867,21 +1881,22 @@ Platform::GetModuleFromLocalCache (const ModuleSpec& module_spec,
1867
1881
// Put downloaded file into local module cache.
1868
1882
error = m_module_cache->Put (GetModuleCacheRoot (),
1869
1883
GetHostname (),
1870
- resolved_module_spec ,
1884
+ module_spec ,
1871
1885
tmp_download_file_spec);
1872
1886
if (error.Fail ())
1873
1887
{
1874
1888
if (log )
1875
1889
log ->Printf (" Platform::%s - failed to put module %s into cache: %s" ,
1876
- __FUNCTION__, resolved_module_spec .GetUUID ().GetAsString ().c_str (),
1890
+ __FUNCTION__, module_spec .GetUUID ().GetAsString ().c_str (),
1877
1891
error.AsCString ());
1878
1892
return false ;
1879
1893
}
1880
1894
1881
1895
error = m_module_cache->Get (GetModuleCacheRoot (),
1882
1896
GetHostname (),
1883
- resolved_module_spec,
1884
- module_sp);
1897
+ module_spec,
1898
+ module_sp,
1899
+ did_create_ptr);
1885
1900
return error.Success ();
1886
1901
}
1887
1902
0 commit comments