diff --git a/Userland/DevTools/UserspaceEmulator/Emulator.h b/Userland/DevTools/UserspaceEmulator/Emulator.h index e4bd616d84..b63ec6919d 100644 --- a/Userland/DevTools/UserspaceEmulator/Emulator.h +++ b/Userland/DevTools/UserspaceEmulator/Emulator.h @@ -129,114 +129,114 @@ private: void emit_profile_sample(AK::OutputStream&); void emit_profile_event(AK::OutputStream&, StringView event_name, String contents); - int virt$emuctl(FlatPtr, FlatPtr, FlatPtr); - int virt$fork(); - int virt$execve(FlatPtr); + int virt$accept4(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); - int virt$ioctl(int fd, unsigned, FlatPtr); - int virt$stat(FlatPtr); - int virt$realpath(FlatPtr); - int virt$gethostname(FlatPtr, ssize_t); - int virt$profiling_enable(pid_t); - int virt$profiling_disable(pid_t); - FlatPtr virt$perf_event(int type, FlatPtr arg1, FlatPtr arg2); - FlatPtr virt$perf_register_string(FlatPtr, size_t); - int virt$disown(pid_t); - int virt$purge(int mode); - u32 virt$mmap(u32); - FlatPtr virt$mremap(FlatPtr); - u32 virt$sysconf(u32 name); - u32 virt$mount(u32); - u32 virt$munmap(FlatPtr address, size_t size); - u32 virt$gettid(); - u32 virt$getpid(); - u32 virt$unveil(u32); - u32 virt$pledge(u32); - uid_t virt$getuid(); - uid_t virt$geteuid(); - gid_t virt$getgid(); - gid_t virt$getegid(); - int virt$setuid(uid_t); - int virt$setgid(gid_t); - u32 virt$read(int, FlatPtr, ssize_t); - u32 virt$write(int, FlatPtr, ssize_t); - u32 virt$mprotect(FlatPtr, size_t, int); - u32 virt$madvise(FlatPtr, size_t, int); - u32 virt$open(u32); - int virt$pipe(FlatPtr pipefd, int flags); - int virt$close(int); - int virt$mkdir(FlatPtr path, size_t path_length, mode_t mode); - int virt$rmdir(FlatPtr path, size_t path_length); - int virt$unlink(FlatPtr path, size_t path_length); - int virt$symlink(FlatPtr address); - int virt$rename(FlatPtr address); - int virt$set_coredump_metadata(FlatPtr address); - int virt$get_process_name(FlatPtr buffer, int size); - int virt$set_process_name(FlatPtr buffer, int size); - int virt$set_mmap_name(FlatPtr); + u32 virt$allocate_tls(FlatPtr, size_t); + int virt$anon_create(size_t, int); + int virt$beep(); + int virt$bind(int sockfd, FlatPtr address, socklen_t address_length); + int virt$chdir(FlatPtr, size_t); + int virt$chmod(FlatPtr, size_t, mode_t); + int virt$chown(FlatPtr); int virt$clock_gettime(int, FlatPtr); int virt$clock_nanosleep(FlatPtr); - int virt$dbgputstr(FlatPtr characters, int length); - int virt$chmod(FlatPtr, size_t, mode_t); - int virt$fchmod(int, mode_t); - int virt$chown(FlatPtr); - int virt$fchown(int, uid_t, gid_t); int virt$clock_settime(uint32_t clock_id, FlatPtr user_ts); - int virt$listen(int, int); - int virt$kill(pid_t, int); - int virt$killpg(int pgrp, int sig); - int virt$fstat(int, FlatPtr); - u32 virt$fcntl(int fd, int, u32); - int virt$getgroups(ssize_t count, FlatPtr); - int virt$setgroups(ssize_t count, FlatPtr); - int virt$lseek(int fd, FlatPtr offset_addr, int whence); - int virt$socket(int, int, int); - int virt$getsockopt(FlatPtr); - int virt$setsockopt(FlatPtr); - int virt$getsockname(FlatPtr); - int virt$getpeername(FlatPtr); - int virt$select(FlatPtr); - int virt$get_stack_bounds(FlatPtr, FlatPtr); - int virt$accept4(FlatPtr); - int virt$bind(int sockfd, FlatPtr address, socklen_t address_length); - int virt$recvmsg(int sockfd, FlatPtr msg_addr, int flags); - int virt$sendmsg(int sockfd, FlatPtr msg_addr, int flags); + int virt$close(int); int virt$connect(int sockfd, FlatPtr address, socklen_t address_size); - int virt$shutdown(int sockfd, int how); - void virt$sync(); - void virt$exit(int); - ssize_t virt$getrandom(FlatPtr buffer, size_t buffer_size, unsigned int flags); - int virt$chdir(FlatPtr, size_t); - int virt$dup2(int, int); - int virt$getpgrp(); - int virt$getpgid(pid_t); - int virt$setpgid(pid_t pid, pid_t pgid); - int virt$ttyname(int fd, FlatPtr buffer, size_t buffer_size); - int virt$getcwd(FlatPtr buffer, size_t buffer_size); - int virt$waitid(FlatPtr); - int virt$getsid(pid_t); - int virt$sched_setparam(int, FlatPtr); - int virt$sched_getparam(pid_t, FlatPtr); - int virt$set_thread_name(pid_t, FlatPtr, size_t); - pid_t virt$setsid(); int virt$create_inode_watcher(unsigned); + int virt$dbgputstr(FlatPtr characters, int length); + int virt$disown(pid_t); + int virt$dup2(int, int); + int virt$emuctl(FlatPtr, FlatPtr, FlatPtr); + int virt$execve(FlatPtr); + void virt$exit(int); + int virt$fchmod(int, mode_t); + int virt$fchown(int, uid_t, gid_t); + u32 virt$fcntl(int fd, int, u32); + int virt$fork(); + int virt$fstat(int, FlatPtr); + int virt$ftruncate(int fd, FlatPtr length_addr); + int virt$futex(FlatPtr); + int virt$get_dir_entries(int fd, FlatPtr buffer, ssize_t); + int virt$get_process_name(FlatPtr buffer, int size); + int virt$get_stack_bounds(FlatPtr, FlatPtr); + int virt$getcwd(FlatPtr buffer, size_t buffer_size); + gid_t virt$getegid(); + uid_t virt$geteuid(); + gid_t virt$getgid(); + int virt$getgroups(ssize_t count, FlatPtr); + int virt$gethostname(FlatPtr, ssize_t); + int virt$getpeername(FlatPtr); + int virt$getpgid(pid_t); + int virt$getpgrp(); + u32 virt$getpid(); + ssize_t virt$getrandom(FlatPtr buffer, size_t buffer_size, unsigned int flags); + int virt$getsid(pid_t); + int virt$getsockname(FlatPtr); + int virt$getsockopt(FlatPtr); + u32 virt$gettid(); + uid_t virt$getuid(); int virt$inode_watcher_add_watch(FlatPtr); int virt$inode_watcher_remove_watch(int, int); - int virt$readlink(FlatPtr); - u32 virt$allocate_tls(FlatPtr, size_t); + int virt$ioctl(int fd, unsigned, FlatPtr); + int virt$kill(pid_t, int); + int virt$killpg(int pgrp, int sig); + int virt$listen(int, int); + int virt$lseek(int fd, FlatPtr offset_addr, int whence); + u32 virt$madvise(FlatPtr, size_t, int); + int virt$mkdir(FlatPtr path, size_t path_length, mode_t mode); + u32 virt$mmap(u32); + u32 virt$mount(u32); + u32 virt$mprotect(FlatPtr, size_t, int); + FlatPtr virt$mremap(FlatPtr); + int virt$msyscall(FlatPtr); + u32 virt$munmap(FlatPtr address, size_t size); + u32 virt$open(u32); + FlatPtr virt$perf_event(int type, FlatPtr arg1, FlatPtr arg2); + FlatPtr virt$perf_register_string(FlatPtr, size_t); + int virt$pipe(FlatPtr pipefd, int flags); + u32 virt$pledge(u32); + int virt$profiling_disable(pid_t); + int virt$profiling_enable(pid_t); int virt$ptsname(int fd, FlatPtr buffer, size_t buffer_size); - int virt$beep(); - int virt$ftruncate(int fd, FlatPtr length_addr); + int virt$purge(int mode); + u32 virt$read(int, FlatPtr, ssize_t); + int virt$readlink(FlatPtr); + int virt$realpath(FlatPtr); + int virt$recvfd(int, int); + int virt$recvmsg(int sockfd, FlatPtr msg_addr, int flags); + int virt$rename(FlatPtr address); + int virt$rmdir(FlatPtr path, size_t path_length); + int virt$sched_getparam(pid_t, FlatPtr); + int virt$sched_setparam(int, FlatPtr); + int virt$select(FlatPtr); + int virt$sendfd(int, int); + int virt$sendmsg(int sockfd, FlatPtr msg_addr, int flags); + int virt$set_coredump_metadata(FlatPtr address); + int virt$set_mmap_name(FlatPtr); + int virt$set_process_name(FlatPtr buffer, int size); + int virt$set_thread_name(pid_t, FlatPtr, size_t); + int virt$setgid(gid_t); + int virt$setgroups(ssize_t count, FlatPtr); + int virt$setpgid(pid_t pid, pid_t pgid); + pid_t virt$setsid(); + int virt$setsockopt(FlatPtr); + int virt$setuid(uid_t); + int virt$shutdown(int sockfd, int how); + int virt$sigaction(int, FlatPtr, FlatPtr); + int virt$sigreturn(); + int virt$socket(int, int, int); + int virt$stat(FlatPtr); + int virt$symlink(FlatPtr address); + void virt$sync(); + u32 virt$sysconf(u32 name); + int virt$ttyname(int fd, FlatPtr buffer, size_t buffer_size); mode_t virt$umask(mode_t); int virt$uname(FlatPtr params_addr); - int virt$anon_create(size_t, int); - int virt$recvfd(int, int); - int virt$sendfd(int, int); - int virt$msyscall(FlatPtr); - int virt$futex(FlatPtr); + int virt$unlink(FlatPtr path, size_t path_length); + u32 virt$unveil(u32); + int virt$waitid(FlatPtr); + u32 virt$write(int, FlatPtr, ssize_t); void dispatch_one_pending_signal(); MmapRegion const* find_text_region(FlatPtr address); diff --git a/Userland/DevTools/UserspaceEmulator/Emulator_syscalls.cpp b/Userland/DevTools/UserspaceEmulator/Emulator_syscalls.cpp index 6088f548ee..38f183a09d 100644 --- a/Userland/DevTools/UserspaceEmulator/Emulator_syscalls.cpp +++ b/Userland/DevTools/UserspaceEmulator/Emulator_syscalls.cpp @@ -37,226 +37,226 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3) if constexpr (SPAM_DEBUG) reportln("Syscall: {} ({:x})", Syscall::to_string((Syscall::Function)function), function); switch (function) { - case SC_chdir: - return virt$chdir(arg1, arg2); - case SC_dup2: - return virt$dup2(arg1, arg2); - case SC_get_stack_bounds: - return virt$get_stack_bounds(arg1, arg2); + case SC_accept4: + return virt$accept4(arg1); case SC_access: return virt$access(arg1, arg2, arg3); - case SC_waitid: - return virt$waitid(arg1); - case SC_getcwd: - return virt$getcwd(arg1, arg2); - case SC_ttyname: - return virt$ttyname(arg1, arg2, arg3); - case SC_getpgrp: - return virt$getpgrp(); - case SC_getpgid: - return virt$getpgid(arg1); - case SC_setpgid: - return virt$setpgid(arg1, arg2); - case SC_execve: - return virt$execve(arg1); - case SC_sigaction: - return virt$sigaction(arg1, arg2, arg3); - case SC_sigreturn: - return virt$sigreturn(); - case SC_stat: - return virt$stat(arg1); - case SC_realpath: - return virt$realpath(arg1); - case SC_gethostname: - return virt$gethostname(arg1, arg2); - case SC_ioctl: - return virt$ioctl(arg1, arg2, arg3); - case SC_get_dir_entries: - return virt$get_dir_entries(arg1, arg2, arg3); - case SC_profiling_enable: - return virt$profiling_enable(arg1); - case SC_profiling_disable: - return virt$profiling_disable(arg1); - case SC_perf_event: - return virt$perf_event((int)arg1, arg2, arg3); - case SC_perf_register_string: - return virt$perf_register_string(arg1, arg2); - case SC_disown: - return virt$disown(arg1); - case SC_purge: - return virt$purge(arg1); - case SC_mmap: - return virt$mmap(arg1); - case SC_mount: - return virt$mount(arg1); - case SC_munmap: - return virt$munmap(arg1, arg2); - case SC_mremap: - return virt$mremap(arg1); - case SC_gettid: - return virt$gettid(); - case SC_sysconf: - return virt$sysconf(arg1); - case SC_getpid: - return virt$getpid(); - case SC_getsid: - return virt$getsid(arg1); - case SC_pledge: - return virt$pledge(arg1); - case SC_unveil: - return virt$unveil(arg1); - case SC_getuid: - return virt$getuid(); - case SC_geteuid: - return virt$geteuid(); - case SC_getgid: - return virt$getgid(); - case SC_getegid: - return virt$getegid(); - case SC_setuid: - return virt$setuid(arg1); - case SC_setgid: - return virt$setgid(arg2); - case SC_close: - return virt$close(arg1); - case SC_fstat: - return virt$fstat(arg1, arg2); - case SC_mkdir: - return virt$mkdir(arg1, arg2, arg3); - case SC_rmdir: - return virt$rmdir(arg1, arg2); - case SC_unlink: - return virt$unlink(arg1, arg2); - case SC_symlink: - return virt$symlink(arg1); - case SC_rename: - return virt$rename(arg1); - case SC_set_coredump_metadata: - return virt$set_coredump_metadata(arg1); - case SC_write: - return virt$write(arg1, arg2, arg3); - case SC_read: - return virt$read(arg1, arg2, arg3); - case SC_mprotect: - return virt$mprotect(arg1, arg2, arg3); - case SC_madvise: - return virt$madvise(arg1, arg2, arg3); + case SC_allocate_tls: + return virt$allocate_tls(arg1, arg2); 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, arg2); - case SC_open: - return virt$open(arg1); - case SC_pipe: - return virt$pipe(arg1, arg2); - case SC_fcntl: - return virt$fcntl(arg1, arg2, arg3); - case SC_getgroups: - return virt$getgroups(arg1, arg2); - case SC_setgroups: - return virt$setgroups(arg1, arg2); - case SC_lseek: - return virt$lseek(arg1, arg2, arg3); - case SC_socket: - return virt$socket(arg1, arg2, arg3); - case SC_getsockopt: - return virt$getsockopt(arg1); - case SC_get_process_name: - return virt$get_process_name(arg1, arg2); - case SC_set_process_name: - return virt$set_process_name(arg1, arg2); - case SC_dbgputstr: - return virt$dbgputstr(arg1, arg2); + case SC_beep: + return virt$beep(); + case SC_bind: + return virt$bind(arg1, arg2, arg3); + case SC_chdir: + return virt$chdir(arg1, arg2); case SC_chmod: return virt$chmod(arg1, arg2, arg3); + case SC_chown: + return virt$chown(arg1); + case SC_clock_gettime: + return virt$clock_gettime(arg1, arg2); + case SC_clock_nanosleep: + return virt$clock_nanosleep(arg1); + case SC_clock_settime: + return virt$clock_settime(arg1, arg2); + case SC_close: + return virt$close(arg1); + case SC_connect: + return virt$connect(arg1, arg2, arg3); + case SC_create_inode_watcher: + return virt$create_inode_watcher(arg1); + case SC_dbgputstr: + return virt$dbgputstr(arg1, arg2); + case SC_disown: + return virt$disown(arg1); + case SC_dup2: + return virt$dup2(arg1, arg2); + case SC_emuctl: + return virt$emuctl(arg1, arg2, arg3); + case SC_execve: + return virt$execve(arg1); + case SC_exit: + virt$exit((int)arg1); + return 0; case SC_fchmod: return virt$fchmod(arg1, arg2); case SC_fchown: return virt$fchown(arg1, arg2, arg3); - case SC_accept4: - return virt$accept4(arg1); - case SC_setsockopt: - return virt$setsockopt(arg1); - case SC_getsockname: - return virt$getsockname(arg1); - case SC_getpeername: - return virt$getpeername(arg1); - case SC_bind: - return virt$bind(arg1, arg2, arg3); - case SC_connect: - return virt$connect(arg1, arg2, arg3); - case SC_shutdown: - return virt$shutdown(arg1, arg2); - case SC_listen: - return virt$listen(arg1, arg2); - case SC_select: - return virt$select(arg1); - case SC_recvmsg: - return virt$recvmsg(arg1, arg2, arg3); - case SC_sendmsg: - return virt$sendmsg(arg1, arg2, arg3); - case SC_kill: - return virt$kill(arg1, arg2); - case SC_killpg: - return virt$killpg(arg1, arg2); - case SC_set_mmap_name: - return virt$set_mmap_name(arg1); - case SC_sync: - virt$sync(); - return 0; - case SC_exit: - virt$exit((int)arg1); - return 0; - case SC_clock_gettime: - return virt$clock_gettime(arg1, arg2); - case SC_clock_settime: - return virt$clock_settime(arg1, arg2); - case SC_getrandom: - return virt$getrandom(arg1, arg2, arg3); + case SC_fcntl: + return virt$fcntl(arg1, arg2, arg3); case SC_fork: return virt$fork(); - case SC_emuctl: - return virt$emuctl(arg1, arg2, arg3); - case SC_sched_getparam: - return virt$sched_getparam(arg1, arg2); - case SC_sched_setparam: - return virt$sched_setparam(arg1, arg2); - case SC_set_thread_name: - return virt$set_thread_name(arg1, arg2, arg3); - case SC_setsid: - return virt$setsid(); - case SC_create_inode_watcher: - return virt$create_inode_watcher(arg1); + case SC_fstat: + return virt$fstat(arg1, arg2); + case SC_ftruncate: + return virt$ftruncate(arg1, arg2); + case SC_futex: + return virt$futex(arg1); + case SC_get_dir_entries: + return virt$get_dir_entries(arg1, arg2, arg3); + case SC_get_process_name: + return virt$get_process_name(arg1, arg2); + case SC_get_stack_bounds: + return virt$get_stack_bounds(arg1, arg2); + case SC_getcwd: + return virt$getcwd(arg1, arg2); + case SC_getegid: + return virt$getegid(); + case SC_geteuid: + return virt$geteuid(); + case SC_getgid: + return virt$getgid(); + case SC_getgroups: + return virt$getgroups(arg1, arg2); + case SC_gethostname: + return virt$gethostname(arg1, arg2); + case SC_getpeername: + return virt$getpeername(arg1); + case SC_getpgid: + return virt$getpgid(arg1); + case SC_getpgrp: + return virt$getpgrp(); + case SC_getpid: + return virt$getpid(); + case SC_getrandom: + return virt$getrandom(arg1, arg2, arg3); + case SC_getsid: + return virt$getsid(arg1); + case SC_getsockname: + return virt$getsockname(arg1); + case SC_getsockopt: + return virt$getsockopt(arg1); + case SC_gettid: + return virt$gettid(); + case SC_getuid: + return virt$getuid(); case SC_inode_watcher_add_watch: return virt$inode_watcher_add_watch(arg1); case SC_inode_watcher_remove_watch: return virt$inode_watcher_remove_watch(arg1, arg2); - case SC_clock_nanosleep: - return virt$clock_nanosleep(arg1); - case SC_readlink: - return virt$readlink(arg1); + case SC_ioctl: + return virt$ioctl(arg1, arg2, arg3); + case SC_kill: + return virt$kill(arg1, arg2); + case SC_killpg: + return virt$killpg(arg1, arg2); + case SC_listen: + return virt$listen(arg1, arg2); + case SC_lseek: + return virt$lseek(arg1, arg2, arg3); + case SC_madvise: + return virt$madvise(arg1, arg2, arg3); + case SC_map_time_page: + return -ENOSYS; + case SC_mkdir: + return virt$mkdir(arg1, arg2, arg3); + case SC_mmap: + return virt$mmap(arg1); + case SC_mount: + return virt$mount(arg1); + case SC_mprotect: + return virt$mprotect(arg1, arg2, arg3); + case SC_mremap: + return virt$mremap(arg1); + case SC_msyscall: + return virt$msyscall(arg1); + case SC_munmap: + return virt$munmap(arg1, arg2); + case SC_open: + return virt$open(arg1); + case SC_perf_event: + return virt$perf_event((int)arg1, arg2, arg3); + case SC_perf_register_string: + return virt$perf_register_string(arg1, arg2); + case SC_pipe: + return virt$pipe(arg1, arg2); + case SC_pledge: + return virt$pledge(arg1); + case SC_profiling_disable: + return virt$profiling_disable(arg1); + case SC_profiling_enable: + return virt$profiling_enable(arg1); case SC_ptsname: return virt$ptsname(arg1, arg2, arg3); - case SC_allocate_tls: - return virt$allocate_tls(arg1, arg2); - case SC_beep: - return virt$beep(); - case SC_ftruncate: - return virt$ftruncate(arg1, arg2); + case SC_purge: + return virt$purge(arg1); + case SC_read: + return virt$read(arg1, arg2, arg3); + case SC_readlink: + return virt$readlink(arg1); + case SC_realpath: + return virt$realpath(arg1); + case SC_recvfd: + return virt$recvfd(arg1, arg2); + case SC_recvmsg: + return virt$recvmsg(arg1, arg2, arg3); + case SC_rename: + return virt$rename(arg1); + case SC_rmdir: + return virt$rmdir(arg1, arg2); + case SC_sched_getparam: + return virt$sched_getparam(arg1, arg2); + case SC_sched_setparam: + return virt$sched_setparam(arg1, arg2); + case SC_select: + return virt$select(arg1); + case SC_sendfd: + return virt$sendfd(arg1, arg2); + case SC_sendmsg: + return virt$sendmsg(arg1, arg2, arg3); + case SC_set_coredump_metadata: + return virt$set_coredump_metadata(arg1); + case SC_set_mmap_name: + return virt$set_mmap_name(arg1); + case SC_set_process_name: + return virt$set_process_name(arg1, arg2); + case SC_set_thread_name: + return virt$set_thread_name(arg1, arg2, arg3); + case SC_setgid: + return virt$setgid(arg2); + case SC_setgroups: + return virt$setgroups(arg1, arg2); + case SC_setpgid: + return virt$setpgid(arg1, arg2); + case SC_setsid: + return virt$setsid(); + case SC_setsockopt: + return virt$setsockopt(arg1); + case SC_setuid: + return virt$setuid(arg1); + case SC_shutdown: + return virt$shutdown(arg1, arg2); + case SC_sigaction: + return virt$sigaction(arg1, arg2, arg3); + case SC_sigreturn: + return virt$sigreturn(); + case SC_socket: + return virt$socket(arg1, arg2, arg3); + case SC_stat: + return virt$stat(arg1); + case SC_symlink: + return virt$symlink(arg1); + case SC_sync: + virt$sync(); + return 0; + case SC_sysconf: + return virt$sysconf(arg1); + case SC_ttyname: + return virt$ttyname(arg1, arg2, arg3); case SC_umask: return virt$umask(arg1); case SC_uname: return virt$uname(arg1); - case SC_chown: - return virt$chown(arg1); - case SC_msyscall: - return virt$msyscall(arg1); - case SC_futex: - return virt$futex(arg1); - case SC_map_time_page: - return -ENOSYS; + case SC_unlink: + return virt$unlink(arg1, arg2); + case SC_unveil: + return virt$unveil(arg1); + case SC_waitid: + return virt$waitid(arg1); + case SC_write: + return virt$write(arg1, arg2, arg3); default: reportln("\n=={}== \033[31;1mUnimplemented syscall: {}\033[0m, {:p}", getpid(), Syscall::to_string((Syscall::Function)function), function); dump_backtrace();