[Lldb-commits] [lldb] r116315 - in /lldb/trunk/source/Plugins/Process: MacOSX-User/source/ThreadMacOSX.cpp gdb-remote/ProcessGDBRemote.cpp

Greg Clayton gclayton at apple.com
Tue Oct 12 10:33:06 PDT 2010


Author: gclayton
Date: Tue Oct 12 12:33:06 2010
New Revision: 116315

URL: http://llvm.org/viewvc/llvm-project?rev=116315&view=rev
Log:
Fixed the dispatch queue name retrieval for threads by looking in an extra
shlib.


Modified:
    lldb/trunk/source/Plugins/Process/MacOSX-User/source/ThreadMacOSX.cpp
    lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp

Modified: lldb/trunk/source/Plugins/Process/MacOSX-User/source/ThreadMacOSX.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/MacOSX-User/source/ThreadMacOSX.cpp?rev=116315&r1=116314&r2=116315&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/MacOSX-User/source/ThreadMacOSX.cpp (original)
+++ lldb/trunk/source/Plugins/Process/MacOSX-User/source/ThreadMacOSX.cpp Tue Oct 12 12:33:06 2010
@@ -107,13 +107,20 @@
             return NULL;
 
         uint8_t memory_buffer[8];
+        addr_t dispatch_queue_offsets_addr = LLDB_INVALID_ADDRESS;
         DataExtractor data(memory_buffer, sizeof(memory_buffer), m_process.GetByteOrder(), m_process.GetAddressByteSize());
+        static ConstString g_dispatch_queue_offsets_symbol_name ("dispatch_queue_offsets");
+        const Symbol *dispatch_queue_offsets_symbol = NULL;
         ModuleSP module_sp(m_process.GetTarget().GetImages().FindFirstModuleForFileSpec (FileSpec("libSystem.B.dylib")));
-        if (module_sp.get() == NULL)
-            return NULL;
-
-        lldb::addr_t dispatch_queue_offsets_addr = LLDB_INVALID_ADDRESS;
-        const Symbol *dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (ConstString("dispatch_queue_offsets"), eSymbolTypeData);
+        if (module_sp)
+            dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (g_dispatch_queue_offsets_symbol_name, eSymbolTypeData);
+        
+        if (dispatch_queue_offsets_symbol == NULL)
+        {
+            module_sp = m_process.GetTarget().GetImages().FindFirstModuleForFileSpec (FileSpec("libdispatch.dylib"));
+            if (module_sp)
+                dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (g_dispatch_queue_offsets_symbol_name, eSymbolTypeData);
+        }
         if (dispatch_queue_offsets_symbol)
             dispatch_queue_offsets_addr = dispatch_queue_offsets_symbol->GetValue().GetLoadAddress(&m_process.GetTarget());
 

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp?rev=116315&r1=116314&r2=116315&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp Tue Oct 12 12:33:06 2010
@@ -2243,11 +2243,18 @@
         // to look it up
         if (m_dispatch_queue_offsets_addr == LLDB_INVALID_ADDRESS)
         {
+            static ConstString g_dispatch_queue_offsets_symbol_name ("dispatch_queue_offsets");
+            const Symbol *dispatch_queue_offsets_symbol = NULL;
             ModuleSP module_sp(GetTarget().GetImages().FindFirstModuleForFileSpec (FileSpec("libSystem.B.dylib")));
-            if (module_sp.get() == NULL)
-                return NULL;
-
-            const Symbol *dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (ConstString("dispatch_queue_offsets"), eSymbolTypeData);
+            if (module_sp)
+                dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (g_dispatch_queue_offsets_symbol_name, eSymbolTypeData);
+            
+            if (dispatch_queue_offsets_symbol == NULL)
+            {
+                module_sp = GetTarget().GetImages().FindFirstModuleForFileSpec (FileSpec("libdispatch.dylib"));
+                if (module_sp)
+                    dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (g_dispatch_queue_offsets_symbol_name, eSymbolTypeData);
+            }
             if (dispatch_queue_offsets_symbol)
                 m_dispatch_queue_offsets_addr = dispatch_queue_offsets_symbol->GetValue().GetLoadAddress(&m_target);
 





More information about the lldb-commits mailing list