diff options
Diffstat (limited to 'lldb/source/Core/Module.cpp')
-rw-r--r-- | lldb/source/Core/Module.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/lldb/source/Core/Module.cpp b/lldb/source/Core/Module.cpp index f8e2f8871cb..f8e5b4e410c 100644 --- a/lldb/source/Core/Module.cpp +++ b/lldb/source/Core/Module.cpp @@ -1097,23 +1097,27 @@ Module::GetObjectFile() Mutex::Locker locker (m_mutex); if (m_did_load_objfile == false) { - m_did_load_objfile = true; Timer scoped_timer(__PRETTY_FUNCTION__, "Module::GetObjectFile () module = %s", GetFileSpec().GetFilename().AsCString("")); DataBufferSP data_sp; lldb::offset_t data_offset = 0; - m_objfile_sp = ObjectFile::FindPlugin (shared_from_this(), - &m_file, - m_object_offset, - m_file.GetByteSize(), - data_sp, - data_offset); - if (m_objfile_sp) + const lldb::offset_t file_size = m_file.GetByteSize(); + if (file_size > m_object_offset) { - // Once we get the object file, update our module with the object file's - // architecture since it might differ in vendor/os if some parts were - // unknown. - m_objfile_sp->GetArchitecture (m_arch); + m_did_load_objfile = true; + m_objfile_sp = ObjectFile::FindPlugin (shared_from_this(), + &m_file, + m_object_offset, + file_size - m_object_offset, + data_sp, + data_offset); + if (m_objfile_sp) + { + // Once we get the object file, update our module with the object file's + // architecture since it might differ in vendor/os if some parts were + // unknown. + m_objfile_sp->GetArchitecture (m_arch); + } } } return m_objfile_sp.get(); |