From debb88107981694c5e16ce6030180b1ed8c98fd1 Mon Sep 17 00:00:00 2001 From: Greg Clayton Date: Fri, 25 May 2012 17:04:00 +0000 Subject: [PATCH] Fixed an issue where we might have easy access to the string table data for a mach file from memory even though we have a process. So now we don't read the string table strings from memory when we don't have to. llvm-svn: 157482 --- .../Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp | 38 ++++++++++++---------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp index 418a93c..ff643f4 100644 --- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp +++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp @@ -1359,21 +1359,25 @@ ObjectFileMachO::ParseSymtab (bool minimize) } - if (process) + const bool have_strtab_data = strtab_data.GetByteSize() > 0; + if (!have_strtab_data) { - if (strtab_addr == LLDB_INVALID_ADDRESS) + if (process) + { + if (strtab_addr == LLDB_INVALID_ADDRESS) + { + if (log) + module_sp->LogMessage(log.get(), "failed to locate the strtab in memory"); + return 0; + } + } + else { if (log) - module_sp->LogMessage(log.get(), "failed to locate the strtab in memory"); + module_sp->LogMessage(log.get(), "failed to read strtab data"); return 0; } } - else if (strtab_data.GetByteSize() == 0) - { - if (log) - module_sp->LogMessage(log.get(), "failed to read strtab data"); - return 0; - } const ConstString &g_segment_name_TEXT = GetSegmentNameTEXT(); const ConstString &g_segment_name_DATA = GetSegmentNameDATA(); @@ -1449,14 +1453,7 @@ ObjectFileMachO::ParseSymtab (bool minimize) SymbolType type = eSymbolTypeInvalid; const char *symbol_name = NULL; - if (process) - { - const addr_t str_addr = strtab_addr + nlist.n_strx; - Error str_error; - if (process->ReadCStringFromMemory(str_addr, memory_symbol_name, str_error)) - symbol_name = memory_symbol_name.c_str(); - } - else + if (have_strtab_data) { symbol_name = strtab_data.PeekCStr(nlist.n_strx); @@ -1476,6 +1473,13 @@ ObjectFileMachO::ParseSymtab (bool minimize) if (symbol_name[0] == '\0') symbol_name = NULL; } + else + { + const addr_t str_addr = strtab_addr + nlist.n_strx; + Error str_error; + if (process->ReadCStringFromMemory(str_addr, memory_symbol_name, str_error)) + symbol_name = memory_symbol_name.c_str(); + } const char *symbol_name_non_abi_mangled = NULL; SectionSP symbol_section; -- 2.7.4