summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2012-01-12 05:25:17 +0000
committerGreg Clayton <gclayton@apple.com>2012-01-12 05:25:17 +0000
commit44435ed07a3688b737813ca691c7cf78e086a6c8 (patch)
treeff29a9839c89f35cea5a5803be632f01b294936a /lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
parentc7f03b6155efa4deb35d0d33f87113606e8d8394 (diff)
downloadbcm5719-llvm-44435ed07a3688b737813ca691c7cf78e086a6c8.tar.gz
bcm5719-llvm-44435ed07a3688b737813ca691c7cf78e086a6c8.zip
Big change in the way ObjectFile file contents are managed. We now
mmap() the entire object file contents into memory with MAP_PRIVATE. We do this because object file contents can change on us and currently this helps alleviate this situation. It also make the code for accessing object file data much easier to manage and we don't end up opening the file, reading some data and closing the file over and over. llvm-svn: 148017
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp')
-rw-r--r--lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp29
1 files changed, 9 insertions, 20 deletions
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 1cd8c3b34ae..81126f637f9 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -473,15 +473,11 @@ ObjectFileELF::ParseProgramHeaders()
return 0;
const size_t ph_size = m_header.e_phnum * m_header.e_phentsize;
- const elf_off ph_offset = m_offset + m_header.e_phoff;
- DataBufferSP buffer_sp(m_file.ReadFileContents(ph_offset, ph_size));
-
- if (buffer_sp.get() == NULL || buffer_sp->GetByteSize() != ph_size)
+ const elf_off ph_offset = m_header.e_phoff;
+ DataExtractor data;
+ if (GetData (ph_offset, ph_size, data) != ph_size)
return 0;
- DataExtractor data(buffer_sp, m_data.GetByteOrder(),
- m_data.GetAddressByteSize());
-
uint32_t idx;
uint32_t offset;
for (idx = 0, offset = 0; idx < m_header.e_phnum; ++idx)
@@ -515,16 +511,11 @@ ObjectFileELF::ParseSectionHeaders()
return 0;
const size_t sh_size = m_header.e_shnum * m_header.e_shentsize;
- const elf_off sh_offset = m_offset + m_header.e_shoff;
- DataBufferSP buffer_sp(m_file.ReadFileContents(sh_offset, sh_size));
-
- if (buffer_sp.get() == NULL || buffer_sp->GetByteSize() != sh_size)
+ const elf_off sh_offset = m_header.e_shoff;
+ DataExtractor data;
+ if (GetData (sh_offset, sh_size, data) != sh_size)
return 0;
- DataExtractor data(buffer_sp,
- m_data.GetByteOrder(),
- m_data.GetAddressByteSize());
-
uint32_t idx;
uint32_t offset;
for (idx = 0, offset = 0; idx < m_header.e_shnum; ++idx)
@@ -549,13 +540,11 @@ ObjectFileELF::GetSectionHeaderStringTable()
{
const ELFSectionHeader &sheader = m_section_headers[strtab_idx];
const size_t byte_size = sheader.sh_size;
- const Elf64_Off offset = m_offset + sheader.sh_offset;
- DataBufferSP buffer_sp(m_file.ReadFileContents(offset, byte_size));
+ const Elf64_Off offset = sheader.sh_offset;
+ m_shstr_data.SetData (m_data, offset, byte_size);
- if (buffer_sp.get() == NULL || buffer_sp->GetByteSize() != byte_size)
+ if (m_shstr_data.GetByteSize() != byte_size)
return 0;
-
- m_shstr_data.SetData(buffer_sp);
}
}
return m_shstr_data.GetByteSize();
OpenPOWER on IntegriCloud