diff options
| author | Greg Clayton <gclayton@apple.com> | 2013-05-10 21:47:16 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2013-05-10 21:47:16 +0000 |
| commit | 57abc5d6a6f393f488903c5a35e5a898fc201d3a (patch) | |
| tree | 25cef51feff2409f74f0bdb1bd9938c20d138ba5 /lldb/source/Plugins/ObjectContainer | |
| parent | bf0bd1f4ab2b9b4826d58407962260256d4b3709 (diff) | |
| download | bcm5719-llvm-57abc5d6a6f393f488903c5a35e5a898fc201d3a.tar.gz bcm5719-llvm-57abc5d6a6f393f488903c5a35e5a898fc201d3a.zip | |
<rdar://problem/13854277>
<rdar://problem/13594769>
Main changes in this patch include:
- cleanup plug-in interface and use ConstStrings for plug-in names
- Modfiied the BSD Archive plug-in to be able to pick out the correct .o file when .a files contain multiple .o files with the same name by using the timestamp
- Modified SymbolFileDWARFDebugMap to properly verify the timestamp on .o files it loads to ensure we don't load updated .o files and cause problems when debugging
The plug-in interface changes:
Modified the lldb_private::PluginInterface class that all plug-ins inherit from:
Changed:
virtual const char * GetPluginName() = 0;
To:
virtual ConstString GetPluginName() = 0;
Removed:
virtual const char * GetShortPluginName() = 0;
- Fixed up all plug-in to adhere to the new interface and to return lldb_private::ConstString values for the plug-in names.
- Fixed all plug-ins to return simple names with no prefixes. Some plug-ins had prefixes and most ones didn't, so now they all don't have prefixed names, just simple names like "linux", "gdb-remote", etc.
llvm-svn: 181631
Diffstat (limited to 'lldb/source/Plugins/ObjectContainer')
4 files changed, 41 insertions, 37 deletions
diff --git a/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp b/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp index a5e87fc358d..109e429fc7f 100644 --- a/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp +++ b/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp @@ -148,11 +148,29 @@ ObjectContainerBSDArchive::Archive::ParseObjects () } ObjectContainerBSDArchive::Object * -ObjectContainerBSDArchive::Archive::FindObject (const ConstString &object_name) +ObjectContainerBSDArchive::Archive::FindObject (const ConstString &object_name, const TimeValue &object_mod_time) { const ObjectNameToIndexMap::Entry *match = m_object_name_to_index_map.FindFirstValueForName (object_name.GetCString()); if (match) - return &m_objects[match->value]; + { + if (object_mod_time.IsValid()) + { + const uint64_t object_date = object_mod_time.GetAsSecondsSinceJan1_1970(); + if (m_objects[match->value].ar_date == object_date) + return &m_objects[match->value]; + const ObjectNameToIndexMap::Entry *next_match = m_object_name_to_index_map.FindNextValueForName (match); + while (next_match) + { + if (m_objects[next_match->value].ar_date == object_date) + return &m_objects[next_match->value]; + next_match = m_object_name_to_index_map.FindNextValueForName (next_match); + } + } + else + { + return &m_objects[match->value]; + } + } return NULL; } @@ -250,10 +268,11 @@ ObjectContainerBSDArchive::Terminate() } -const char * +lldb_private::ConstString ObjectContainerBSDArchive::GetPluginNameStatic() { - return "object-container.bsd-archive"; + static ConstString g_name("bsd-archive"); + return g_name; } const char * @@ -297,11 +316,11 @@ ObjectContainerBSDArchive::CreateInstance Archive::shared_ptr archive_sp (Archive::FindCachedArchive (*file, module_sp->GetArchitecture(), module_sp->GetModificationTime())); std::unique_ptr<ObjectContainerBSDArchive> container_ap(new ObjectContainerBSDArchive (module_sp, - archive_data_sp, - archive_data_offset, - file, - file_offset, - length)); + archive_data_sp, + archive_data_offset, + file, + file_offset, + length)); if (container_ap.get()) { @@ -434,7 +453,8 @@ ObjectContainerBSDArchive::GetObjectFile (const FileSpec *file) { if (module_sp->GetObjectName() && m_archive_sp) { - Object *object = m_archive_sp->FindObject (module_sp->GetObjectName()); + Object *object = m_archive_sp->FindObject (module_sp->GetObjectName(), + module_sp->GetObjectModificationTime()); if (object) { lldb::offset_t data_offset = m_offset + object->ar_file_offset; @@ -454,15 +474,9 @@ ObjectContainerBSDArchive::GetObjectFile (const FileSpec *file) //------------------------------------------------------------------ // PluginInterface protocol //------------------------------------------------------------------ -const char * +lldb_private::ConstString ObjectContainerBSDArchive::GetPluginName() { - return "object-container.bsd-archive"; -} - -const char * -ObjectContainerBSDArchive::GetShortPluginName() -{ return GetPluginNameStatic(); } diff --git a/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h b/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h index 7802eb152d5..a44bb80a965 100644 --- a/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h +++ b/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h @@ -32,7 +32,7 @@ public: static void Terminate(); - static const char * + static lldb_private::ConstString GetPluginNameStatic(); static const char * @@ -89,12 +89,9 @@ public: //------------------------------------------------------------------ // PluginInterface protocol //------------------------------------------------------------------ - virtual const char * + virtual lldb_private::ConstString GetPluginName(); - virtual const char * - GetShortPluginName(); - virtual uint32_t GetPluginVersion(); @@ -163,7 +160,8 @@ protected: ParseObjects (); Object * - FindObject (const lldb_private::ConstString &object_name); + FindObject (const lldb_private::ConstString &object_name, + const lldb_private::TimeValue &object_mod_time); const lldb_private::TimeValue & GetModificationTime() diff --git a/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp b/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp index d1f4434c987..f28aa3bed05 100644 --- a/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp +++ b/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp @@ -37,10 +37,11 @@ ObjectContainerUniversalMachO::Terminate() } -const char * +lldb_private::ConstString ObjectContainerUniversalMachO::GetPluginNameStatic() { - return "object-container.mach-o"; + static ConstString g_name("mach-o"); + return g_name; } const char * @@ -259,15 +260,9 @@ ObjectContainerUniversalMachO::GetObjectFile (const FileSpec *file) //------------------------------------------------------------------ // PluginInterface protocol //------------------------------------------------------------------ -const char * +lldb_private::ConstString ObjectContainerUniversalMachO::GetPluginName() { - return "ObjectContainerUniversalMachO"; -} - -const char * -ObjectContainerUniversalMachO::GetShortPluginName() -{ return GetPluginNameStatic(); } diff --git a/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h b/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h index 1fe1a2d2165..0c4a3d47c7a 100644 --- a/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h +++ b/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h @@ -28,7 +28,7 @@ public: static void Terminate(); - static const char * + static lldb_private::ConstString GetPluginNameStatic(); static const char * @@ -84,12 +84,9 @@ public: //------------------------------------------------------------------ // PluginInterface protocol //------------------------------------------------------------------ - virtual const char * + virtual lldb_private::ConstString GetPluginName(); - virtual const char * - GetShortPluginName(); - virtual uint32_t GetPluginVersion(); |

