diff options
Diffstat (limited to 'lldb/source/Symbol/ObjectFile.cpp')
-rw-r--r-- | lldb/source/Symbol/ObjectFile.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lldb/source/Symbol/ObjectFile.cpp b/lldb/source/Symbol/ObjectFile.cpp index c2e2be9cfb7..39593bc6e2b 100644 --- a/lldb/source/Symbol/ObjectFile.cpp +++ b/lldb/source/Symbol/ObjectFile.cpp @@ -483,9 +483,9 @@ size_t ObjectFile::CopyData(lldb::offset_t offset, size_t length, return m_data.CopyData(offset, length, dst); } -size_t ObjectFile::ReadSectionData(const Section *section, +size_t ObjectFile::ReadSectionData(Section *section, lldb::offset_t section_offset, void *dst, - size_t dst_len) const { + size_t dst_len) { assert(section); section_offset *= section->GetTargetByteSize(); @@ -505,6 +505,9 @@ size_t ObjectFile::ReadSectionData(const Section *section, dst_len, error); } } else { + if (!section->IsRelocated()) + RelocateSection(section); + const lldb::offset_t section_file_size = section->GetFileSize(); if (section_offset < section_file_size) { const size_t section_bytes_left = section_file_size - section_offset; @@ -531,8 +534,8 @@ size_t ObjectFile::ReadSectionData(const Section *section, //---------------------------------------------------------------------- // Get the section data the file on disk //---------------------------------------------------------------------- -size_t ObjectFile::ReadSectionData(const Section *section, - DataExtractor §ion_data) const { +size_t ObjectFile::ReadSectionData(Section *section, + DataExtractor §ion_data) { // If some other objectfile owns this data, pass this to them. if (section->GetObjectFile() != this) return section->GetObjectFile()->ReadSectionData(section, section_data); @@ -562,8 +565,8 @@ size_t ObjectFile::ReadSectionData(const Section *section, } } -size_t ObjectFile::MemoryMapSectionData(const Section *section, - DataExtractor §ion_data) const { +size_t ObjectFile::MemoryMapSectionData(Section *section, + DataExtractor §ion_data) { // If some other objectfile owns this data, pass this to them. if (section->GetObjectFile() != this) return section->GetObjectFile()->MemoryMapSectionData(section, @@ -572,6 +575,9 @@ size_t ObjectFile::MemoryMapSectionData(const Section *section, if (IsInMemory()) { return ReadSectionData(section, section_data); } else { + if (!section->IsRelocated()) + RelocateSection(section); + // The object file now contains a full mmap'ed copy of the object file data, // so just use this return GetData(section->GetFileOffset(), section->GetFileSize(), @@ -694,3 +700,7 @@ Status ObjectFile::LoadInMemory(Target &target, bool set_pc) { } return error; } + +void ObjectFile::RelocateSection(lldb_private::Section *section) +{ +} |