LibELF: Remove DynamicSection from ELFImage

Since ELFDynamicObject needs the actual virtual address of the .dynamic
section in the loaded image, and not the file offset like we assumed
before, due to MAP_PRIVATE secretly giving us a MAP_SHARED, we can
remove all of the Dynamic* code from ELFImage.

ELFDynamicLoader only needs ELFImage to get the Program headers at this
point. More consolidation opportunities seem likely in the future.
This commit is contained in:
Andrew Kaster 2020-01-08 21:40:11 -07:00 committed by Andreas Kling
parent 2e349337d3
commit c21f384d17
Notes: sideshowbarker 2024-07-19 10:14:56 +09:00
2 changed files with 0 additions and 25 deletions

View file

@ -117,10 +117,6 @@ bool ELFImage::parse()
if (StringView(".strtab") == section_header_table_string(sh.sh_name)) if (StringView(".strtab") == section_header_table_string(sh.sh_name))
m_string_table_section_index = i; m_string_table_section_index = i;
} }
if (sh.sh_type == SHT_DYNAMIC) {
ASSERT(!m_dynamic_section_index || m_dynamic_section_index == i);
m_dynamic_section_index = i;
}
} }
// Then create a name-to-index map. // Then create a name-to-index map.
@ -218,9 +214,3 @@ const ELFImage::Section ELFImage::lookup_section(const String& name) const
return section((*it).value); return section((*it).value);
return section(0); return section(0);
} }
const ELFImage::DynamicSection ELFImage::dynamic_section() const
{
ASSERT(is_dynamic());
return section(m_dynamic_section_index);
}

View file

@ -27,7 +27,6 @@ public:
class RelocationSection; class RelocationSection;
class Symbol; class Symbol;
class Relocation; class Relocation;
class DynamicSection;
class Symbol { class Symbol {
public: public:
@ -111,8 +110,6 @@ public:
protected: protected:
friend class RelocationSection; friend class RelocationSection;
friend class DynamicSection;
friend class DynamicRelocationSection;
const ELFImage& m_image; const ELFImage& m_image;
const Elf32_Shdr& m_section_header; const Elf32_Shdr& m_section_header;
unsigned m_section_index; unsigned m_section_index;
@ -150,24 +147,13 @@ public:
const Elf32_Rel& m_rel; const Elf32_Rel& m_rel;
}; };
class DynamicSection : public Section {
public:
DynamicSection(const Section& section)
: Section(section.m_image, section.m_section_index)
{
ASSERT(type() == SHT_DYNAMIC);
}
};
unsigned symbol_count() const; unsigned symbol_count() const;
unsigned dynamic_symbol_count() const;
unsigned section_count() const; unsigned section_count() const;
unsigned program_header_count() const; unsigned program_header_count() const;
const Symbol symbol(unsigned) const; const Symbol symbol(unsigned) const;
const Section section(unsigned) const; const Section section(unsigned) const;
const ProgramHeader program_header(unsigned const) const; const ProgramHeader program_header(unsigned const) const;
const DynamicSection dynamic_section() const;
template<typename F> template<typename F>
void for_each_section(F) const; void for_each_section(F) const;
@ -204,7 +190,6 @@ private:
bool m_valid { false }; bool m_valid { false };
unsigned m_symbol_table_section_index { 0 }; unsigned m_symbol_table_section_index { 0 };
unsigned m_string_table_section_index { 0 }; unsigned m_string_table_section_index { 0 };
unsigned m_dynamic_section_index { 0 };
}; };
template<typename F> template<typename F>