From 5dce5fa7c28f8270eda08646f6f1a53d4f095c7b Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 7 Aug 2020 18:44:51 +0200 Subject: [PATCH] UserspaceEmulator: Add the chdir 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 91e2c1420a..c7a6caa156 100644 --- a/DevTools/UserspaceEmulator/Emulator.cpp +++ b/DevTools/UserspaceEmulator/Emulator.cpp @@ -251,6 +251,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_chdir: + return virt$chdir(arg1, arg2); case SC_access: return virt$access(arg1, arg2, arg3); case SC_waitid: @@ -1338,4 +1340,10 @@ int Emulator::virt$waitid(FlatPtr params_addr) return rc; } +int Emulator::virt$chdir(FlatPtr path, size_t path_length) +{ + auto host_path = mmu().copy_buffer_from_vm(path, path_length); + return syscall(SC_chdir, host_path.data(), host_path.size()); +} + } diff --git a/DevTools/UserspaceEmulator/Emulator.h b/DevTools/UserspaceEmulator/Emulator.h index c4ec7b82cf..34956d3a50 100644 --- a/DevTools/UserspaceEmulator/Emulator.h +++ b/DevTools/UserspaceEmulator/Emulator.h @@ -137,6 +137,7 @@ private: void virt$exit(int); ssize_t virt$getrandom(FlatPtr buffer, size_t buffer_size, unsigned int flags); int virt$sleep(unsigned); + int virt$chdir(FlatPtr, size_t); int virt$getpgrp(); int virt$getpgid(pid_t); int virt$setpgid(pid_t pid, pid_t pgid);