]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
tools/nolibc: add ptrace support
authorBenjamin Berg <benjamin.berg@intel.com>
Wed, 24 Sep 2025 14:20:58 +0000 (16:20 +0200)
committerThomas Weißschuh <linux@weissschuh.net>
Sun, 4 Jan 2026 09:28:44 +0000 (10:28 +0100)
Add ptrace support, as it will be useful in UML.

Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
[Thomas: drop va_args usage and linux/uio.h inclusion]
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
tools/include/nolibc/Makefile
tools/include/nolibc/nolibc.h
tools/include/nolibc/sys/ptrace.h [new file with mode: 0644]
tools/testing/selftests/nolibc/nolibc-test.c

index 8118e22844f199891b007eeb6e8f159c240156a8..8b883a6fe580bd74ee2940835601dd0688fffebc 100644 (file)
@@ -54,6 +54,7 @@ all_files := \
                sys/mman.h \
                sys/mount.h \
                sys/prctl.h \
+               sys/ptrace.h \
                sys/random.h \
                sys/reboot.h \
                sys/resource.h \
index 272dfc9611580a999cae40906c883298eca761b8..9c7f43b9218b3c0bd357795e702f2af2e4d36211 100644 (file)
 #include "sys/mman.h"
 #include "sys/mount.h"
 #include "sys/prctl.h"
+#include "sys/ptrace.h"
 #include "sys/random.h"
 #include "sys/reboot.h"
 #include "sys/resource.h"
diff --git a/tools/include/nolibc/sys/ptrace.h b/tools/include/nolibc/sys/ptrace.h
new file mode 100644 (file)
index 0000000..72ca285
--- /dev/null
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: LGPL-2.1 OR MIT */
+/*
+ * ptrace for NOLIBC
+ * Copyright (C) 2017-2021 Willy Tarreau <w@1wt.eu>
+ * Copyright (C) 2025 Intel Corporation
+ */
+
+/* make sure to include all global symbols */
+#include "../nolibc.h"
+
+#ifndef _NOLIBC_SYS_PTRACE_H
+#define _NOLIBC_SYS_PTRACE_H
+
+#include "../sys.h"
+
+#include <linux/ptrace.h>
+
+/*
+ * long ptrace(int op, pid_t pid, void *addr, void *data);
+ */
+static __attribute__((unused))
+long sys_ptrace(int op, pid_t pid, void *addr, void *data)
+{
+       return my_syscall4(__NR_ptrace, op, pid, addr, data);
+}
+
+static __attribute__((unused))
+ssize_t ptrace(int op, pid_t pid, void *addr, void *data)
+{
+       return __sysret(sys_ptrace(op, pid, addr, data));
+}
+
+#endif /* _NOLIBC_SYS_PTRACE_H */
index 3c5a226dad3a25ca7fb411c25ee73b1496168c81..6888b20af25944fd14fc877c5546fc1e772fd193 100644 (file)
@@ -17,6 +17,7 @@
 #include <sys/mman.h>
 #include <sys/mount.h>
 #include <sys/prctl.h>
+#include <sys/ptrace.h>
 #include <sys/random.h>
 #include <sys/reboot.h>
 #include <sys/resource.h>
@@ -1406,6 +1407,7 @@ int run_syscall(int min, int max)
                CASE_TEST(readv_zero);        EXPECT_SYSZR(1, readv(1, NULL, 0)); break;
                CASE_TEST(writev_badf);       EXPECT_SYSER(1, writev(-1, &iov_one, 1), -1, EBADF); break;
                CASE_TEST(writev_zero);       EXPECT_SYSZR(1, writev(1, NULL, 0)); break;
+               CASE_TEST(ptrace);            EXPECT_SYSER(1, ptrace(PTRACE_CONT, getpid(), NULL, NULL), -1, ESRCH); break;
                CASE_TEST(syscall_noargs);    EXPECT_SYSEQ(1, syscall(__NR_getpid), getpid()); break;
                CASE_TEST(syscall_args);      EXPECT_SYSER(1, syscall(__NR_statx, 0, NULL, 0, 0, NULL), -1, EFAULT); break;
                CASE_TEST(namespace);         EXPECT_SYSZR(euid0 && proc, test_namespace()); break;