[Lldb-commits] [lldb] r157482 - /lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Greg Clayton gclayton at apple.com
Fri May 25 10:04:00 PDT 2012


Author: gclayton
Date: Fri May 25 12:04:00 2012
New Revision: 157482

URL: http://llvm.org/viewvc/llvm-project?rev=157482&view=rev
Log:
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.


Modified:
    lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Modified: lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp?rev=157482&r1=157481&r2=157482&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (original)
+++ lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp Fri May 25 12:04:00 2012
@@ -1359,21 +1359,25 @@
         }
 
 
-        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 @@
             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 @@
                 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;





More information about the lldb-commits mailing list