summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/ObjectFile
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2013-02-05 22:31:24 +0000
committerJason Molenda <jmolenda@apple.com>2013-02-05 22:31:24 +0000
commitd34e652ef8b8df54d5cc99fcdc0b0981cf01eeb0 (patch)
tree2404235e0c21adcc7d6734b0faefa1c9bed52bd9 /lldb/source/Plugins/ObjectFile
parentb6354a0767b9db3611f193a9203c619d5a247b0f (diff)
downloadbcm5719-llvm-d34e652ef8b8df54d5cc99fcdc0b0981cf01eeb0.tar.gz
bcm5719-llvm-d34e652ef8b8df54d5cc99fcdc0b0981cf01eeb0.zip
Change ObjectFileMachO::ParseSymtab to read the external
function stub routine addresses from an in-memory-only MachO object file. This was the only remaining part of ParseSymtab() that was assuming a file exists. <rdar://problem/13139585> llvm-svn: 174455
Diffstat (limited to 'lldb/source/Plugins/ObjectFile')
-rw-r--r--lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index 953d5627ffe..ad219c75ca9 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -1290,6 +1290,7 @@ ObjectFileMachO::ParseSymtab (bool minimize)
DataExtractor nlist_data (NULL, 0, byte_order, addr_byte_size);
DataExtractor strtab_data (NULL, 0, byte_order, addr_byte_size);
DataExtractor function_starts_data (NULL, 0, byte_order, addr_byte_size);
+ DataExtractor indirect_symbol_index_data (NULL, 0, byte_order, addr_byte_size);
const addr_t nlist_data_byte_size = symtab_load_command.nsyms * nlist_byte_size;
const addr_t strtab_data_byte_size = symtab_load_command.strsize;
@@ -1349,6 +1350,13 @@ ObjectFileMachO::ParseSymtab (bool minimize)
//DataBufferSP strtab_data_sp (ReadMemory (process_sp, strtab_addr, strtab_data_byte_size));
//if (strtab_data_sp)
// strtab_data.SetData (strtab_data_sp, 0, strtab_data_sp->GetByteSize());
+ if (m_dysymtab.nindirectsyms != 0)
+ {
+ const addr_t indirect_syms_addr = linkedit_load_addr + m_dysymtab.indirectsymoff - linkedit_file_offset;
+ DataBufferSP indirect_syms_data_sp (ReadMemory (process_sp, indirect_syms_addr, m_dysymtab.nindirectsyms * 4));
+ if (indirect_syms_data_sp)
+ indirect_symbol_index_data.SetData (indirect_syms_data_sp, 0, indirect_syms_data_sp->GetByteSize());
+ }
if (function_starts_load_command.cmd)
{
const addr_t func_start_addr = linkedit_load_addr + function_starts_load_command.dataoff - linkedit_file_offset;
@@ -1367,6 +1375,12 @@ ObjectFileMachO::ParseSymtab (bool minimize)
strtab_data.SetData (m_data,
symtab_load_command.stroff,
strtab_data_byte_size);
+ if (m_dysymtab.nindirectsyms != 0)
+ {
+ indirect_symbol_index_data.SetData (m_data,
+ m_dysymtab.indirectsymoff,
+ m_dysymtab.nindirectsyms * 4);
+ }
if (function_starts_load_command.cmd)
{
function_starts_data.SetData (m_data,
@@ -3168,8 +3182,6 @@ ObjectFileMachO::ParseSymtab (bool minimize)
// Now synthesize indirect symbols
if (m_dysymtab.nindirectsyms != 0)
{
- DataExtractor indirect_symbol_index_data (m_data, m_dysymtab.indirectsymoff, m_dysymtab.nindirectsyms * 4);
-
if (indirect_symbol_index_data.GetByteSize())
{
NListIndexToSymbolIndexMap::const_iterator end_index_pos = m_nlist_idx_to_sym_idx.end();
OpenPOWER on IntegriCloud