Index: packages/Python/lldbsuite/test/driver/batch_mode/main.c =================================================================== --- packages/Python/lldbsuite/test/driver/batch_mode/main.c +++ packages/Python/lldbsuite/test/driver/batch_mode/main.c @@ -2,25 +2,10 @@ #include #include -#if defined(__linux__) -#include -#endif - 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 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); - (void) prctl_result; -#endif -#endif + lldb_enable_attach(); int do_crash = 0; int do_wait = 0; Index: packages/Python/lldbsuite/test/functionalities/attach_resume/main.cpp =================================================================== --- packages/Python/lldbsuite/test/functionalities/attach_resume/main.cpp +++ packages/Python/lldbsuite/test/functionalities/attach_resume/main.cpp @@ -4,10 +4,6 @@ #include #include -#if defined(__linux__) -#include -#endif - volatile bool debugger_flag = true; // The debugger will flip this to false void *start(void *data) @@ -25,18 +21,7 @@ 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 (prctl_result); -#endif -#endif + lldb_enable_attach(); static const size_t nthreads = 16; std::thread threads[nthreads]; Index: packages/Python/lldbsuite/test/functionalities/process_attach/main.cpp =================================================================== --- packages/Python/lldbsuite/test/functionalities/process_attach/main.cpp +++ packages/Python/lldbsuite/test/functionalities/process_attach/main.cpp @@ -1,28 +1,11 @@ #include -#if defined(__linux__) -#include -#endif - #include #include int main(int argc, char const *argv[]) { int temp; -#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) - int prctl_result; - - // For now we execute on best effort basis. If this fails for - // some reason, so be it. - prctl_result = prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0); - (void) prctl_result; -#endif -#endif + lldb_enable_attach(); // Waiting to be attached by the debugger. temp = 0; Index: packages/Python/lldbsuite/test/functionalities/process_group/main.c =================================================================== --- packages/Python/lldbsuite/test/functionalities/process_group/main.c +++ packages/Python/lldbsuite/test/functionalities/process_group/main.c @@ -2,10 +2,6 @@ #include #include -#if defined(__linux__) -#include -#endif - volatile int release_child_flag = 0; int main(int argc, char const *argv[]) @@ -61,18 +57,7 @@ } else { // child -#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); - (void) prctl_result; -#endif -#endif + lldb_enable_attach(); while (! release_child_flag) // Wait for debugger to attach sleep(1); Index: packages/Python/lldbsuite/test/functionalities/register/main.cpp =================================================================== --- packages/Python/lldbsuite/test/functionalities/register/main.cpp +++ packages/Python/lldbsuite/test/functionalities/register/main.cpp @@ -8,10 +8,6 @@ //===----------------------------------------------------------------------===// #include -#if defined(__linux__) -#include -#endif - #include #include @@ -19,18 +15,7 @@ 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 (prctl_result); -#endif -#endif + lldb_enable_attach(); char my_string[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 0}; double my_double = 1234.5678; Index: packages/Python/lldbsuite/test/functionalities/thread/create_after_attach/main.cpp =================================================================== --- packages/Python/lldbsuite/test/functionalities/thread/create_after_attach/main.cpp +++ packages/Python/lldbsuite/test/functionalities/thread/create_after_attach/main.cpp @@ -4,10 +4,6 @@ using std::chrono::microseconds; -#if defined(__linux__) -#include -#endif - volatile int g_thread_2_continuing = 0; void * @@ -42,20 +38,7 @@ 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) - int prctl_result; - - // For now we execute on best effort basis. If this fails for - // some reason, so be it. - prctl_result = prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0); - (void) prctl_result; -#endif -#endif + lldb_enable_attach(); // Create a new thread std::thread thread_1(thread_1_func, nullptr); Index: packages/Python/lldbsuite/test/make/test_common.h =================================================================== --- packages/Python/lldbsuite/test/make/test_common.h +++ packages/Python/lldbsuite/test/make/test_common.h @@ -17,3 +17,28 @@ // declared. This may not be necessary after MSVC 12. #include #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 + +#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 Index: packages/Python/lldbsuite/test/python_api/hello_world/main.c =================================================================== --- packages/Python/lldbsuite/test/python_api/hello_world/main.c +++ packages/Python/lldbsuite/test/python_api/hello_world/main.c @@ -1,25 +1,8 @@ #include -#if defined(__linux__) -#include -#endif - -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) - int prctl_result; - - // For now we execute on best effort basis. If this fails for - // some reason, so be it. - prctl_result = prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0); - (void) prctl_result; -#endif -#endif +int main(int argc, char const *argv[]) +{ + lldb_enable_attach(); printf("Hello world.\n"); // Set break point at this line. if (argc == 1) Index: packages/Python/lldbsuite/test/tools/lldb-server/main.cpp =================================================================== --- packages/Python/lldbsuite/test/tools/lldb-server/main.cpp +++ packages/Python/lldbsuite/test/tools/lldb-server/main.cpp @@ -20,10 +20,6 @@ #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:"; @@ -210,16 +206,7 @@ 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 + lldb_enable_attach(); std::vector threads; std::unique_ptr heap_array_up;