@@ -68,21 +68,19 @@ void ObjectContainerBSDArchive::Object::Dump() const {
6868ObjectContainerBSDArchive::Archive::Archive (const lldb_private::ArchSpec &arch,
6969 const llvm::sys::TimePoint<> &time,
7070 lldb::offset_t file_offset,
71- lldb_private::DataExtractor &data ,
71+ lldb::DataExtractorSP extractor_sp ,
7272 ArchiveType archive_type)
7373 : m_arch(arch), m_modification_time(time), m_file_offset(file_offset),
74- m_objects(), m_data(data ), m_archive_type(archive_type) {}
74+ m_objects(), m_extractor_sp(extractor_sp ), m_archive_type(archive_type) {}
7575
7676Log *l = GetLog(LLDBLog::Object);
7777ObjectContainerBSDArchive::Archive::~Archive () = default ;
7878
7979size_t ObjectContainerBSDArchive::Archive::ParseObjects () {
80- DataExtractor &data = m_data;
81-
8280 std::unique_ptr<llvm::MemoryBuffer> mem_buffer =
8381 llvm::MemoryBuffer::getMemBuffer (
84- llvm::StringRef ((const char *)data. GetDataStart (),
85- data. GetByteSize ()),
82+ llvm::StringRef ((const char *)m_extractor_sp-> GetDataStart (),
83+ m_extractor_sp-> GetByteSize ()),
8684 llvm::StringRef (),
8785 /* RequiresNullTerminator=*/ false );
8886
@@ -221,9 +219,9 @@ ObjectContainerBSDArchive::Archive::shared_ptr
221219ObjectContainerBSDArchive::Archive::ParseAndCacheArchiveForFile (
222220 const FileSpec &file, const ArchSpec &arch,
223221 const llvm::sys::TimePoint<> &time, lldb::offset_t file_offset,
224- DataExtractor &data , ArchiveType archive_type) {
222+ DataExtractorSP extractor_sp , ArchiveType archive_type) {
225223 shared_ptr archive_sp (
226- new Archive (arch, time, file_offset, data , archive_type));
224+ new Archive (arch, time, file_offset, extractor_sp , archive_type));
227225 if (archive_sp) {
228226 const size_t num_objects = archive_sp->ParseObjects ();
229227 if (num_objects > 0 ) {
@@ -368,16 +366,17 @@ ObjectContainerBSDArchive::~ObjectContainerBSDArchive() = default;
368366
369367bool ObjectContainerBSDArchive::ParseHeader () {
370368 if (m_archive_sp.get () == nullptr ) {
371- if (m_data. GetByteSize () > 0 ) {
369+ if (m_extractor_sp-> GetByteSize () > 0 ) {
372370 ModuleSP module_sp (GetModule ());
373371 if (module_sp) {
374372 m_archive_sp = Archive::ParseAndCacheArchiveForFile (
375373 m_file, module_sp->GetArchitecture (),
376- module_sp->GetModificationTime (), m_offset, m_data, m_archive_type);
374+ module_sp->GetModificationTime (), m_offset, m_extractor_sp,
375+ m_archive_type);
377376 }
378- // Clear the m_data that contains the entire archive data and let our
379- // m_archive_sp hold onto the data.
380- m_data. Clear ();
377+ // Clear the m_extractor_sp that contains the entire archive data and let
378+ // our m_archive_sp hold onto the data.
379+ m_extractor_sp = std::make_shared<DataExtractor> ();
381380 }
382381 }
383382 return m_archive_sp.get () != nullptr ;
@@ -416,14 +415,18 @@ ObjectFileSP ObjectContainerBSDArchive::GetObjectFile(const FileSpec *file) {
416415 child_data_sp->GetByteSize () != object->file_size )
417416 return ObjectFileSP ();
418417 lldb::offset_t data_offset = 0 ;
418+ DataExtractorSP extractor_sp =
419+ std::make_shared<DataExtractor>(child_data_sp);
419420 return ObjectFile::FindPlugin (
420421 module_sp, &child, m_offset + object->file_offset ,
421- object->file_size , child_data_sp , data_offset);
422+ object->file_size , extractor_sp , data_offset);
422423 }
423424 lldb::offset_t data_offset = object->file_offset ;
425+ DataExtractorSP extractor_sp =
426+ std::make_shared<DataExtractor>(m_archive_sp->GetData ());
424427 return ObjectFile::FindPlugin (
425428 module_sp, file, m_offset + object->file_offset , object->file_size ,
426- m_archive_sp-> GetData (). GetSharedDataBuffer () , data_offset);
429+ extractor_sp , data_offset);
427430 }
428431 }
429432 }
@@ -438,9 +441,10 @@ size_t ObjectContainerBSDArchive::GetModuleSpecifications(
438441 // We have data, which means this is the first 512 bytes of the file Check to
439442 // see if the magic bytes match and if they do, read the entire table of
440443 // contents for the archive and cache it
441- DataExtractor data;
442- data.SetData (data_sp, data_offset, data_sp->GetByteSize ());
443- ArchiveType archive_type = ObjectContainerBSDArchive::MagicBytesMatch (data);
444+ DataExtractorSP extractor_sp = std::make_shared<DataExtractor>();
445+ extractor_sp->SetData (data_sp, data_offset, data_sp->GetByteSize ());
446+ ArchiveType archive_type =
447+ ObjectContainerBSDArchive::MagicBytesMatch (*extractor_sp.get ());
444448 if (!file || !data_sp || archive_type == ArchiveType::Invalid)
445449 return 0 ;
446450
@@ -455,9 +459,10 @@ size_t ObjectContainerBSDArchive::GetModuleSpecifications(
455459 data_sp =
456460 FileSystem::Instance ().CreateDataBuffer (file, file_size, file_offset);
457461 if (data_sp) {
458- data. SetData (data_sp, 0 , data_sp-> GetByteSize () );
462+ extractor_sp-> SetData (data_sp );
459463 archive_sp = Archive::ParseAndCacheArchiveForFile (
460- file, ArchSpec (), file_mod_time, file_offset, data, archive_type);
464+ file, ArchSpec (), file_mod_time, file_offset, extractor_sp,
465+ archive_type);
461466 }
462467 }
463468
0 commit comments