From 30846cd9413a4edaddb013ab118e71dae21808e0 Mon Sep 17 00:00:00 2001 From: Todd Fiala Date: Mon, 20 Oct 2014 03:56:46 +0000 Subject: [PATCH] Fix 4 failing llgs-related tests on a stock Ubuntu 14.04 x86_64 system./ This fix addresses a requirement on some Linux kernels that limits a PTRACER to be an ancestor of the ptraced process. The fix in this case is to have the inferior test exe explicitly allow any ptracer to attach. This fixes several ptrace-related issues that I did not see on a modified kernel we used internally on my team. See http://reviews.llvm.org/D5846 for details. This fixes these previously failing tests on stock Ubuntu systems: FAIL: LLDB (suite) :: TestGdbRemoteProcessInfo.py (Linux vagrant 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64) FAIL: LLDB (suite) :: TestGdbRemoteAttach.py (Linux vagrant 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64) FAIL: LLDB (suite) :: TestLldbGdbServer.py (Linux vagrant 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64) FAIL: LLDB (suite) :: TestGdbRemoteKill.py (Linux vagrant 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64) llvm-svn: 220181 --- lldb/test/tools/lldb-gdbserver/main.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lldb/test/tools/lldb-gdbserver/main.cpp b/lldb/test/tools/lldb-gdbserver/main.cpp index 5436124..2c38f47 100644 --- a/lldb/test/tools/lldb-gdbserver/main.cpp +++ b/lldb/test/tools/lldb-gdbserver/main.cpp @@ -20,6 +20,10 @@ int pthread_threadid_np(pthread_t,__uint64_t*); #include #endif +#if defined(__linux__) +#include +#endif + static const char *const RETVAL_PREFIX = "retval:"; static const char *const SLEEP_PREFIX = "sleep:"; static const char *const STDERR_PREFIX = "stderr:"; @@ -206,6 +210,17 @@ thread_func (void *arg) int main (int argc, char **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 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) + const int prctl_result = prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0); + static_cast (prctl_result); +#endif +#endif + std::vector threads; std::unique_ptr heap_array_up; int return_value = 0; -- 2.7.4