summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/API/SBTarget.cpp18
-rw-r--r--lldb/source/Commands/CommandObjectSource.cpp14
-rw-r--r--lldb/source/Commands/CommandObjectTarget.cpp73
-rw-r--r--lldb/source/Core/Module.cpp83
-rw-r--r--lldb/source/Core/ModuleList.cpp318
-rw-r--r--lldb/source/Host/common/Symbols.cpp4
-rw-r--r--lldb/source/Host/macosx/Symbols.cpp38
-rw-r--r--lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp6
-rw-r--r--lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp62
-rw-r--r--lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp49
-rw-r--r--lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h6
-rw-r--r--lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp33
-rw-r--r--lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h6
-rw-r--r--lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp33
-rw-r--r--lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.h6
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp6
-rw-r--r--lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp7
-rw-r--r--lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp6
-rw-r--r--lldb/source/Symbol/SymbolContext.cpp5
-rw-r--r--lldb/source/Target/Platform.cpp30
-rw-r--r--lldb/source/Target/Target.cpp54
21 files changed, 326 insertions, 531 deletions
diff --git a/lldb/source/API/SBTarget.cpp b/lldb/source/API/SBTarget.cpp
index 51c0720d86c..79b45485007 100644
--- a/lldb/source/API/SBTarget.cpp
+++ b/lldb/source/API/SBTarget.cpp
@@ -1627,22 +1627,17 @@ SBTarget::AddModule (const char *path,
TargetSP target_sp(GetSP());
if (target_sp)
{
- FileSpec module_file_spec;
- UUID module_uuid;
- ArchSpec module_arch;
-
+ ModuleSpec module_spec;
if (path)
- module_file_spec.SetFile(path, false);
+ module_spec.GetFileSpec().SetFile(path, false);
if (uuid_cstr)
- module_uuid.SetfromCString(uuid_cstr);
+ module_spec.GetUUID().SetfromCString(uuid_cstr);
if (triple)
- module_arch.SetTriple (triple, target_sp->GetPlatform ().get());
+ module_spec.GetArchitecture().SetTriple (triple, target_sp->GetPlatform ().get());
- sb_module.SetSP(target_sp->GetSharedModule (module_file_spec,
- module_arch,
- uuid_cstr ? &module_uuid : NULL));
+ sb_module.SetSP(target_sp->GetSharedModule (module_spec));
}
return sb_module;
}
@@ -1697,8 +1692,9 @@ SBTarget::FindModule (const SBFileSpec &sb_file_spec)
TargetSP target_sp(GetSP());
if (target_sp && sb_file_spec.IsValid())
{
+ ModuleSpec module_spec(*sb_file_spec);
// The module list is thread safe, no need to lock
- sb_module.SetSP (target_sp->GetImages().FindFirstModuleForFileSpec (*sb_file_spec, NULL, NULL));
+ sb_module.SetSP (target_sp->GetImages().FindFirstModule (module_spec));
}
return sb_module;
}
diff --git a/lldb/source/Commands/CommandObjectSource.cpp b/lldb/source/Commands/CommandObjectSource.cpp
index 7b2629943b3..c0c9f94d07d 100644
--- a/lldb/source/Commands/CommandObjectSource.cpp
+++ b/lldb/source/Commands/CommandObjectSource.cpp
@@ -308,11 +308,12 @@ public:
ModuleList matching_modules;
for (unsigned i = 0, e = m_options.modules.size(); i != e; i++)
{
- FileSpec module_spec(m_options.modules[i].c_str(), false);
- if (module_spec)
+ FileSpec module_file_spec(m_options.modules[i].c_str(), false);
+ if (module_file_spec)
{
+ ModuleSpec module_spec (module_file_spec);
matching_modules.Clear();
- target->GetImages().FindModules (&module_spec, NULL, NULL, NULL, matching_modules);
+ target->GetImages().FindModules (module_spec, matching_modules);
num_matches += matching_modules.FindFunctions (name, eFunctionNameTypeAuto, include_symbols, include_inlines, append, sc_list);
}
}
@@ -502,11 +503,12 @@ public:
ModuleList matching_modules;
for (unsigned i = 0, e = m_options.modules.size(); i != e; i++)
{
- FileSpec module_spec(m_options.modules[i].c_str(), false);
- if (module_spec)
+ FileSpec module_file_spec(m_options.modules[i].c_str(), false);
+ if (module_file_spec)
{
+ ModuleSpec module_spec (module_file_spec);
matching_modules.Clear();
- target->GetImages().FindModules (&module_spec, NULL, NULL, NULL, matching_modules);
+ target->GetImages().FindModules (module_spec, matching_modules);
num_matches += matching_modules.ResolveSymbolContextForFilePath (filename,
0,
check_inlines,
diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp
index df2f0806b95..e396a8b27e3 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -1658,6 +1658,7 @@ FindModulesByName (Target *target,
{
// Dump specified images (by basename or fullpath)
FileSpec module_file_spec(module_name, false);
+ ModuleSpec module_spec (module_file_spec);
const size_t initial_size = module_list.GetSize ();
@@ -1665,29 +1666,20 @@ FindModulesByName (Target *target,
if (target)
{
- num_matches = target->GetImages().FindModules (&module_file_spec,
- NULL,
- NULL,
- NULL,
- module_list);
+ num_matches = target->GetImages().FindModules (module_spec, module_list);
// Not found in our module list for our target, check the main
// shared module list in case it is a extra file used somewhere
// else
if (num_matches == 0)
- num_matches = ModuleList::FindSharedModules (module_file_spec,
- target->GetArchitecture(),
- NULL,
- NULL,
- module_list);
+ {
+ module_spec.GetArchitecture() = target->GetArchitecture();
+ num_matches = ModuleList::FindSharedModules (module_spec, module_list);
+ }
}
else
{
- num_matches = ModuleList::FindSharedModules (module_file_spec,
- ArchSpec(),
- NULL,
- NULL,
- module_list);
+ num_matches = ModuleList::FindSharedModules (module_spec,module_list);
}
if (check_global_list && num_matches == 0)
@@ -1702,7 +1694,7 @@ FindModulesByName (Target *target,
if (module)
{
- if (FileSpec::Equal(module->GetFileSpec(), module_file_spec, true))
+ if (module->MatchesModuleSpec (module_spec))
{
module_sp = module->shared_from_this();
module_list.AppendIfNeeded(module_sp);
@@ -2395,10 +2387,10 @@ public:
if (path)
{
FileSpec file_spec(path, true);
- ArchSpec arch;
if (file_spec.Exists())
{
- ModuleSP module_sp (target->GetSharedModule(file_spec, arch));
+ ModuleSpec module_spec (file_spec);
+ ModuleSP module_sp (target->GetSharedModule (module_spec));
if (!module_sp)
{
result.AppendError ("one or more executable image paths must be specified");
@@ -2492,23 +2484,25 @@ public:
else
{
const size_t argc = args.GetArgumentCount();
- const FileSpec *file_ptr = NULL;
- const UUID *uuid_ptr = NULL;
+ ModuleSpec module_spec;
+ bool search_using_module_spec = false;
if (m_file_option.GetOptionValue().OptionWasSet())
- file_ptr = &m_file_option.GetOptionValue().GetCurrentValue();
+ {
+ search_using_module_spec = true;
+ module_spec.GetFileSpec() = m_file_option.GetOptionValue().GetCurrentValue();
+ }
if (m_uuid_option_group.GetOptionValue().OptionWasSet())
- uuid_ptr = &m_uuid_option_group.GetOptionValue().GetCurrentValue();
+ {
+ search_using_module_spec = true;
+ module_spec.GetUUID() = m_uuid_option_group.GetOptionValue().GetCurrentValue();
+ }
- if (file_ptr || uuid_ptr)
+ if (search_using_module_spec)
{
ModuleList matching_modules;
- const size_t num_matches = target->GetImages().FindModules (file_ptr, // File spec to match (can be NULL to match by UUID only)
- NULL, // Architecture
- uuid_ptr, // UUID to match (can be NULL to not match on UUID)
- NULL, // Object name
- matching_modules);
+ const size_t num_matches = target->GetImages().FindModules (module_spec, matching_modules);
char path[PATH_MAX];
if (num_matches == 1)
@@ -2630,13 +2624,14 @@ public:
else
{
char uuid_cstr[64];
- if (file_ptr)
- file_ptr->GetPath (path, sizeof(path));
+
+ if (module_spec.GetFileSpec())
+ module_spec.GetFileSpec().GetPath (path, sizeof(path));
else
path[0] = '\0';
- if (uuid_ptr)
- uuid_ptr->GetAsCString(uuid_cstr, sizeof(uuid_cstr));
+ if (module_spec.GetUUIDPtr())
+ module_spec.GetUUID().GetAsCString(uuid_cstr, sizeof(uuid_cstr));
else
uuid_cstr[0] = '\0';
if (num_matches > 1)
@@ -3576,9 +3571,8 @@ public:
ModuleSP target_exe_module_sp (target->GetExecutableModule());
const bool adding_symbols_to_executable = target_exe_module_sp.get() == old_module_sp.get();
- FileSpec target_module_file (old_module_sp->GetFileSpec());
- ArchSpec target_module_arch (old_module_sp->GetArchitecture());
-
+ ModuleSpec module_spec (old_module_sp->GetFileSpec(), old_module_sp->GetArchitecture());
+ module_spec.GetSymbolFileSpec() = symfile_spec;
// Unload the old module
ModuleList module_list;
module_list.Append (old_module_sp);
@@ -3590,7 +3584,14 @@ public:
// Now create the new module and load it
module_list.Clear();
//ModuleSP new_module_sp (new Module (target_module_file, target_module_arch));
- ModuleSP new_module_sp (target->GetSharedModule(target_module_file, target_module_arch));
+ ModuleSP new_module_sp;
+
+ Error error (ModuleList::GetSharedModule (module_spec,
+ new_module_sp,
+ &target->GetExecutableSearchPaths(),
+ NULL,
+ NULL));
+
if (new_module_sp)
{
new_module_sp->SetSymbolFileFileSpec (symfile_module_sp->GetFileSpec());
diff --git a/lldb/source/Core/Module.cpp b/lldb/source/Core/Module.cpp
index 18f07ae9189..f2c32c57ec9 100644
--- a/lldb/source/Core/Module.cpp
+++ b/lldb/source/Core/Module.cpp
@@ -114,6 +114,44 @@ namespace lldb {
#endif
+Module::Module (const ModuleSpec &module_spec) :
+ m_mutex (Mutex::eMutexTypeRecursive),
+ m_mod_time (module_spec.GetFileSpec().GetModificationTime()),
+ m_arch (module_spec.GetArchitecture()),
+ m_uuid (),
+ m_file (module_spec.GetFileSpec()),
+ m_platform_file(module_spec.GetPlatformFileSpec()),
+ m_symfile_spec (module_spec.GetSymbolFileSpec()),
+ m_object_name (module_spec.GetObjectName()),
+ m_object_offset (module_spec.GetObjectOffset()),
+ m_objfile_sp (),
+ m_symfile_ap (),
+ m_ast (),
+ m_did_load_objfile (false),
+ m_did_load_symbol_vendor (false),
+ m_did_parse_uuid (false),
+ m_did_init_ast (false),
+ m_is_dynamic_loader_module (false),
+ m_was_modified (false)
+{
+ // Scope for locker below...
+ {
+ Mutex::Locker locker (GetAllocationModuleCollectionMutex());
+ GetModuleCollection().push_back(this);
+ }
+
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT));
+ if (log)
+ log->Printf ("%p Module::Module((%s) '%s/%s%s%s%s')",
+ this,
+ m_arch.GetArchitectureName(),
+ m_file.GetDirectory().AsCString(""),
+ m_file.GetFilename().AsCString(""),
+ m_object_name.IsEmpty() ? "" : "(",
+ m_object_name.IsEmpty() ? "" : m_object_name.AsCString(""),
+ m_object_name.IsEmpty() ? "" : ")");
+}
+
Module::Module(const FileSpec& file_spec,
const ArchSpec& arch,
const ConstString *object_name,
@@ -1073,3 +1111,48 @@ Module::SetLoadAddress (Target &target, lldb::addr_t offset, bool &changed)
return false;
}
+
+bool
+Module::MatchesModuleSpec (const ModuleSpec &module_ref)
+{
+ const UUID &uuid = module_ref.GetUUID();
+
+ if (uuid.IsValid())
+ {
+ // If the UUID matches, then nothing more needs to match...
+ if (uuid == GetUUID())
+ return true;
+ else
+ return false;
+ }
+
+ const FileSpec &file_spec = module_ref.GetFileSpec();
+ if (file_spec)
+ {
+ if (!FileSpec::Equal (file_spec, m_file, file_spec.GetDirectory()))
+ return false;
+ }
+
+ const FileSpec &platform_file_spec = module_ref.GetPlatformFileSpec();
+ if (platform_file_spec)
+ {
+ if (!FileSpec::Equal (platform_file_spec, m_platform_file, platform_file_spec.GetDirectory()))
+ return false;
+ }
+
+ const ArchSpec &arch = module_ref.GetArchitecture();
+ if (arch.IsValid())
+ {
+ if (m_arch != arch)
+ return false;
+ }
+
+ const ConstString &object_name = module_ref.GetObjectName();
+ if (object_name)
+ {
+ if (object_name != GetObjectName())
+ return false;
+ }
+ return true;
+}
+
diff --git a/lldb/source/Core/ModuleList.cpp b/lldb/source/Core/ModuleList.cpp
index 2325bde0bc0..9ba911921fb 100644
--- a/lldb/source/Core/ModuleList.cpp
+++ b/lldb/source/Core/ModuleList.cpp
@@ -289,109 +289,18 @@ ModuleList::FindSymbolsMatchingRegExAndType (const RegularExpression &regex,
return sc_list.GetSize() - initial_size;
}
-class ModuleMatches
-{
-public:
- //--------------------------------------------------------------
- /// Construct with the user ID to look for.
- //--------------------------------------------------------------
- ModuleMatches (const FileSpec *file_spec_ptr,
- const ArchSpec *arch_ptr,
- const lldb_private::UUID *uuid_ptr,
- const ConstString *object_name,
- bool file_spec_is_platform) :
- m_file_spec_ptr (file_spec_ptr),
- m_arch_ptr (arch_ptr),
- m_uuid_ptr (uuid_ptr),
- m_object_name (object_name),
- m_file_spec_compare_basename_only (false),
- m_file_spec_is_platform (file_spec_is_platform)
- {
- if (file_spec_ptr)
- m_file_spec_compare_basename_only = file_spec_ptr->GetDirectory();
- }
-
-
- //--------------------------------------------------------------
- /// Unary predicate function object callback.
- //--------------------------------------------------------------
- bool
- operator () (const ModuleSP& module_sp) const
- {
- if (m_file_spec_ptr)
- {
- if (m_file_spec_is_platform)
- {
- if (!FileSpec::Equal (*m_file_spec_ptr,
- module_sp->GetPlatformFileSpec(),
- m_file_spec_compare_basename_only))
- return false;
-
- }
- else
- {
- if (!FileSpec::Equal (*m_file_spec_ptr,
- module_sp->GetFileSpec(),
- m_file_spec_compare_basename_only))
- return false;
- }
- }
-
- if (m_arch_ptr && m_arch_ptr->IsValid())
- {
- if (module_sp->GetArchitecture() != *m_arch_ptr)
- return false;
- }
-
- if (m_uuid_ptr && m_uuid_ptr->IsValid())
- {
- if (module_sp->GetUUID() != *m_uuid_ptr)
- return false;
- }
-
- if (m_object_name)
- {
- if (module_sp->GetObjectName() != *m_object_name)
- return false;
- }
- return true;
- }
-
-private:
- //--------------------------------------------------------------
- // Member variables.
- //--------------------------------------------------------------
- const FileSpec * m_file_spec_ptr;
- const ArchSpec * m_arch_ptr;
- const lldb_private::UUID * m_uuid_ptr;
- const ConstString * m_object_name;
- bool m_file_spec_compare_basename_only;
- bool m_file_spec_is_platform;
-};
-
size_t
-ModuleList::FindModules
-(
- const FileSpec *file_spec_ptr,
- const ArchSpec *arch_ptr,
- const lldb_private::UUID *uuid_ptr,
- const ConstString *object_name,
- ModuleList& matching_module_list
-) const
+ModuleList::FindModules (const ModuleSpec &module_spec, ModuleList& matching_module_list) const
{
size_t existing_matches = matching_module_list.GetSize();
- ModuleMatches matcher (file_spec_ptr, arch_ptr, uuid_ptr, object_name, false);
Mutex::Locker locker(m_modules_mutex);
- collection::const_iterator end = m_modules.end();
- collection::const_iterator pos;
-
- for (pos = std::find_if (m_modules.begin(), end, matcher);
- pos != end;
- pos = std::find_if (++pos, end, matcher))
+ collection::const_iterator pos, end = m_modules.end();
+ for (pos = m_modules.begin(); pos != end; ++pos)
{
ModuleSP module_sp(*pos);
- matching_module_list.Append(module_sp);
+ if (module_sp->MatchesModuleSpec (module_spec))
+ matching_module_list.Append(module_sp);
}
return matching_module_list.GetSize() - existing_matches;
}
@@ -464,58 +373,21 @@ ModuleList::FindTypes (const SymbolContext& sc, const ConstString &name, bool ap
}
ModuleSP
-ModuleList::FindFirstModuleForFileSpec (const FileSpec &file_spec,
- const ArchSpec *arch_ptr,
- const ConstString *object_name)
+ModuleList::FindFirstModule (const ModuleSpec &module_spec)
{
ModuleSP module_sp;
- ModuleMatches matcher (&file_spec,
- arch_ptr,
- NULL,
- object_name,
- false);
-
- // Scope for "locker"
+ Mutex::Locker locker(m_modules_mutex);
+ collection::const_iterator pos, end = m_modules.end();
+ for (pos = m_modules.begin(); pos != end; ++pos)
{
- Mutex::Locker locker(m_modules_mutex);
- collection::const_iterator end = m_modules.end();
- collection::const_iterator pos = m_modules.begin();
-
- pos = std::find_if (pos, end, matcher);
- if (pos != end)
- module_sp = (*pos);
+ ModuleSP module_sp(*pos);
+ if (module_sp->MatchesModuleSpec (module_spec))
+ return module_sp;
}
return module_sp;
}
-ModuleSP
-ModuleList::FindFirstModuleForPlatormFileSpec (const FileSpec &file_spec,
- const ArchSpec *arch_ptr,
- const ConstString *object_name)
-{
- ModuleSP module_sp;
- ModuleMatches matcher (&file_spec,
- arch_ptr,
- NULL,
- object_name,
- true);
-
- // Scope for "locker"
- {
- Mutex::Locker locker(m_modules_mutex);
- collection::const_iterator end = m_modules.end();
- collection::const_iterator pos = m_modules.begin();
-
- pos = std::find_if (pos, end, matcher);
- if (pos != end)
- module_sp = (*pos);
- }
- return module_sp;
-
-}
-
-
size_t
ModuleList::GetSize() const
{
@@ -674,17 +546,9 @@ ModuleList::ModuleIsInCache (const Module *module_ptr)
}
size_t
-ModuleList::FindSharedModules
-(
- const FileSpec& in_file_spec,
- const ArchSpec& arch,
- const lldb_private::UUID *uuid_ptr,
- const ConstString *object_name_ptr,
- ModuleList &matching_module_list
-)
+ModuleList::FindSharedModules (const ModuleSpec &module_spec, ModuleList &matching_module_list)
{
- ModuleList &shared_module_list = GetSharedModuleList ();
- return shared_module_list.FindModules (&in_file_spec, &arch, uuid_ptr, object_name_ptr, matching_module_list);
+ return GetSharedModuleList ().FindModules (module_spec, matching_module_list);
}
uint32_t
@@ -692,42 +556,11 @@ ModuleList::RemoveOrphanSharedModules ()
{
return GetSharedModuleList ().RemoveOrphans();
}
-//#define ENABLE_MODULE_SP_LOGGING
-#if defined (ENABLE_MODULE_SP_LOGGING)
-#include "lldb/Core/StreamFile.h"
-#include "lldb/Host/Host.h"
-static void
-ModuleSharedPtrLogger(void* p, const ModuleSP& sp, bool will_decrement)
-{
- if (sp.get())
- {
- const char *module_basename = sp->GetFileSpec().GetFilename().GetCString();
- // If "p" is set, then it is the basename of a module to watch for. This
- // basename MUST be uniqued first by getting it from a ConstString or this
- // won't work.
- if (p && p != module_basename)
- {
- return;
- }
- long use_count = sp.use_count();
- if (will_decrement)
- --use_count;
-
- printf("\nModuleSP(%p): %c %p {%lu} %s/%s\n", &sp, will_decrement ? '-' : '+', sp.get(), use_count, sp->GetFileSpec().GetDirectory().GetCString(), module_basename);
- StreamFile stdout_strm(stdout, false);
- Host::Backtrace (stdout_strm, 512);
- }
-}
-#endif
Error
ModuleList::GetSharedModule
(
- const FileSpec& in_file_spec,
- const ArchSpec& arch,
- const lldb_private::UUID *uuid_ptr,
- const ConstString *object_name_ptr,
- off_t object_offset,
+ const ModuleSpec &module_spec,
ModuleSP &module_sp,
const FileSpecList *module_search_paths_ptr,
ModuleSP *old_module_sp_ptr,
@@ -749,82 +582,68 @@ ModuleList::GetSharedModule
if (old_module_sp_ptr)
old_module_sp_ptr->reset();
+ const UUID *uuid_ptr = module_spec.GetUUIDPtr();
+ const FileSpec &module_file_spec = module_spec.GetFileSpec();
+ const ArchSpec &arch = module_spec.GetArchitecture();
- // First just try and get the file where it purports to be (path in
- // in_file_spec), then check and uuid.
-
- if (in_file_spec)
+ // Make sure no one else can try and get or create a module while this
+ // function is actively working on it by doing an extra lock on the
+ // global mutex list.
+ if (always_create == false)
{
- // Make sure no one else can try and get or create a module while this
- // function is actively working on it by doing an extra lock on the
- // global mutex list.
- if (always_create == false)
+ ModuleList matching_module_list;
+ const size_t num_matching_modules = shared_module_list.FindModules (module_spec, matching_module_list);
+ if (num_matching_modules > 0)
{
- ModuleList matching_module_list;
- const size_t num_matching_modules = shared_module_list.FindModules (&in_file_spec, &arch, NULL, object_name_ptr, matching_module_list);
- if (num_matching_modules > 0)
+ for (uint32_t module_idx = 0; module_idx < num_matching_modules; ++module_idx)
{
- for (uint32_t module_idx = 0; module_idx < num_matching_modules; ++module_idx)
+ module_sp = matching_module_list.GetModuleAtIndex(module_idx);
+ if (module_file_spec)
{
- module_sp = matching_module_list.GetModuleAtIndex(module_idx);
- if (uuid_ptr && uuid_ptr->IsValid())
+ // If we didn't have a UUID in mind when looking for the object file,
+ // then we should make sure the modification time hasn't changed!
+ TimeValue file_spec_mod_time(module_file_spec.GetModificationTime());
+ if (file_spec_mod_time.IsValid())
{
- // We found the module we were looking for.
- if (module_sp->GetUUID() == *uuid_ptr)
+ if (file_spec_mod_time == module_sp->GetModificationTime())
return error;
}
- else
- {
- // If we didn't have a UUID in mind when looking for the object file,
- // then we should make sure the modification time hasn't changed!
- TimeValue file_spec_mod_time(in_file_spec.GetModificationTime());
- if (file_spec_mod_time.IsValid())
- {
- if (file_spec_mod_time == module_sp->GetModificationTime())
- return error;
- }
- }
- if (old_module_sp_ptr && !old_module_sp_ptr->get())
- *old_module_sp_ptr = module_sp;
- shared_module_list.Remove (module_sp);
- module_sp.reset();
}
+ if (old_module_sp_ptr && !old_module_sp_ptr->get())
+ *old_module_sp_ptr = module_sp;
+ shared_module_list.Remove (module_sp);
+ module_sp.reset();
}
}
+ }
+ if (module_sp)
+ return error;
+ else
+ {
+ module_sp.reset (new Module (module_spec));
+ // Make sure there are a module and an object file since we can specify
+ // a valid file path with an architecture that might not be in that file.
+ // By getting the object file we can guarantee that the architecture matches
if (module_sp)
- return error;
- else
{
-#if defined ENABLE_MODULE_SP_LOGGING
- ModuleSP logging_module_sp (new Module (in_file_spec, arch, object_name_ptr, object_offset), ModuleSharedPtrLogger, (void *)ConstString("a.out").GetCString());
- module_sp = logging_module_sp;
-#else
- module_sp.reset (new Module (in_file_spec, arch, object_name_ptr, object_offset));
-#endif
- // Make sure there are a module and an object file since we can specify
- // a valid file path with an architecture that might not be in that file.
- // By getting the object file we can guarantee that the architecture matches
- if (module_sp)
+ if (module_sp->GetObjectFile())
{
- if (module_sp->GetObjectFile())
+ // If we get in here we got the correct arch, now we just need
+ // to verify the UUID if one was given
+ if (uuid_ptr && *uuid_ptr != module_sp->GetUUID())
+ module_sp.reset();
+ else
{
- // If we get in here we got the correct arch, now we just need
- // to verify the UUID if one was given
- if (uuid_ptr && *uuid_ptr != module_sp->GetUUID())
- module_sp.reset();
- else
- {
- if (did_create_ptr)
- *did_create_ptr = true;
-
- shared_module_list.Append(module_sp);
- return error;
- }
+ if (did_create_ptr)
+ *did_create_ptr = true;
+
+ shared_module_list.Append(module_sp);
+ return error;
}
- else
- module_sp.reset();
}
+ else
+ module_sp.reset();
}
}
@@ -834,19 +653,17 @@ ModuleList::GetSharedModule
// Fixup the incoming path in case the path points to a valid file, yet
// the arch or UUID (if one was passed in) don't match.
- FileSpec file_spec = Symbols::LocateExecutableObjectFile (in_file_spec ? &in_file_spec : NULL,
- arch.IsValid() ? &arch : NULL,
- uuid_ptr);
+ FileSpec file_spec = Symbols::LocateExecutableObjectFile (module_spec);
// Don't look for the file if it appears to be the same one we already
// checked for above...
- if (file_spec != in_file_spec)
+ if (file_spec != module_file_spec)
{
if (!file_spec.Exists())
{
file_spec.GetPath(path, sizeof(path));
if (path[0] == '\0')
- in_file_spec.GetPath(path, sizeof(path));
+ module_file_spec.GetPath(path, sizeof(path));
if (file_spec.Exists())
{
if (uuid_ptr && uuid_ptr->IsValid())
@@ -877,13 +694,13 @@ ModuleList::GetSharedModule
// function is actively working on it by doing an extra lock on the
// global mutex list.
ModuleList matching_module_list;
- if (shared_module_list.FindModules (&file_spec, &arch, uuid_ptr, object_name_ptr, matching_module_list) > 0)
+ if (shared_module_list.FindModules (module_spec, matching_module_list) > 0)
{
module_sp = matching_module_list.GetModuleAtIndex(0);
// If we didn't have a UUID in mind when looking for the object file,
// then we should make sure the modification time hasn't changed!
- if (uuid_ptr == NULL)
+ if (module_spec.GetUUIDPtr() == NULL)
{
TimeValue file_spec_mod_time(file_spec.GetModificationTime());
if (file_spec_mod_time.IsValid())
@@ -901,12 +718,7 @@ ModuleList::GetSharedModule
if (module_sp.get() == NULL)
{
-#if defined ENABLE_MODULE_SP_LOGGING
- ModuleSP logging_module_sp (new Module (file_spec, arch, object_name_ptr, object_offset), ModuleSharedPtrLogger, 0);
- module_sp = logging_module_sp;
-#else
- module_sp.reset (new Module (file_spec, arch, object_name_ptr, object_offset));
-#endif
+ module_sp.reset (new Module (module_spec));
// Make sure there are a module and an object file since we can specify
// a valid file path with an architecture that might not be in that file.
// By getting the object file we can guarantee that the architecture matches
diff --git a/lldb/source/Host/common/Symbols.cpp b/lldb/source/Host/common/Symbols.cpp
index 6746d530b80..a4e570332f7 100644
--- a/lldb/source/Host/common/Symbols.cpp
+++ b/lldb/source/Host/common/Symbols.cpp
@@ -15,14 +15,14 @@ using namespace lldb_private;
#if !defined (__APPLE__)
FileSpec
-Symbols::LocateExecutableObjectFile (const FileSpec *exec_fspec, const ArchSpec* arch, const lldb_private::UUID *uuid)
+Symbols::LocateExecutableObjectFile (const ModuleSpec &module_spec)
{
// FIXME
return FileSpec();
}
FileSpec
-Symbols::LocateExecutableSymbolFile (const FileSpec *exec_fspec, const ArchSpec* arch, const lldb_private::UUID *uuid)
+Symbols::LocateExecutableSymbolFile (const ModuleSpec &module_spec)
{
// FIXME
return FileSpec();
diff --git a/lldb/source/Host/macosx/Symbols.cpp b/lldb/source/Host/macosx/Symbols.cpp
index 50161def0db..efd8fbb47ff 100644
--- a/lldb/source/Host/macosx/Symbols.cpp
+++ b/lldb/source/Host/macosx/Symbols.cpp
@@ -21,6 +21,7 @@
#include "lldb/Core/ArchSpec.h"
#include "lldb/Core/DataBuffer.h"
#include "lldb/Core/DataExtractor.h"
+#include "lldb/Core/Module.h"
#include "lldb/Core/Timer.h"
#include "lldb/Core/UUID.h"
#include "lldb/Host/Endian.h"
@@ -286,9 +287,7 @@ LocateDSYMMachFileInDSYMBundle
static int
LocateMacOSXFilesUsingDebugSymbols
(
- const FileSpec *exec_fspec, // An executable path that may or may not be correct if UUID is specified
- const ArchSpec* arch, // Limit the search to files with this architecture if non-NULL
- const lldb_private::UUID *uuid, // Match the UUID value if non-NULL,
+ const ModuleSpec &module_spec,
FileSpec *out_exec_fspec, // If non-NULL, try and find the executable
FileSpec *out_dsym_fspec // If non-NULL try and find the debug symbol file
)
@@ -303,6 +302,9 @@ LocateMacOSXFilesUsingDebugSymbols
#if !defined (__arm__) // No DebugSymbols on the iOS devices
+ const UUID *uuid = module_spec.GetUUIDPtr();
+ const ArchSpec *arch = module_spec.GetArchitecturePtr();
+
if (uuid && uuid->IsValid())
{
// Try and locate the dSYM file using DebugSymbols first
@@ -330,7 +332,7 @@ LocateMacOSXFilesUsingDebugSymbols
if (module_uuid_ref.get())
{
CFCReleaser<CFURLRef> exec_url;
-
+ const FileSpec *exec_fspec = module_spec.GetFileSpecPtr();
if (exec_fspec)
{
char exec_cf_path[PATH_MAX];
@@ -450,8 +452,9 @@ LocateMacOSXFilesUsingDebugSymbols
}
static bool
-LocateDSYMInVincinityOfExecutable (const FileSpec *exec_fspec, const ArchSpec* arch, const lldb_private::UUID *uuid, FileSpec &dsym_fspec)
+LocateDSYMInVincinityOfExecutable (const ModuleSpec &module_spec, FileSpec &dsym_fspec)
{
+ const FileSpec *exec_fspec = module_spec.GetFileSpecPtr();
if (exec_fspec)
{
char path[PATH_MAX];
@@ -466,7 +469,7 @@ LocateDSYMInVincinityOfExecutable (const FileSpec *exec_fspec, const ArchSpec* a
dsym_fspec.SetFile(path, false);
- if (dsym_fspec.Exists() && FileAtPathContainsArchAndUUID (dsym_fspec, arch, uuid))
+ if (dsym_fspec.Exists() && FileAtPathContainsArchAndUUID (dsym_fspec, module_spec.GetArchitecturePtr(), module_spec.GetUUIDPtr()))
{
return true;
}
@@ -484,7 +487,7 @@ LocateDSYMInVincinityOfExecutable (const FileSpec *exec_fspec, const ArchSpec* a
strncat(path, ".dSYM/Contents/Resources/DWARF/", sizeof(path));
strncat(path, exec_fspec->GetFilename().AsCString(), sizeof(path));
dsym_fspec.SetFile(path, false);
- if (dsym_fspec.Exists() && FileAtPathContainsArchAndUUID (dsym_fspec, arch, uuid))
+ if (dsym_fspec.Exists() && FileAtPathContainsArchAndUUID (dsym_fspec, module_spec.GetArchitecturePtr(), module_spec.GetUUIDPtr()))
return true;
else
{
@@ -510,8 +513,11 @@ LocateDSYMInVincinityOfExecutable (const FileSpec *exec_fspec, const ArchSpec* a
}
FileSpec
-Symbols::LocateExecutableObjectFile (const FileSpec *exec_fspec, const ArchSpec* arch, const lldb_private::UUID *uuid)
+Symbols::LocateExecutableObjectFile (const ModuleSpec &module_spec)
{
+ const FileSpec *exec_fspec = module_spec.GetFileSpecPtr();
+ const ArchSpec *arch = module_spec.GetArchitecturePtr();
+ const UUID *uuid = module_spec.GetUUIDPtr();
Timer scoped_timer (__PRETTY_FUNCTION__,
"LocateExecutableObjectFile (file = %s, arch = %s, uuid = %p)",
exec_fspec ? exec_fspec->GetFilename().AsCString ("<NULL>") : "<NULL>",
@@ -519,16 +525,20 @@ Symbols::LocateExecutableObjectFile (const FileSpec *exec_fspec, const ArchSpec*
uuid);
FileSpec objfile_fspec;
- if (exec_fspec && FileAtPathContainsArchAndUUID (*exec_fspec, arch, uuid))
- objfile_fspec = *exec_fspec;
+ if (exec_fspec && FileAtPathContainsArchAndUUID (exec_fspec, arch, uuid))
+ objfile_fspec = exec_fspec;
else
- LocateMacOSXFilesUsingDebugSymbols (exec_fspec, arch, uuid, &objfile_fspec, NULL);
+ LocateMacOSXFilesUsingDebugSymbols (module_spec, &objfile_fspec, NULL);
return objfile_fspec;
}
FileSpec
-Symbols::LocateExecutableSymbolFile (const FileSpec *exec_fspec, const ArchSpec* arch, const lldb_private::UUID *uuid)
+Symbols::LocateExecutableSymbolFile (const ModuleSpec &module_spec)
{
+ const FileSpec *exec_fspec = module_spec.GetFileSpecPtr();
+ const ArchSpec *arch = module_spec.GetArchitecturePtr();
+ const UUID *uuid = module_spec.GetUUIDPtr();
+
Timer scoped_timer (__PRETTY_FUNCTION__,
"LocateExecutableSymbolFile (file = %s, arch = %s, uuid = %p)",
exec_fspec ? exec_fspec->GetFilename().AsCString ("<NULL>") : "<NULL>",
@@ -538,10 +548,10 @@ Symbols::LocateExecutableSymbolFile (const FileSpec *exec_fspec, const ArchSpec*
FileSpec symbol_fspec;
// First try and find the dSYM in the same directory as the executable or in
// an appropriate parent directory
- if (LocateDSYMInVincinityOfExecutable (exec_fspec, arch, uuid, symbol_fspec) == false)
+ if (LocateDSYMInVincinityOfExecutable (module_spec, symbol_fspec) == false)
{
// We failed to easily find the dSYM above, so use DebugSymbols
- LocateMacOSXFilesUsingDebugSymbols (exec_fspec, arch, uuid, NULL, &symbol_fspec);
+ LocateMacOSXFilesUsingDebugSymbols (module_spec, NULL, &symbol_fspec);
}
return symbol_fspec;
}
diff --git a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
index 21bf70675ac..48e9abe5c8d 100644
--- a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
+++ b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
@@ -190,7 +190,11 @@ DynamicLoaderDarwinKernel::OSKextLoadedKextSummary::LoadImageUsingMemoryModule (
module_sp = target_images.FindModule(uuid);
if (!module_sp)
- module_sp = target.GetSharedModule (FileSpec(), target.GetArchitecture(), &uuid);
+ {
+ ModuleSpec module_spec (FileSpec(), target.GetArchitecture());
+ module_spec.GetUUID() = uuid;
+ module_sp = target.GetSharedModule (module_spec);
+ }
}
}
diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
index cd6cfda3cb8..31e3e5d1b62 100644
--- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
+++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
@@ -274,41 +274,26 @@ DynamicLoaderMacOSXDYLD::FindTargetModuleForDYLDImageInfo (const DYLDImageInfo &
{
if (did_create_ptr)
*did_create_ptr = false;
- ModuleSP module_sp;
ModuleList &target_images = m_process->GetTarget().GetImages();
- const bool image_info_uuid_is_valid = image_info.uuid.IsValid();
- if (image_info_uuid_is_valid)
- module_sp = target_images.FindModule(image_info.uuid);
+ ModuleSpec module_spec (image_info.file_spec, image_info.GetArchitecture ());
+ module_spec.GetUUID() = image_info.uuid;
+ ModuleSP module_sp (target_images.FindFirstModule (module_spec));
- if (!module_sp)
+ if (module_sp)
{
- ArchSpec arch(image_info.GetArchitecture ());
-
- module_sp = target_images.FindFirstModuleForFileSpec (image_info.file_spec, &arch, NULL);
+ // No UUID, we must rely upon the cached module modification
+ // time and the modification time of the file on disk
+ if (module_sp->GetModificationTime() != module_sp->GetFileSpec().GetModificationTime())
+ module_sp.reset();
+ }
+ if (!module_sp)
+ {
if (can_create)
{
- if (module_sp)
- {
- if (image_info_uuid_is_valid)
- {
- if (module_sp->GetUUID() != image_info.uuid)
- module_sp.reset();
- }
- else
- {
- // No UUID, we must rely upon the cached module modification
- // time and the modification time of the file on disk
- if (module_sp->GetModificationTime() != module_sp->GetFileSpec().GetModificationTime())
- module_sp.reset();
- }
- }
-
if (!module_sp)
{
- module_sp = m_process->GetTarget().GetSharedModule (image_info.file_spec,
- arch,
- image_info_uuid_is_valid ? &image_info.uuid : NULL);
+ module_sp = m_process->GetTarget().GetSharedModule (module_spec);
if (!module_sp || module_sp->GetObjectFile() == NULL)
{
const bool add_image_to_target = true;
@@ -822,19 +807,13 @@ DynamicLoaderMacOSXDYLD::AddModulesUsingImageInfos (DYLDImageInfo::collection &i
if (commpage_section)
{
ModuleList& target_images = m_process->GetTarget().GetImages();
- const FileSpec objfile_file_spec = objfile->GetFileSpec();
- ArchSpec arch (image_infos[idx].GetArchitecture ());
- ModuleSP commpage_image_module_sp(target_images.FindFirstModuleForFileSpec (objfile_file_spec,
- &arch,
- &commpage_dbstr));
+ ModuleSpec module_spec (objfile->GetFileSpec(), image_infos[idx].GetArchitecture ());
+ module_spec.GetObjectName() = commpage_dbstr;
+ ModuleSP commpage_image_module_sp(target_images.FindFirstModule (module_spec));
if (!commpage_image_module_sp)
{
- commpage_image_module_sp
- = m_process->GetTarget().GetSharedModule (image_infos[idx].file_spec,
- arch,
- NULL,
- &commpage_dbstr,
- objfile->GetOffset() + commpage_section->GetFileOffset());
+ module_spec.SetObjectOffset (objfile->GetOffset() + commpage_section->GetFileOffset());
+ commpage_image_module_sp = m_process->GetTarget().GetSharedModule (module_spec);
if (!commpage_image_module_sp || commpage_image_module_sp->GetObjectFile() == NULL)
{
const bool add_image_to_target = true;
@@ -1305,9 +1284,10 @@ DynamicLoaderMacOSXDYLD::UpdateImageInfosHeaderAndLoadCommands(DYLDImageInfo::co
if (!exe_module_sp)
{
ArchSpec exe_arch_spec (image_infos[exe_idx].GetArchitecture ());
- exe_module_sp = m_process->GetTarget().GetSharedModule (image_infos[exe_idx].file_spec,
- exe_arch_spec,
- &image_infos[exe_idx].uuid);
+ ModuleSpec module_spec (image_infos[exe_idx].file_spec,
+ image_infos[exe_idx].GetArchitecture ());
+ module_spec.GetUUID() = image_infos[exe_idx].uuid;
+ exe_module_sp = m_process->GetTarget().GetSharedModule (module_spec);
if (!exe_module_sp || exe_module_sp->GetObjectFile() == NULL)
{
const bool add_image_to_target = true;
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index c07b134a0be..df0c555729e 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -106,13 +106,10 @@ PlatformDarwin::ResolveExecutable (const FileSpec &exe_file,
if (error.Success())
{
- if (exe_arch.IsValid())
+ ModuleSpec module_spec (resolved_exe_file, exe_arch);
+ if (module_spec.GetArchitecture().IsValid())
{
- error = ModuleList::GetSharedModule (resolved_exe_file,
- exe_arch,
- NULL,
- NULL,
- 0,
+ error = ModuleList::GetSharedModule (module_spec,
exe_module_sp,
module_search_paths_ptr,
NULL,
@@ -134,14 +131,9 @@ PlatformDarwin::ResolveExecutable (const FileSpec &exe_file,
// the architectures that we should be using (in the correct order)
// and see if we can find a match that way
StreamString arch_names;
- ArchSpec platform_arch;
- for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, platform_arch); ++idx)
+ for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, module_spec.GetArchitecture()); ++idx)
{
- error = ModuleList::GetSharedModule (resolved_exe_file,
- platform_arch,
- NULL,
- NULL,
- 0,
+ error = ModuleList::GetSharedModule (module_spec,
exe_module_sp,
module_search_paths_ptr,
NULL,
@@ -157,7 +149,7 @@ PlatformDarwin::ResolveExecutable (const FileSpec &exe_file,
if (idx > 0)
arch_names.PutCString (", ");
- arch_names.PutCString (platform_arch.GetArchitectureName());
+ arch_names.PutCString (module_spec.GetArchitecture().GetArchitectureName());
}
if (error.Fail() || !exe_module_sp)
@@ -178,11 +170,7 @@ PlatformDarwin::ResolveExecutable (const FileSpec &exe_file,
Error
-PlatformDarwin::GetSharedModule (const FileSpec &platform_file,
- const ArchSpec &arch,
- const UUID *uuid_ptr,
- const ConstString *object_name_ptr,
- off_t object_offset,
+PlatformDarwin::GetSharedModule (const ModuleSpec &module_spec,
ModuleSP &module_sp,
const FileSpecList *module_search_paths_ptr,
ModuleSP *old_module_sp_ptr,
@@ -197,11 +185,7 @@ PlatformDarwin::GetSharedModule (const FileSpec &platform_file,
// the shared module first.
if (m_remote_platform_sp)
{
- error = m_remote_platform_sp->GetSharedModule (platform_file,
- arch,
- uuid_ptr,
- object_name_ptr,
- object_offset,
+ error = m_remote_platform_sp->GetSharedModule (module_spec,
module_sp,
module_search_paths_ptr,
old_module_sp_ptr,
@@ -212,16 +196,13 @@ PlatformDarwin::GetSharedModule (const FileSpec &platform_file,
if (!module_sp)
{
// Fall back to the local platform and find the file locally
- error = Platform::GetSharedModule (platform_file,
- arch,
- uuid_ptr,
- object_name_ptr,
- object_offset,
+ error = Platform::GetSharedModule (module_spec,
module_sp,
module_search_paths_ptr,
old_module_sp_ptr,
did_create_ptr);
+ const FileSpec &platform_file = module_spec.GetFileSpec();
if (!module_sp && module_search_paths_ptr && platform_file)
{
// We can try to pull off part of the file path up to the bundle
@@ -244,11 +225,9 @@ PlatformDarwin::GetSharedModule (const FileSpec &platform_file,
FileSpec new_file_spec (new_path, false);
if (new_file_spec.Exists())
{
- Error new_error (Platform::GetSharedModule (new_file_spec,
- arch,
- uuid_ptr,
- object_name_ptr,
- object_offset,
+ ModuleSpec new_module_spec (module_spec);
+ new_module_spec.GetFileSpec() = new_file_spec;
+ Error new_error (Platform::GetSharedModule (new_module_spec,
module_sp,
NULL,
old_module_sp_ptr,
@@ -266,7 +245,7 @@ PlatformDarwin::GetSharedModule (const FileSpec &platform_file,
}
}
if (module_sp)
- module_sp->SetPlatformFileSpec(platform_file);
+ module_sp->SetPlatformFileSpec(module_spec.GetFileSpec());
return error;
}
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
index a36422f684b..e81485b4e61 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
@@ -34,11 +34,7 @@ public:
const lldb_private::FileSpecList *module_search_paths_ptr);
virtual lldb_private::Error
- GetSharedModule (const lldb_private::FileSpec &platform_file,
- const lldb_private::ArchSpec &arch,
- const lldb_private::UUID *uuid_ptr,
- const lldb_private::ConstString *object_name_ptr,
- off_t object_offset,
+ GetSharedModule (const lldb_private::ModuleSpec &module_spec,
lldb::ModuleSP &module_sp,
const lldb_private::FileSpecList *module_search_paths_ptr,
lldb::ModuleSP *old_module_sp_ptr,
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
index 5210682667e..5e08581f975 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
@@ -142,11 +142,8 @@ PlatformRemoteiOS::ResolveExecutable (const FileSpec &exe_file,
{
if (exe_arch.IsValid())
{
- error = ModuleList::GetSharedModule (resolved_exe_file,
- exe_arch,
- NULL,
- NULL,
- 0,
+ ModuleSpec module_spec (resolved_exe_file, exe_arch);
+ error = ModuleList::GetSharedModule (module_spec,
exe_module_sp,
NULL,
NULL,
@@ -163,11 +160,8 @@ PlatformRemoteiOS::ResolveExecutable (const FileSpec &exe_file,
ArchSpec platform_arch;
for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, platform_arch); ++idx)
{
- error = ModuleList::GetSharedModule (resolved_exe_file,
- platform_arch,
- NULL,
- NULL,
- 0,
+ ModuleSpec module_spec (resolved_exe_file, platform_arch);
+ error = ModuleList::GetSharedModule (module_spec,
exe_module_sp,
NULL,
NULL,
@@ -363,11 +357,7 @@ PlatformRemoteiOS::GetFile (const FileSpec &platform_file,
}
Error
-PlatformRemoteiOS::GetSharedModule (const FileSpec &platform_file,
- const ArchSpec &arch,
- const UUID *uuid_ptr,
- const ConstString *object_name_ptr,
- off_t object_offset,
+PlatformRemoteiOS::GetSharedModule (const ModuleSpec &module_spec,
ModuleSP &module_sp,
const FileSpecList *module_search_paths_ptr,
ModuleSP *old_module_sp_ptr,
@@ -377,21 +367,18 @@ PlatformRemoteiOS::GetSharedModule (const FileSpec &platform_file,
// system. So first we ask for the file in the cached SDK,
// then we attempt to get a shared module for the right architecture
// with the right UUID.
- Error error;
+ const FileSpec &platform_file = module_spec.GetFileSpec();
+
FileSpec local_file;
- error = GetFile (platform_file, uuid_ptr, local_file);
+ Error error (GetFile (platform_file, module_spec.GetUUIDPtr(), local_file));
if (error.Success())
{
- error = ResolveExecutable (local_file, arch, module_sp, module_search_paths_ptr);
+ error = ResolveExecutable (local_file, module_spec.GetArchitecture(), module_sp, module_search_paths_ptr);
}
else
{
const bool always_create = false;
- error = ModuleList::GetSharedModule (platform_file,
- arch,
- uuid_ptr,
- object_name_ptr,
- object_offset,
+ error = ModuleList::GetSharedModule (module_spec,
module_sp,
module_search_paths_ptr,
old_module_sp_ptr,
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
index 2815a95ca89..9aa33f896bf 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
@@ -94,11 +94,7 @@ public:
lldb_private::FileSpec &local_file);
virtual lldb_private::Error
- GetSharedModule (const lldb_private::FileSpec &platform_file,
- const lldb_private::ArchSpec &arch,
- const lldb_private::UUID *uuid_ptr,
- const lldb_private::ConstString *object_name_ptr,
- off_t object_offset,
+ GetSharedModule (const lldb_private::ModuleSpec &module_spec,
lldb::ModuleSP &module_sp,
const lldb_private::FileSpecList *module_search_paths_ptr,
lldb::ModuleSP *old_module_sp_ptr,
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp
index 623c0a793e7..18cd4eb8f88 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp
@@ -140,13 +140,10 @@ PlatformiOSSimulator::ResolveExecutable (const FileSpec &exe_file,
if (resolved_exe_file.Exists())
{
+ ModuleSpec module_spec(resolved_exe_file, exe_arch);
if (exe_arch.IsValid())
{
- error = ModuleList::GetSharedModule (resolved_exe_file,
- exe_arch,
- NULL,
- NULL,
- 0,
+ error = ModuleList::GetSharedModule (module_spec,
exe_module_sp,
NULL,
NULL,
@@ -161,13 +158,10 @@ PlatformiOSSimulator::ResolveExecutable (const FileSpec &exe_file,
// using (in the correct order) and see if we can find a match that way
StreamString arch_names;
ArchSpec platform_arch;
- for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, platform_arch); ++idx)
+ for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, module_spec.GetArchitecture()); ++idx)
{
- error = ModuleList::GetSharedModule (resolved_exe_file,
- platform_arch,
- NULL,
- NULL,
- 0,
+
+ error = ModuleList::GetSharedModule (module_spec,
exe_module_sp,
NULL,
NULL,
@@ -314,11 +308,7 @@ PlatformiOSSimulator::GetFile (const FileSpec &platform_file,
}
Error
-PlatformiOSSimulator::GetSharedModule (const FileSpec &platform_file,
- const ArchSpec &arch,
- const UUID *uuid_ptr,
- const ConstString *object_name_ptr,
- off_t object_offset,
+PlatformiOSSimulator::GetSharedModule (const ModuleSpec &module_spec,
ModuleSP &module_sp,
const FileSpecList *module_search_paths_ptr,
ModuleSP *old_module_sp_ptr,
@@ -330,19 +320,16 @@ PlatformiOSSimulator::GetSharedModule (const FileSpec &platform_file,
// with the right UUID.
Error error;
FileSpec local_file;
- error = GetFile (platform_file, uuid_ptr, local_file);
+ const FileSpec &platform_file = module_spec.GetFileSpec();
+ error = GetFile (platform_file, module_spec.GetUUIDPtr(), local_file);
if (error.Success())
{
- error = ResolveExecutable (local_file, arch, module_sp, module_search_paths_ptr);
+ error = ResolveExecutable (local_file, module_spec.GetArchitecture(), module_sp, module_search_paths_ptr);
}
else
{
const bool always_create = false;
- error = ModuleList::GetSharedModule (platform_file,
- arch,
- uuid_ptr,
- object_name_ptr,
- object_offset,
+ error = ModuleList::GetSharedModule (module_spec,
module_sp,
module_search_paths_ptr,
old_module_sp_ptr,
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.h b/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.h
index 9842bf673d9..d0986428018 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.h
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.h
@@ -94,11 +94,7 @@ public:
lldb_private::FileSpec &local_file);
virtual lldb_private::Error
- GetSharedModule (const lldb_private::FileSpec &platform_file,
- const lldb_private::ArchSpec &arch,
- const lldb_private::UUID *uuid_ptr,
- const lldb_private::ConstString *object_name_ptr,
- off_t object_offset,
+ GetSharedModule (const lldb_private::ModuleSpec &module_spec,
lldb::ModuleSP &module_sp,
const lldb_private::FileSpecList *module_search_paths_ptr,
lldb::ModuleSP *old_module_sp_ptr,
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index aa934e1f22c..72516d21013 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -2467,13 +2467,15 @@ ProcessGDBRemote::GetDispatchQueueNameForThread
{
static ConstString g_dispatch_queue_offsets_symbol_name ("dispatch_queue_offsets");
const Symbol *dispatch_queue_offsets_symbol = NULL;
- ModuleSP module_sp(GetTarget().GetImages().FindFirstModuleForFileSpec (FileSpec("libSystem.B.dylib", false), NULL, NULL));
+ ModuleSpec libSystem_module_spec (FileSpec("libSystem.B.dylib", false));
+ ModuleSP module_sp(GetTarget().GetImages().FindFirstModule (libSystem_module_spec));
if (module_sp)
dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (g_dispatch_queue_offsets_symbol_name, eSymbolTypeData);
if (dispatch_queue_offsets_symbol == NULL)
{
- module_sp = GetTarget().GetImages().FindFirstModuleForFileSpec (FileSpec("libdispatch.dylib", false), NULL, NULL);
+ ModuleSpec libdispatch_module_spec (FileSpec("libdispatch.dylib", false));
+ module_sp = GetTarget().GetImages().FindFirstModule (libdispatch_module_spec);
if (module_sp)
dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (g_dispatch_queue_offsets_symbol_name, eSymbolTypeData);
}
diff --git a/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp b/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp
index 8cd5b1b5728..a111fb8d343 100644
--- a/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp
+++ b/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp
@@ -71,11 +71,8 @@ ProcessMachCore::CanDebug(Target &target, bool plugin_specified_by_name)
// For now we are just making sure the file exists for a given module
if (!m_core_module_sp && m_core_file.Exists())
{
- Error error (ModuleList::GetSharedModule (m_core_file,
- target.GetArchitecture(),
- NULL,
- NULL,
- 0,
+ ModuleSpec core_module_spec(m_core_file, target.GetArchitecture());
+ Error error (ModuleList::GetSharedModule (core_module_spec,
m_core_module_sp,
NULL,
NULL,
diff --git a/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp b/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
index d7a0bed8c5c..23e29d75db9 100644
--- a/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
+++ b/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
@@ -150,7 +150,11 @@ SymbolVendorMacOSX::CreateInstance (const lldb::ModuleSP &module_sp)
// one ourselves.
const FileSpec &file_spec = obj_file->GetFileSpec();
if (file_spec)
- dsym_fspec = Symbols::LocateExecutableSymbolFile (&file_spec, &module_sp->GetArchitecture(), &module_sp->GetUUID());
+ {
+ ModuleSpec module_spec(file_spec, module_sp->GetArchitecture());
+ module_spec.GetUUID() = module_sp->GetUUID();
+ dsym_fspec = Symbols::LocateExecutableSymbolFile (module_spec);
+ }
}
if (dsym_fspec)
diff --git a/lldb/source/Symbol/SymbolContext.cpp b/lldb/source/Symbol/SymbolContext.cpp
index 6be75a27b36..7fca260702b 100644
--- a/lldb/source/Symbol/SymbolContext.cpp
+++ b/lldb/source/Symbol/SymbolContext.cpp
@@ -632,8 +632,9 @@ SymbolContextSpecifier::AddSpecification (const char *spec_string, Specification
case eModuleSpecified:
{
// See if we can find the Module, if so stick it in the SymbolContext.
- FileSpec module_spec(spec_string, false);
- lldb::ModuleSP module_sp = m_target_sp->GetImages().FindFirstModuleForFileSpec (module_spec, NULL, NULL);
+ FileSpec module_file_spec(spec_string, false);
+ ModuleSpec module_spec (module_file_spec);
+ lldb::ModuleSP module_sp (m_target_sp->GetImages().FindFirstModule (module_spec));
m_type |= eModuleSpecified;
if (module_sp)
m_module_sp = module_sp;
diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp
index 1c07db9c644..403b10e19bb 100644
--- a/lldb/source/Target/Platform.cpp
+++ b/lldb/source/Target/Platform.cpp
@@ -88,11 +88,7 @@ Platform::GetFile (const FileSpec &platform_file,
}
Error
-Platform::GetSharedModule (const FileSpec &platform_file,
- const ArchSpec &arch,
- const UUID *uuid_ptr,
- const ConstString *object_name_ptr,
- off_t object_offset,
+Platform::GetSharedModule (const ModuleSpec &module_spec,
ModuleSP &module_sp,
const FileSpecList *module_search_paths_ptr,
ModuleSP *old_module_sp_ptr,
@@ -106,11 +102,7 @@ Platform::GetSharedModule (const FileSpec &platform_file,
// remote target, or might implement a download and cache
// locally implementation.
const bool always_create = false;
- return ModuleList::GetSharedModule (platform_file,
- arch,
- uuid_ptr,
- object_name_ptr,
- object_offset,
+ return ModuleList::GetSharedModule (module_spec,
module_sp,
module_search_paths_ptr,
old_module_sp_ptr,
@@ -411,13 +403,10 @@ Platform::ResolveExecutable (const FileSpec &exe_file,
Error error;
if (exe_file.Exists())
{
- if (exe_arch.IsValid())
+ ModuleSpec module_spec (exe_file, exe_arch);
+ if (module_spec.GetArchitecture().IsValid())
{
- error = ModuleList::GetSharedModule (exe_file,
- exe_arch,
- NULL,
- NULL,
- 0,
+ error = ModuleList::GetSharedModule (module_spec,
exe_module_sp,
module_search_paths_ptr,
NULL,
@@ -428,14 +417,9 @@ Platform::ResolveExecutable (const FileSpec &exe_file,
// No valid architecture was specified, ask the platform for
// the architectures that we should be using (in the correct order)
// and see if we can find a match that way
- ArchSpec platform_arch;
- for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, platform_arch); ++idx)
+ for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, module_spec.GetArchitecture()); ++idx)
{
- error = ModuleList::GetSharedModule (exe_file,
- platform_arch,
- NULL,
- NULL,
- 0,
+ error = ModuleList::GetSharedModule (module_spec,
exe_module_sp,
module_search_paths_ptr,
NULL,
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 3a26b77ed30..9b171d7b72d 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -849,8 +849,8 @@ Target::SetExecutableModule (ModuleSP& executable_sp, bool get_dependent_files)
else
platform_dependent_file_spec = dependent_file_spec;
- ModuleSP image_module_sp(GetSharedModule (platform_dependent_file_spec,
- m_arch));
+ ModuleSpec module_spec (platform_dependent_file_spec, m_arch);
+ ModuleSP image_module_sp(GetSharedModule (module_spec));
if (image_module_sp.get())
{
ObjectFile *objfile = image_module_sp->GetObjectFile();
@@ -893,16 +893,12 @@ Target::SetArchitecture (const ArchSpec &arch_spec)
if (executable_sp)
{
- FileSpec exec_file_spec = executable_sp->GetFileSpec();
- Error error = ModuleList::GetSharedModule(exec_file_spec,
- arch_spec,
- NULL,
- NULL,
- 0,
- executable_sp,
- &GetExecutableSearchPaths(),
- NULL,
- NULL);
+ ModuleSpec module_spec (executable_sp->GetFileSpec(), arch_spec);
+ Error error = ModuleList::GetSharedModule (module_spec,
+ executable_sp,
+ &GetExecutableSearchPaths(),
+ NULL,
+ NULL);
if (!error.Fail() && executable_sp)
{
@@ -964,7 +960,7 @@ Target::ModulesDidUnload (ModuleList &module_list)
bool
-Target::ModuleIsExcludedForNonModuleSpecificSearches (const FileSpec &module_spec)
+Target::ModuleIsExcludedForNonModuleSpecificSearches (const FileSpec &module_file_spec)
{
if (!m_breakpoints_use_platform_avoid)
@@ -972,10 +968,8 @@ Target::ModuleIsExcludedForNonModuleSpecificSearches (const FileSpec &module_spe
else
{
ModuleList matchingModules;
- const ArchSpec *arch_ptr = NULL;
- const lldb_private::UUID *uuid_ptr= NULL;
- const ConstString *object_name = NULL;
- size_t num_modules = GetImages().FindModules(&module_spec, arch_ptr, uuid_ptr, object_name, matchingModules);
+ ModuleSpec module_spec (module_file_spec);
+ size_t num_modules = GetImages().FindModules(module_spec, matchingModules);
// If there is more than one module for this file spec, only return true if ALL the modules are on the
// black list.
@@ -1238,15 +1232,7 @@ Target::ReadPointerFromMemory (const Address& addr,
}
ModuleSP
-Target::GetSharedModule
-(
- const FileSpec& file_spec,
- const ArchSpec& arch,
- const lldb_private::UUID *uuid_ptr,
- const ConstString *object_name,
- off_t object_offset,
- Error *error_ptr
-)
+Target::GetSharedModule (const ModuleSpec &module_spec, Error *error_ptr)
{
// Don't pass in the UUID so we can tell if we have a stale value in our list
ModuleSP old_module_sp; // This will get filled in if we have a new version of the library
@@ -1258,15 +1244,11 @@ Target::GetSharedModule
// If there are image search path entries, try to use them first to acquire a suitable image.
if (m_image_search_paths.GetSize())
{
- FileSpec transformed_spec;
- if (m_image_search_paths.RemapPath (file_spec.GetDirectory(), transformed_spec.GetDirectory()))
+ ModuleSpec transformed_spec (module_spec);
+ if (m_image_search_paths.RemapPath (module_spec.GetFileSpec().GetDirectory(), transformed_spec.GetFileSpec().GetDirectory()))
{
- transformed_spec.GetFilename() = file_spec.GetFilename();
+ transformed_spec.GetFileSpec().GetFilename() = module_spec.GetFileSpec().GetFilename();
error = ModuleList::GetSharedModule (transformed_spec,
- arch,
- uuid_ptr,
- object_name,
- object_offset,
module_sp,
&GetExecutableSearchPaths(),
&old_module_sp,
@@ -1279,11 +1261,7 @@ Target::GetSharedModule
if (m_platform_sp)
{
FileSpec platform_file_spec;
- error = m_platform_sp->GetSharedModule (file_spec,
- arch,
- uuid_ptr,
- object_name,
- object_offset,
+ error = m_platform_sp->GetSharedModule (module_spec,
module_sp,
&GetExecutableSearchPaths(),
&old_module_sp,
OpenPOWER on IntegriCloud