diff --git a/DevTools/UserspaceEmulator/Emulator.cpp b/DevTools/UserspaceEmulator/Emulator.cpp index 60264de7a6..7da61f0dce 100644 --- a/DevTools/UserspaceEmulator/Emulator.cpp +++ b/DevTools/UserspaceEmulator/Emulator.cpp @@ -226,6 +226,10 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3) dbgprintf("Syscall: %s (%x)\n", Syscall::to_string((Syscall::Function)function), function); #endif switch (function) { + case SC_ioctl: + return virt$ioctl(arg1, arg2, arg3); + case SC_get_dir_entries: + return virt$get_dir_entries(arg1, arg2, arg3); case SC_usleep: return virt$usleep(arg1); case SC_shbuf_create: @@ -779,4 +783,23 @@ ssize_t Emulator::virt$getrandom(FlatPtr buffer, size_t buffer_size, unsigned in return rc; } +int Emulator::virt$get_dir_entries(int fd, FlatPtr buffer, ssize_t size) +{ + auto host_buffer = ByteBuffer::create_uninitialized(size); + int rc = syscall(SC_get_dir_entries, fd, host_buffer.data(), host_buffer.size()); + if (rc < 0) + return rc; + mmu().copy_to_vm(buffer, host_buffer.data(), host_buffer.size()); + return rc; +} + +int Emulator::virt$ioctl(int fd, unsigned request, FlatPtr arg) +{ + (void)fd; + (void)arg; + dbg() << "Unsupported ioctl: " << request; + dump_backtrace(); + TODO(); +} + } diff --git a/DevTools/UserspaceEmulator/Emulator.h b/DevTools/UserspaceEmulator/Emulator.h index 4f94f85126..a52f9f7ced 100644 --- a/DevTools/UserspaceEmulator/Emulator.h +++ b/DevTools/UserspaceEmulator/Emulator.h @@ -68,6 +68,8 @@ private: void setup_stack(const Vector& arguments); + int virt$get_dir_entries(int fd, FlatPtr buffer, ssize_t); + int virt$ioctl(int fd, unsigned, FlatPtr); int virt$usleep(useconds_t); int virt$shbuf_create(int size, FlatPtr buffer); int virt$shbuf_allow_pid(int, pid_t peer_pid);