[Lldb-commits] [lldb] r220654 - Fix TestAttachResume test so it doesn't hang on Linux with ptrace lockdown.

Todd Fiala todd.fiala at gmail.com
Sun Oct 26 15:08:56 PDT 2014


Author: tfiala
Date: Sun Oct 26 17:08:56 2014
New Revision: 220654

URL: http://llvm.org/viewvc/llvm-project?rev=220654&view=rev
Log:
Fix TestAttachResume test so it doesn't hang on Linux with ptrace lockdown.

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.

Modified:
    lldb/trunk/test/functionalities/attach_resume/main.cpp

Modified: lldb/trunk/test/functionalities/attach_resume/main.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/attach_resume/main.cpp?rev=220654&r1=220653&r2=220654&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/attach_resume/main.cpp (original)
+++ lldb/trunk/test/functionalities/attach_resume/main.cpp Sun Oct 26 17:08:56 2014
@@ -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;





More information about the lldb-commits mailing list