diff options
author | Ashok Thirumurthi <ashok.thirumurthi@intel.com> | 2013-07-11 20:39:00 +0000 |
---|---|---|
committer | Ashok Thirumurthi <ashok.thirumurthi@intel.com> | 2013-07-11 20:39:00 +0000 |
commit | 4822d9263a66fca01bf06e32e04e12fbce30451e (patch) | |
tree | bb6dc2dd151c6bedaf8817fdab77dcc4effbf8da /lldb/source | |
parent | ed0f6468b804ad5a8f972e37e481c2a68cd174ee (diff) | |
download | bcm5719-llvm-4822d9263a66fca01bf06e32e04e12fbce30451e.tar.gz bcm5719-llvm-4822d9263a66fca01bf06e32e04e12fbce30451e.zip |
Adds methods to ObjectFileELF to access data in ELF segments
in preparation to add support for ELF core files.
Patch by Samuel Jacob!
llvm-svn: 186114
Diffstat (limited to 'lldb/source')
-rw-r--r-- | lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp | 29 | ||||
-rw-r--r-- | lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h | 12 |
2 files changed, 40 insertions, 1 deletions
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp index fde83fb43c1..251b8f9fc9d 100644 --- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp +++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp @@ -801,6 +801,33 @@ ObjectFileELF::GetSectionHeaderInfo(SectionHeaderColl §ion_headers, return 0; } +size_t +ObjectFileELF::GetProgramHeaderCount() +{ + return ParseProgramHeaders(); +} + +const elf::ELFProgramHeader * +ObjectFileELF::GetProgramHeaderByIndex(lldb::user_id_t id) +{ + if (!id || !ParseProgramHeaders()) + return NULL; + + if (--id < m_program_headers.size()) + return &m_program_headers[id]; + + return NULL; +} + +DataExtractor +ObjectFileELF::GetSegmentDataByIndex(lldb::user_id_t id) +{ + const elf::ELFProgramHeader *segment_header = GetProgramHeaderByIndex(id); + if (segment_header == NULL) + return DataExtractor(); + return DataExtractor(m_data, segment_header->p_offset, segment_header->p_filesz); +} + //---------------------------------------------------------------------- // ParseSectionHeaders //---------------------------------------------------------------------- @@ -813,7 +840,7 @@ ObjectFileELF::ParseSectionHeaders() const ObjectFileELF::ELFSectionHeaderInfo * ObjectFileELF::GetSectionHeaderByIndex(lldb::user_id_t id) { - if (!ParseSectionHeaders() || !id) + if (!id || !ParseSectionHeaders()) return NULL; if (--id < m_section_headers.size()) diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h index e186fc310ac..2365101f427 100644 --- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h +++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h @@ -135,6 +135,18 @@ public: virtual ObjectFile::Strata CalculateStrata(); + // Returns number of program headers found in the ELF file. + size_t + GetProgramHeaderCount(); + + // Returns the program header with the given index. + const elf::ELFProgramHeader * + GetProgramHeaderByIndex(lldb::user_id_t id); + + // Returns segment data for the given index. + lldb_private::DataExtractor + GetSegmentDataByIndex(lldb::user_id_t id); + private: ObjectFileELF(const lldb::ModuleSP &module_sp, lldb::DataBufferSP& data_sp, |