LLDB top of tree SVN fails to attach to a MacOSX native process by pid only (no execu...
authorGreg Clayton <gclayton@apple.com>
Tue, 29 Mar 2016 22:09:24 +0000 (22:09 +0000)
committerGreg Clayton <gclayton@apple.com>
Tue, 29 Mar 2016 22:09:24 +0000 (22:09 +0000)
The problem was that the static DynamicLoaderDarwinKernel::Initialize() was recently changed to come before DynamicLoaderMacOSXDYLD::Initialize() which caused the DynamicLoaderDarwinKernel::CreateInstance(...) to be called before DynamicLoaderMacOSXDYLD::CreateInstance(...) and DynamicLoaderDarwinKernel would claim it could be the dynamic loader for a user space MacOSX process. The fix is to make DynamicLoaderDarwinKernel::CreateInstance() a bit more thourough when vetting the process so that it doesn't claim MacOSX user space processes.

<rdar://problem/25425373>

llvm-svn: 264794

lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp

index 58cb6d5..1360edd 100644 (file)
@@ -181,8 +181,8 @@ DynamicLoaderDarwinKernel::CreateInstance (Process* process, bool force)
     // At this point if there is an ExecutableModule, it is a kernel and the Target is some variant of an Apple system.  
     // If the Process hasn't provided the kernel load address, we need to look around in memory to find it.
 
-    addr_t kernel_load_address = SearchForDarwinKernel (process);
-    if (kernel_load_address != LLDB_INVALID_ADDRESS)
+    const addr_t kernel_load_address = SearchForDarwinKernel (process);
+    if (CheckForKernelImageAtAddress (kernel_load_address, process).IsValid())
     {
         process->SetCanRunCode(false);
         return new DynamicLoaderDarwinKernel (process, kernel_load_address);