From 12879184ce960effff8e5c062e28abfec3b27390 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 15 Jan 2021 14:17:19 +0100 Subject: [PATCH] UserspaceEmulator: Support the anon_create, sendfd and recvfd syscalls --- .../DevTools/UserspaceEmulator/Emulator.cpp | 21 +++++++++++++++++++ .../DevTools/UserspaceEmulator/Emulator.h | 3 +++ 2 files changed, 24 insertions(+) diff --git a/Userland/DevTools/UserspaceEmulator/Emulator.cpp b/Userland/DevTools/UserspaceEmulator/Emulator.cpp index 107dbf5cbb..8248aedf53 100644 --- a/Userland/DevTools/UserspaceEmulator/Emulator.cpp +++ b/Userland/DevTools/UserspaceEmulator/Emulator.cpp @@ -453,6 +453,12 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3) return virt$mprotect(arg1, arg2, arg3); case SC_madvise: return virt$madvise(arg1, arg2, arg3); + case SC_anon_create: + return virt$anon_create(arg1, arg2); + case SC_sendfd: + return virt$sendfd(arg1, arg2); + case SC_recvfd: + return virt$recvfd(arg1); case SC_open: return virt$open(arg1); case SC_pipe: @@ -545,6 +551,21 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3) } } +int Emulator::virt$anon_create(size_t size, int options) +{ + return syscall(SC_anon_create, size, options); +} + +int Emulator::virt$sendfd(int socket, int fd) +{ + return syscall(SC_sendfd, socket, fd); +} + +int Emulator::virt$recvfd(int socket) +{ + return syscall(SC_recvfd, socket); +} + int Emulator::virt$shbuf_create(int size, FlatPtr buffer) { u8* host_data = nullptr; diff --git a/Userland/DevTools/UserspaceEmulator/Emulator.h b/Userland/DevTools/UserspaceEmulator/Emulator.h index ff8fad1235..d842de77a3 100644 --- a/Userland/DevTools/UserspaceEmulator/Emulator.h +++ b/Userland/DevTools/UserspaceEmulator/Emulator.h @@ -175,6 +175,9 @@ private: int virt$beep(); int virt$ftruncate(int fd, off_t); mode_t virt$umask(mode_t); + int virt$anon_create(size_t, int); + int virt$recvfd(int); + int virt$sendfd(int, int); FlatPtr allocate_vm(size_t size, size_t alignment); bool find_malloc_symbols(const MmapRegion& libc_text);