From e0e3e5b9b10dc3cdea6d7b252a88992f024a57ce Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 5 Aug 2020 19:48:44 +0200 Subject: [PATCH] UserspaceEmulator: Add the access syscall --- DevTools/UserspaceEmulator/Emulator.cpp | 8 ++++++++ DevTools/UserspaceEmulator/Emulator.h | 1 + 2 files changed, 9 insertions(+) diff --git a/DevTools/UserspaceEmulator/Emulator.cpp b/DevTools/UserspaceEmulator/Emulator.cpp index 0a55d3934c..0727bf69d3 100644 --- a/DevTools/UserspaceEmulator/Emulator.cpp +++ b/DevTools/UserspaceEmulator/Emulator.cpp @@ -250,6 +250,8 @@ 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_access: + return virt$access(arg1, arg2, arg3); case SC_getcwd: return virt$getcwd(arg1, arg2); case SC_ttyname: @@ -1268,4 +1270,10 @@ int Emulator::virt$getcwd(FlatPtr buffer, size_t buffer_size) return rc; } +int Emulator::virt$access(FlatPtr path, size_t path_length, int type) +{ + auto host_path = mmu().copy_buffer_from_vm(path, path_length); + return syscall(SC_access, host_path.data(), host_path.size(), type); +} + } diff --git a/DevTools/UserspaceEmulator/Emulator.h b/DevTools/UserspaceEmulator/Emulator.h index b6c6d7a108..d83e5270b2 100644 --- a/DevTools/UserspaceEmulator/Emulator.h +++ b/DevTools/UserspaceEmulator/Emulator.h @@ -77,6 +77,7 @@ private: int virt$fork(); int virt$execve(FlatPtr); + int virt$access(FlatPtr, size_t, int); int virt$sigaction(int, FlatPtr, FlatPtr); int virt$sigreturn(); int virt$get_dir_entries(int fd, FlatPtr buffer, ssize_t);