[Lldb-commits] [lldb] r188317 - <rdar://problem/14717184>

Greg Clayton gclayton at apple.com
Tue Aug 13 14:32:35 PDT 2013


Author: gclayton
Date: Tue Aug 13 16:32:34 2013
New Revision: 188317

URL: http://llvm.org/viewvc/llvm-project?rev=188317&view=rev
Log:
<rdar://problem/14717184>

Improve the documentation for the new target.memory-module-load-level setting, and also return an error when there is no nlist data when appropriate.


Modified:
    lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
    lldb/trunk/source/Target/Target.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=188317&r1=188316&r2=188317&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (original)
+++ lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp Tue Aug 13 16:32:34 2013
@@ -1555,11 +1555,13 @@ ObjectFileMachO::ParseSymtab ()
         ProcessSP process_sp (m_process_wp.lock());
         Process *process = process_sp.get();
         
+        uint32_t memory_module_load_level = eMemoryModuleLoadLevelComplete;
+
         if (process)
         {
             Target &target = process->GetTarget();
             
-            const uint32_t memory_module_load_level = target.GetMemoryModuleLoadLevel();
+            memory_module_load_level = target.GetMemoryModuleLoadLevel();
 
             SectionSP linkedit_section_sp(section_list->FindSectionByName(GetSegmentNameLINKEDIT()));
             // Reading mach file from memory in a process or core file...
@@ -1674,6 +1676,14 @@ ObjectFileMachO::ParseSymtab ()
             }
         }
 
+        if (nlist_data.GetByteSize() == 0 && memory_module_load_level == eMemoryModuleLoadLevelComplete)
+        {
+            if (log)
+                module_sp->LogMessage(log, "failed to read nlist data");
+            return 0;
+        }
+
+
         const bool have_strtab_data = strtab_data.GetByteSize() > 0;
         if (!have_strtab_data)
         {

Modified: lldb/trunk/source/Target/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=188317&r1=188316&r2=188317&view=diff
==============================================================================
--- lldb/trunk/source/Target/Target.cpp (original)
+++ lldb/trunk/source/Target/Target.cpp Tue Aug 13 16:32:34 2013
@@ -2317,7 +2317,7 @@ g_load_script_from_sym_file_values[] =
 static OptionEnumValueElement
 g_memory_module_load_level_values[] =
 {
-    { eMemoryModuleLoadLevelMinimal,  "minimal" , "Load minimal information when loading modules from memory which currently loads sections only, no symbols."},
+    { eMemoryModuleLoadLevelMinimal,  "minimal" , "Load minimal information when loading modules from memory. Currently this setting loads sections only."},
     { eMemoryModuleLoadLevelPartial,  "partial" , "Load partial information when loading modules from memory. Currently this setting loads sections and function bounds."},
     { eMemoryModuleLoadLevelComplete, "complete", "Load complete information when loading modules from memory. Currently this setting loads sections and all symbols."},
     { 0, NULL, NULL }
@@ -2364,7 +2364,12 @@ g_properties[] =
     { "hex-immediate-style"                , OptionValue::eTypeEnum   ,    false, Disassembler::eHexStyleC,   NULL, g_hex_immediate_style_values, "Which style to use for printing hexadecimal disassembly values." },
     { "use-fast-stepping"                  , OptionValue::eTypeBoolean   , false, true,                       NULL, NULL, "Use a fast stepping algorithm based on running from branch to branch rather than instruction single-stepping." },
     { "load-script-from-symbol-file"       , OptionValue::eTypeEnum   ,    false, eLoadScriptFromSymFileWarn, NULL, g_load_script_from_sym_file_values, "Allow LLDB to load scripting resources embedded in symbol files when available." },
-    { "memory-module-load-level"           , OptionValue::eTypeEnum   ,    false, eMemoryModuleLoadLevelComplete, NULL, g_memory_module_load_level_values, "Control how much information gets loaded when loading modules from memory. The less information that is gathered, the faster memory modules will be loaded." },
+    { "memory-module-load-level"           , OptionValue::eTypeEnum   ,    false, eMemoryModuleLoadLevelComplete, NULL, g_memory_module_load_level_values,
+        "Loading modules from memory can be slow as reading the symbol tables and other data can take a long time depending on your connection to the debug target. "
+        "This setting helps users control how much information gets loaded when loading modules from memory."
+        "'complete' is the default value for this setting which will load all sections and symbols by reading them from memory (slowest, most accurate). "
+        "'partial' will load sections and attempt to find function bounds without downloading the symbol table (faster, still accurate, missing symbol names). "
+        "'minimal' is the fastest setting and will load section data with no symbols, but should rarely be used as stack frames in these memory regions will be inaccurate and not provide any context (fastest). " },
     { NULL                                 , OptionValue::eTypeInvalid   , false, 0                         , NULL, NULL, NULL }
 };
 enum





More information about the lldb-commits mailing list