Fix TestAttachResume test so it doesn't hang on Linux with ptrace lockdown.
authorTodd Fiala <todd.fiala@gmail.com>
Sun, 26 Oct 2014 22:08:56 +0000 (22:08 +0000)
committerTodd Fiala <todd.fiala@gmail.com>
Sun, 26 Oct 2014 22:08:56 +0000 (22:08 +0000)
Similar to previous fix, this augments the test inferior to
immediately indicate it may be ptraced by any Linux process
when the appropriate symbols are defined.

This seems to indicate we need to fix our lldb attach logic to
catch when an attach fails, and trigger an appropriate error
instead of the current behavior of hanging indefinitely.

llvm-svn: 220654

lldb/test/functionalities/attach_resume/main.cpp

index a93bc3c..f94f674 100644 (file)
@@ -4,6 +4,10 @@
 #include <chrono>
 #include <thread>
 
+#if defined(__linux__)
+#include <sys/prctl.h>
+#endif
+
 void *start(void *data)
 {
     int i;
@@ -19,6 +23,19 @@ void *start(void *data)
 
 int main(int argc, char const *argv[])
 {
+#if defined(__linux__)
+    // Immediately enable any ptracer so that we can allow the stub attach
+    // operation to succeed.  Some Linux kernels are locked down so that
+    // only an ancestor process can be a ptracer of a process.  This disables that
+    // restriction.  Without it, attach-related stub tests will fail.
+#if defined(PR_SET_PTRACER) && defined(PR_SET_PTRACER_ANY)
+    // For now we execute on best effort basis.  If this fails for
+    // some reason, so be it.
+    const int prctl_result = prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0);
+    static_cast<void> (prctl_result);
+#endif
+#endif
+
     static const size_t nthreads = 16;
     std::thread threads[nthreads];
     size_t i;