summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/gdb-remote
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2015-07-29 01:42:16 +0000
committerJason Molenda <jmolenda@apple.com>2015-07-29 01:42:16 +0000
commit752e1e833b6c09cc18f81e0af3aebf04f6650345 (patch)
tree5a80efff3645368996484dd3a9089451c3215e92 /lldb/source/Plugins/Process/gdb-remote
parent6a40cd71f69c0456e1004e3e057d663b0f1e69c3 (diff)
downloadbcm5719-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.cpp24
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);
OpenPOWER on IntegriCloud