summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTodd Fiala <todd.fiala@gmail.com>2014-10-26 22:08:56 +0000
committerTodd Fiala <todd.fiala@gmail.com>2014-10-26 22:08:56 +0000
commit25a0ad9707861e4e3dd47cd8acdb3e2bc6686817 (patch)
treed42a7ba01fdfc1e19d1ef99eaeaa0a5476c5225a
parent6bac95a33babd09b5612381d26a40693d61c37cc (diff)
downloadbcm5719-llvm-25a0ad9707861e4e3dd47cd8acdb3e2bc6686817.tar.gz
bcm5719-llvm-25a0ad9707861e4e3dd47cd8acdb3e2bc6686817.zip
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. llvm-svn: 220654
-rw-r--r--lldb/test/functionalities/attach_resume/main.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/lldb/test/functionalities/attach_resume/main.cpp b/lldb/test/functionalities/attach_resume/main.cpp
index a93bc3c5081..f94f6747f6f 100644
--- a/lldb/test/functionalities/attach_resume/main.cpp
+++ b/lldb/test/functionalities/attach_resume/main.cpp
@@ -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;
OpenPOWER on IntegriCloud