ObjectFile: remove ReadSectionData/MemoryMapSectionData mutual recursion

Summary:
These two functions were calling each other, while handling different
branches of the if(IsInMemory()). This had a reason at some point in the
past, but right now it's just confusing.

I resolve this by removing the MemoryMapSectionData function and
inlining the !IsInMemory branch into ReadSectionData. There isn't
anything mmap-related in this function anyway, as the decision whether
to mmap is handled at a higher level.

This is a preparatory step to make ObjectFileELF be able to decompress
compressed sections (I want to make sure that all calls reading section
data are routed through a single piece of code).

Reviewers: clayborg

Subscribers: emaste, JDevlieghere, lldb-commits

Differential Revision: https://reviews.llvm.org/D41169

llvm-svn: 320705
This commit is contained in:
Pavel Labath 2017-12-14 14:56:45 +00:00
parent 8630d3871d
commit f1208e7aef
3 changed files with 1 additions and 22 deletions

View File

@ -805,9 +805,6 @@ public:
virtual size_t ReadSectionData(Section *section,
DataExtractor &section_data);
size_t MemoryMapSectionData(Section *section,
DataExtractor &section_data);
bool IsInMemory() const { return m_memory_addr != LLDB_INVALID_ADDRESS; }
// Strip linker annotations (such as @@VERSION) from symbol names.

View File

@ -444,10 +444,8 @@ void SymbolFileDWARF::InitializeObject() {
Section *section =
section_list->FindSectionByName(GetDWARFMachOSegmentName()).get();
// Memory map the DWARF mach-o segment so we have everything mmap'ed
// to keep our heap memory usage down.
if (section)
m_obj_file->MemoryMapSectionData(section, m_dwarf_data);
m_obj_file->ReadSectionData(section, m_dwarf_data);
}
get_apple_names_data();

View File

@ -561,25 +561,9 @@ size_t ObjectFile::ReadSectionData(Section *section,
} else {
// The object file now contains a full mmap'ed copy of the object file data,
// so just use this
return MemoryMapSectionData(section, section_data);
}
}
size_t ObjectFile::MemoryMapSectionData(Section *section,
DataExtractor &section_data) {
// If some other objectfile owns this data, pass this to them.
if (section->GetObjectFile() != this)
return section->GetObjectFile()->MemoryMapSectionData(section,
section_data);
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(),
section_data);
}