summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2013-07-12 22:07:46 +0000
committerGreg Clayton <gclayton@apple.com>2013-07-12 22:07:46 +0000
commit2540a8a7bc063c4f5236578a5c93f1f5c46a138f (patch)
tree6e7cc6578129eb1cfbd8f820cd791a3416e68279 /lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
parentc6036aa83127c50162735e8a343623f03a3211fb (diff)
downloadbcm5719-llvm-2540a8a7bc063c4f5236578a5c93f1f5c46a138f.tar.gz
bcm5719-llvm-2540a8a7bc063c4f5236578a5c93f1f5c46a138f.zip
Fixed GetModuleSpecifications() to work better overall:
- MachO files now correctly extract the UUID all the time - More file size and offset verification done for universal mach-o files to watch for truncated files - ObjectContainerBSDArchive now supports enumerating all objects in BSD archives (.a files) - lldb_private::Module() can not be properly constructed using a ModuleSpec for a .o file in a .a file - The BSD archive plug-in shares its cache for GetModuleSpecifications() and the create callback - Improved printing for ModuleSpec objects llvm-svn: 186211
Diffstat (limited to 'lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp')
-rw-r--r--lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp b/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
index f28aa3bed05..976d7bf47ed 100644
--- a/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
+++ b/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
@@ -278,13 +278,13 @@ ObjectContainerUniversalMachO::GetModuleSpecifications (const lldb_private::File
lldb::DataBufferSP& data_sp,
lldb::offset_t data_offset,
lldb::offset_t file_offset,
- lldb::offset_t length,
+ lldb::offset_t file_size,
lldb_private::ModuleSpecList &specs)
{
const size_t initial_count = specs.GetSize();
DataExtractor data;
- data.SetData (data_sp, data_offset, length);
+ data.SetData (data_sp, data_offset, data_sp->GetByteSize());
if (ObjectContainerUniversalMachO::MagicBytesMatch(data))
{
@@ -294,9 +294,14 @@ ObjectContainerUniversalMachO::GetModuleSpecifications (const lldb_private::File
{
for (const llvm::MachO::fat_arch &fat_arch : fat_archs)
{
- ObjectFile::GetModuleSpecifications (file,
- fat_arch.offset + file_offset,
- specs);
+ const lldb::offset_t slice_file_offset = fat_arch.offset + file_offset;
+ if (fat_arch.offset < file_size && file_size > slice_file_offset)
+ {
+ ObjectFile::GetModuleSpecifications (file,
+ slice_file_offset,
+ file_size - slice_file_offset,
+ specs);
+ }
}
}
}
OpenPOWER on IntegriCloud