From: Vadim Zhukov <persg...@gmail.com> Co-authored-by: Koop Mast <k...@rainbow-runner.nl> Signed-off-by: Leonid Bobrov <mazoc...@disroot.org> --- configure.ac | 3 +++ tests/test-runner.c | 22 +++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac index c5ead62..a60a927 100644 --- a/configure.ac +++ b/configure.ac @@ -69,6 +69,9 @@ AC_CHECK_FUNCS([accept4 mkostemp posix_fallocate prctl]) AC_CHECK_FUNCS([mremap]) AC_CHECK_HEADERS([sys/mman.h]) +# Defines __FreeBSD__ if we're on FreeBSD, same for other *BSD +AC_CHECK_HEADERS([sys/param.h]) + # waitid() and signal.h are needed for the test suite. AC_CHECK_FUNCS([waitid]) AC_CHECK_HEADERS([signal.h]) diff --git a/tests/test-runner.c b/tests/test-runner.c index 7fa72eb..4791092 100644 --- a/tests/test-runner.c +++ b/tests/test-runner.c @@ -40,13 +40,26 @@ #include <errno.h> #include <limits.h> #include <sys/ptrace.h> +#ifdef HAVE_SYS_PRCTL_H #include <sys/prctl.h> +#endif +#ifdef HAVE_SYS_PARAM_H +#include <sys/param.h> +#endif #ifndef PR_SET_PTRACER # define PR_SET_PTRACER 0x59616d61 #endif #include "test-runner.h" +extern const struct test __start_test_section, __stop_test_section; + +#ifndef __linux__ +#define PTRACE_ATTACH PT_ATTACH +#define PTRACE_CONT PT_CONTINUE +#define PTRACE_DETACH PT_DETACH +#endif + /* when set to 1, check if tests are not leaking opened files. * It is turned on by default. It can be turned off by * WAYLAND_TEST_NO_LEAK_CHECK environment variable. */ @@ -232,6 +245,10 @@ stderr_reset_color(void) static int is_debugger_attached(void) { +#ifdef __OpenBSD__ + /* OpenBSD doesn't allow to trace parent process */ + return 0; +#else int status; int rc; pid_t pid; @@ -262,13 +279,14 @@ is_debugger_attached(void) _exit(1); if (!waitpid(-1, NULL, 0)) _exit(1); - ptrace(PTRACE_CONT, NULL, NULL); + ptrace(PTRACE_CONT, ppid, NULL, NULL); ptrace(PTRACE_DETACH, ppid, NULL, NULL); _exit(0); } else { close(pipefd[0]); /* Enable child to ptrace the parent process */ +#ifdef HAVE_SYS_PRCTL_H rc = prctl(PR_SET_PTRACER, pid); if (rc != 0 && errno != EINVAL) { /* An error prevents us from telling if a debugger is attached. @@ -282,6 +300,7 @@ is_debugger_attached(void) /* Signal to client that parent is ready by passing '+' */ write(pipefd[1], "+", 1); } +#endif close(pipefd[1]); waitpid(pid, &status, 0); @@ -289,6 +308,7 @@ is_debugger_attached(void) } return rc; +#endif } int main(int argc, char *argv[]) -- 2.20.1 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel