diff options
| author | Greg Clayton <gclayton@apple.com> | 2010-10-12 17:33:06 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2010-10-12 17:33:06 +0000 |
| commit | 897f96a5d3c68ef299dbf016c159554b5d1f1f34 (patch) | |
| tree | 164330084688e025635ad2ae4677fd19e6b9d7b1 /lldb/source/Plugins/Process | |
| parent | aec745326ac56048cd3cc7bf5f5704dace4d1a5e (diff) | |
| download | bcm5719-llvm-897f96a5d3c68ef299dbf016c159554b5d1f1f34.tar.gz bcm5719-llvm-897f96a5d3c68ef299dbf016c159554b5d1f1f34.zip | |
Fixed the dispatch queue name retrieval for threads by looking in an extra
shlib.
llvm-svn: 116315
Diffstat (limited to 'lldb/source/Plugins/Process')
| -rw-r--r-- | lldb/source/Plugins/Process/MacOSX-User/source/ThreadMacOSX.cpp | 17 | ||||
| -rw-r--r-- | lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp | 15 |
2 files changed, 23 insertions, 9 deletions
diff --git a/lldb/source/Plugins/Process/MacOSX-User/source/ThreadMacOSX.cpp b/lldb/source/Plugins/Process/MacOSX-User/source/ThreadMacOSX.cpp index 1ffe45b07b9..aae460e5ff1 100644 --- a/lldb/source/Plugins/Process/MacOSX-User/source/ThreadMacOSX.cpp +++ b/lldb/source/Plugins/Process/MacOSX-User/source/ThreadMacOSX.cpp @@ -107,13 +107,20 @@ ThreadMacOSX::GetDispatchQueueName() 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()); diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index c3b0c9d1c66..c9b5955ee09 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -2243,11 +2243,18 @@ ProcessGDBRemote::GetDispatchQueueNameForThread // 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); |

