diff options
author | Jason Molenda <jmolenda@apple.com> | 2015-07-29 01:42:16 +0000 |
---|---|---|
committer | Jason Molenda <jmolenda@apple.com> | 2015-07-29 01:42:16 +0000 |
commit | 752e1e833b6c09cc18f81e0af3aebf04f6650345 (patch) | |
tree | 5a80efff3645368996484dd3a9089451c3215e92 /lldb/source/Plugins/Process/gdb-remote | |
parent | 6a40cd71f69c0456e1004e3e057d663b0f1e69c3 (diff) | |
download | bcm5719-llvm-752e1e833b6c09cc18f81e0af3aebf04f6650345.tar.gz bcm5719-llvm-752e1e833b6c09cc18f81e0af3aebf04f6650345.zip |
When debugserver fails to attach to a process on a Darwin
system, make a couple of additional checks to see if the
attach was denied via the System Integrity Protection that
is new in Mac OS X 10.11. If so, return a special E87
error code to indicate this to lldb.
Up in lldb, if we receive the E87 error code, be specific
about why the attach failed.
Also detect the more common case of general attach failure
and print a better error message than "lost connection".
I believe this code will all build on Mac OS X 10.10 systems.
It may not compile or run on earlier versions of the OS.
None of this should build on other non-darwin systems.
llvm-svn: 243511
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote')
-rw-r--r-- | lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index a2e903f47c4..092d5a0884e 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -3804,8 +3804,28 @@ ProcessGDBRemote::AsyncThread (void *arg) break; } case eStateInvalid: - process->SetExitStatus(-1, "lost connection"); - break; + { + // Check to see if we were trying to attach and if we got back + // the "E87" error code from debugserver -- this indicates that + // the process is not debuggable. Return a slightly more helpful + // error message about why the attach failed. + if (::strstr (continue_cstr, "vAttach") != NULL + && response.GetError() == 0x87) + { + process->SetExitStatus(-1, "cannot attach to process due to System Integrity Protection"); + } + // E01 code from vAttach means that the attach failed + if (::strstr (continue_cstr, "vAttach") != NULL + && response.GetError() == 0x1) + { + process->SetExitStatus(-1, "unable to attach"); + } + else + { + process->SetExitStatus(-1, "lost connection"); + } + break; + } default: process->SetPrivateState (stop_state); |