Selaa lähdekoodia

LibCore: Add syscall wrapper for ptrace()

Andreas Kling 3 vuotta sitten
vanhempi
commit
2bd1a62ce1

+ 7 - 1
Userland/Libraries/LibCore/System.cpp

@@ -8,7 +8,6 @@
 #include <AK/String.h>
 #include <AK/String.h>
 #include <LibCore/System.h>
 #include <LibCore/System.h>
 #include <LibSystem/syscall.h>
 #include <LibSystem/syscall.h>
-#include <cstring>
 #include <fcntl.h>
 #include <fcntl.h>
 #include <stdarg.h>
 #include <stdarg.h>
 #include <sys/ioctl.h>
 #include <sys/ioctl.h>
@@ -107,6 +106,13 @@ ErrorOr<void> mount(int source_fd, StringView target, StringView fs_type, int fl
     HANDLE_SYSCALL_RETURN_VALUE("mount", rc, {});
     HANDLE_SYSCALL_RETURN_VALUE("mount", rc, {});
 }
 }
 
 
+ErrorOr<long> ptrace(int request, pid_t tid, void* address, void* data)
+{
+    auto rc = ::ptrace(request, tid, address, data);
+    if (rc < 0)
+        return Error::from_syscall("ptrace"sv, -errno);
+    return rc;
+}
 #endif
 #endif
 
 
 ErrorOr<void> sigaction(int signal, struct sigaction const* action, struct sigaction* old_action)
 ErrorOr<void> sigaction(int signal, struct sigaction const* action, struct sigaction* old_action)

+ 1 - 0
Userland/Libraries/LibCore/System.h

@@ -29,6 +29,7 @@ ErrorOr<int> recvfd(int sockfd, int options);
 ErrorOr<void> ptrace_peekbuf(pid_t tid, void const* tracee_addr, Bytes destination_buf);
 ErrorOr<void> ptrace_peekbuf(pid_t tid, void const* tracee_addr, Bytes destination_buf);
 ErrorOr<void> setgroups(Span<gid_t const>);
 ErrorOr<void> setgroups(Span<gid_t const>);
 ErrorOr<void> mount(int source_fd, StringView target, StringView fs_type, int flags);
 ErrorOr<void> mount(int source_fd, StringView target, StringView fs_type, int flags);
+ErrorOr<long> ptrace(int request, pid_t tid, void* address, void* data);
 #endif
 #endif
 
 
 ErrorOr<void> sigaction(int signal, struct sigaction const* action, struct sigaction* old_action);
 ErrorOr<void> sigaction(int signal, struct sigaction const* action, struct sigaction* old_action);