summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/make/test_common.h
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2016-01-11 10:24:50 +0000
committerPavel Labath <labath@google.com>2016-01-11 10:24:50 +0000
commitd0f89cd721df6943e36e4bbd9715317b08b7f578 (patch)
tree2b05bfc3d26498b91b8e9c4af27612bab35cd1e8 /lldb/packages/Python/lldbsuite/test/make/test_common.h
parent054873b0be85583b0499d12fad58566ae5398e4e (diff)
downloadbcm5719-llvm-d0f89cd721df6943e36e4bbd9715317b08b7f578.tar.gz
bcm5719-llvm-d0f89cd721df6943e36e4bbd9715317b08b7f578.zip
Centralize the handling of attach permissions on linux in tests
Summary: On linux we need the process to give us special permissions before we can attach to it. Previously, the code for this was copied into every file that needed it. This moves the code to a central place to reduce code duplication. Reviewers: clayborg Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D15992 llvm-svn: 257319
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/make/test_common.h')
-rw-r--r--lldb/packages/Python/lldbsuite/test/make/test_common.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/make/test_common.h b/lldb/packages/Python/lldbsuite/test/make/test_common.h
index 6f819706366..39b85322bf0 100644
--- a/lldb/packages/Python/lldbsuite/test/make/test_common.h
+++ b/lldb/packages/Python/lldbsuite/test/make/test_common.h
@@ -17,3 +17,28 @@
// declared. This may not be necessary after MSVC 12.
#include <eh.h>
#endif
+
+
+// On some systems (e.g., some versions of linux) it is not possible to attach to a process
+// without it giving us special permissions. This defines the lldb_enable_attach macro, which
+// should perform any such actions, if needed by the platform. This is a macro instead of a
+// function to avoid the need for complex linking of the test programs.
+#if defined(__linux__)
+#include <sys/prctl.h>
+
+#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.
+#define lldb_enable_attach() \
+ do \
+ { \
+ const int prctl_result = prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0); \
+ (void)prctl_result; \
+ } while (0)
+
+#endif
+
+#else // not linux
+
+#define lldb_enable_attach()
+
+#endif
OpenPOWER on IntegriCloud