| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | // Syscall dispatcher |
| 3 | // This file was generated by scripts/gen_syscall.py |
| 4 | |
| 5 | #pragma once |
| 6 | |
| 7 | #include <mos/filesystem/fs_types.h> |
| 8 | #include <mos/io/io_types.h> |
| 9 | #include <mos/mos_global.h> |
| 10 | #include <mos/tasks/signal_types.h> |
| 11 | #include <mos/types.h> |
| 12 | #include <sys/poll.h> |
| 13 | #include <sys/select.h> |
| 14 | #include <sys/uio.h> |
| 15 | |
| 16 | // syscall implementation declarations and syscall numbers |
| 17 | #include <mos/syscall/decl.h> |
| 18 | #include <mos/syscall/number.h> |
| 19 | |
| 20 | // debugging support |
| 21 | #include "mos/syslog/printk.hpp" |
| 22 | |
| 23 | should_inline reg_t dispatch_syscall(const reg_t number, reg_t arg1, reg_t arg2, reg_t arg3, reg_t arg4, reg_t arg5, reg_t arg6) |
| 24 | { |
| 25 | MOS_UNUSED(arg1); |
| 26 | MOS_UNUSED(arg2); |
| 27 | MOS_UNUSED(arg3); |
| 28 | MOS_UNUSED(arg4); |
| 29 | MOS_UNUSED(arg5); |
| 30 | MOS_UNUSED(arg6); |
| 31 | |
| 32 | reg_t ret = -ENOSYS; |
| 33 | |
| 34 | switch (number) |
| 35 | { |
| 36 | case SYSCALL_vfs_openat: |
| 37 | { |
| 38 | pr_dinfo2(syscall, "vfs_openat(dirfd=%d, file_path='%s', flags=%llu)" , (fd_t) arg1, (const char *) arg2, (u64) arg3); |
| 39 | ret = (reg_t) SyscallEntry::do_sys_vfs_openat(dirfd: (fd_t) arg1, file_path: (const char *) arg2, flags: (u64) arg3); |
| 40 | break; |
| 41 | } |
| 42 | case SYSCALL_vfs_fstatat: |
| 43 | { |
| 44 | pr_dinfo2(syscall, "vfs_fstatat(dirfd=%d, file_path='%s', stat_buf=%p, flags=%llu)" , (fd_t) arg1, (const char *) arg2, (void *) arg3, (u64) arg4); |
| 45 | ret = (reg_t) SyscallEntry::do_sys_vfs_fstatat(dirfd: (fd_t) arg1, file_path: (const char *) arg2, stat_buf: (file_stat_t *) arg3, flags: (u64) arg4); |
| 46 | break; |
| 47 | } |
| 48 | case SYSCALL_io_read: |
| 49 | { |
| 50 | pr_dinfo2(syscall, "io_read(fd=%d, buffer=%p, size=%zu)" , (fd_t) arg1, (void *) arg2, (size_t) arg3); |
| 51 | ret = (reg_t) SyscallEntry::do_sys_io_read(fd: (fd_t) arg1, buffer: (void *) arg2, size: (size_t) arg3); |
| 52 | break; |
| 53 | } |
| 54 | case SYSCALL_io_write: |
| 55 | { |
| 56 | pr_dinfo2(syscall, "io_write(fd=%d, buffer=%p, size=%zu)" , (fd_t) arg1, (void *) arg2, (size_t) arg3); |
| 57 | ret = (reg_t) SyscallEntry::do_sys_io_write(fd: (fd_t) arg1, buffer: (const void *) arg2, size: (size_t) arg3); |
| 58 | break; |
| 59 | } |
| 60 | case SYSCALL_io_close: |
| 61 | { |
| 62 | pr_dinfo2(syscall, "io_close(fd=%d)" , (fd_t) arg1); |
| 63 | ret = (reg_t) SyscallEntry::do_sys_io_close(fd: (fd_t) arg1); |
| 64 | break; |
| 65 | } |
| 66 | case SYSCALL_exit: |
| 67 | { |
| 68 | pr_dinfo2(syscall, "exit(exit_code=%u)" , (u32) arg1); |
| 69 | SyscallEntry::do_sys_exit(exit_code: (u32) arg1); |
| 70 | break; |
| 71 | } |
| 72 | case SYSCALL_yield_cpu: |
| 73 | { |
| 74 | pr_dinfo2(syscall, "yield_cpu()" ); |
| 75 | SyscallEntry::do_sys_yield_cpu(); |
| 76 | break; |
| 77 | } |
| 78 | case SYSCALL_fork: |
| 79 | { |
| 80 | pr_dinfo2(syscall, "fork()" ); |
| 81 | ret = (reg_t) SyscallEntry::do_sys_fork(); |
| 82 | break; |
| 83 | } |
| 84 | case SYSCALL_get_pid: |
| 85 | { |
| 86 | pr_dinfo2(syscall, "get_pid()" ); |
| 87 | ret = (reg_t) SyscallEntry::do_sys_get_pid(); |
| 88 | break; |
| 89 | } |
| 90 | case SYSCALL_get_parent_pid: |
| 91 | { |
| 92 | pr_dinfo2(syscall, "get_parent_pid()" ); |
| 93 | ret = (reg_t) SyscallEntry::do_sys_get_parent_pid(); |
| 94 | break; |
| 95 | } |
| 96 | case SYSCALL_spawn: |
| 97 | { |
| 98 | pr_dinfo2(syscall, "spawn(file_path='%s', argv=%p, envp=%p)" , (const char *) arg1, (void *) arg2, (void *) arg3); |
| 99 | ret = (reg_t) SyscallEntry::do_sys_spawn(file_path: (const char *) arg1, argv: (const char *const *) arg2, envp: (const char *const *) arg3); |
| 100 | break; |
| 101 | } |
| 102 | case SYSCALL_create_thread: |
| 103 | { |
| 104 | pr_dinfo2(syscall, "create_thread(name='%s', entry=%p, arg=%p, stack_size=%zu, stack=%p)" , (const char *) arg1, (void *) arg2, (void *) arg3, (size_t) arg4, (void *) arg5); |
| 105 | ret = (reg_t) SyscallEntry::do_sys_create_thread(name: (const char *) arg1, entry: (thread_entry_t) arg2, arg: (void *) arg3, stack_size: (size_t) arg4, stack: (void *) arg5); |
| 106 | break; |
| 107 | } |
| 108 | case SYSCALL_get_tid: |
| 109 | { |
| 110 | pr_dinfo2(syscall, "get_tid()" ); |
| 111 | ret = (reg_t) SyscallEntry::do_sys_get_tid(); |
| 112 | break; |
| 113 | } |
| 114 | case SYSCALL_thread_exit: |
| 115 | { |
| 116 | pr_dinfo2(syscall, "thread_exit()" ); |
| 117 | SyscallEntry::do_sys_thread_exit(); |
| 118 | break; |
| 119 | } |
| 120 | case SYSCALL_wait_for_thread: |
| 121 | { |
| 122 | pr_dinfo2(syscall, "wait_for_thread(tid=%d)" , (tid_t) arg1); |
| 123 | ret = (reg_t) SyscallEntry::do_sys_wait_for_thread(tid: (tid_t) arg1); |
| 124 | break; |
| 125 | } |
| 126 | case SYSCALL_futex_wait: |
| 127 | { |
| 128 | pr_dinfo2(syscall, "futex_wait(futex=%p, val=%u)" , (void *) arg1, (u32) arg2); |
| 129 | ret = (reg_t) SyscallEntry::do_sys_futex_wait(futex: (futex_word_t *) arg1, val: (u32) arg2); |
| 130 | break; |
| 131 | } |
| 132 | case SYSCALL_futex_wake: |
| 133 | { |
| 134 | pr_dinfo2(syscall, "futex_wake(futex=%p, count=%zu)" , (void *) arg1, (size_t) arg2); |
| 135 | ret = (reg_t) SyscallEntry::do_sys_futex_wake(futex: (futex_word_t *) arg1, count: (size_t) arg2); |
| 136 | break; |
| 137 | } |
| 138 | case SYSCALL_ipc_create: |
| 139 | { |
| 140 | pr_dinfo2(syscall, "ipc_create(name='%s', max_pending_connections=%zu)" , (const char *) arg1, (size_t) arg2); |
| 141 | ret = (reg_t) SyscallEntry::do_sys_ipc_create(name: (const char *) arg1, max_pending_connections: (size_t) arg2); |
| 142 | break; |
| 143 | } |
| 144 | case SYSCALL_ipc_accept: |
| 145 | { |
| 146 | pr_dinfo2(syscall, "ipc_accept(fd=%d)" , (fd_t) arg1); |
| 147 | ret = (reg_t) SyscallEntry::do_sys_ipc_accept(fd: (fd_t) arg1); |
| 148 | break; |
| 149 | } |
| 150 | case SYSCALL_ipc_connect: |
| 151 | { |
| 152 | pr_dinfo2(syscall, "ipc_connect(name='%s', buffer_size=%zu)" , (const char *) arg1, (size_t) arg2); |
| 153 | ret = (reg_t) SyscallEntry::do_sys_ipc_connect(name: (const char *) arg1, buffer_size: (size_t) arg2); |
| 154 | break; |
| 155 | } |
| 156 | case SYSCALL_arch_syscall: |
| 157 | { |
| 158 | pr_dinfo2(syscall, "arch_syscall(nr=%llu, arg1=%llu, arg2=%llu, arg3=%llu, arg4=%llu)" , (u64) arg1, (u64) arg2, (u64) arg3, (u64) arg4, (u64) arg5); |
| 159 | ret = (reg_t) SyscallEntry::do_sys_arch_syscall(nr: (u64) arg1, arg1: (u64) arg2, arg2: (u64) arg3, arg3: (u64) arg4, arg4: (u64) arg5); |
| 160 | break; |
| 161 | } |
| 162 | case SYSCALL_vfs_mount: |
| 163 | { |
| 164 | pr_dinfo2(syscall, "vfs_mount(device='%s', mount_point='%s', fs_type='%s', options='%s')" , (const char *) arg1, (const char *) arg2, (const char *) arg3, (const char *) arg4); |
| 165 | ret = (reg_t) SyscallEntry::do_sys_vfs_mount(device: (const char *) arg1, mount_point: (const char *) arg2, fs_type: (const char *) arg3, options: (const char *) arg4); |
| 166 | break; |
| 167 | } |
| 168 | case SYSCALL_vfs_readlinkat: |
| 169 | { |
| 170 | pr_dinfo2(syscall, "vfs_readlinkat(dirfd=%d, path='%s', buf=%p, buf_size=%zu)" , (fd_t) arg1, (const char *) arg2, (void *) arg3, (size_t) arg4); |
| 171 | ret = (reg_t) SyscallEntry::do_sys_vfs_readlinkat(dirfd: (fd_t) arg1, path: (const char *) arg2, buf: (char *) arg3, buf_size: (size_t) arg4); |
| 172 | break; |
| 173 | } |
| 174 | case SYSCALL_vfs_unlinkat: |
| 175 | { |
| 176 | pr_dinfo2(syscall, "vfs_unlinkat(dirfd=%d, path='%s')" , (fd_t) arg1, (const char *) arg2); |
| 177 | ret = (reg_t) SyscallEntry::do_sys_vfs_unlinkat(dirfd: (fd_t) arg1, path: (const char *) arg2); |
| 178 | break; |
| 179 | } |
| 180 | case SYSCALL_vfs_symlink: |
| 181 | { |
| 182 | pr_dinfo2(syscall, "vfs_symlink(link_path='%s', target='%s')" , (const char *) arg1, (const char *) arg2); |
| 183 | ret = (reg_t) SyscallEntry::do_sys_vfs_symlink(link_path: (const char *) arg1, target: (const char *) arg2); |
| 184 | break; |
| 185 | } |
| 186 | case SYSCALL_vfs_mkdir: |
| 187 | { |
| 188 | pr_dinfo2(syscall, "vfs_mkdir(path='%s')" , (const char *) arg1); |
| 189 | ret = (reg_t) SyscallEntry::do_sys_vfs_mkdir(path: (const char *) arg1); |
| 190 | break; |
| 191 | } |
| 192 | case SYSCALL_vfs_list_dir: |
| 193 | { |
| 194 | pr_dinfo2(syscall, "vfs_list_dir(fd=%d, buffer=%p, buffer_size=%zu)" , (fd_t) arg1, (void *) arg2, (size_t) arg3); |
| 195 | ret = (reg_t) SyscallEntry::do_sys_vfs_list_dir(fd: (fd_t) arg1, buffer: (char *) arg2, buffer_size: (size_t) arg3); |
| 196 | break; |
| 197 | } |
| 198 | case SYSCALL_fd_manipulate: |
| 199 | { |
| 200 | pr_dinfo2(syscall, "fd_manipulate(fd=%d, cmd=%llu, arg=%p)" , (fd_t) arg1, (u64) arg2, (void *) arg3); |
| 201 | ret = (reg_t) SyscallEntry::do_sys_fd_manipulate(fd: (fd_t) arg1, cmd: (u64) arg2, arg: (void *) arg3); |
| 202 | break; |
| 203 | } |
| 204 | case SYSCALL_mmap_anonymous: |
| 205 | { |
| 206 | pr_dinfo2(syscall, "mmap_anonymous(hint_addr=" PTR_FMT ", size=%zu, perm=%d, flags=%llu)" , (ptr_t) arg1, (size_t) arg2, (mem_perm_t) arg3, (u64) arg4); |
| 207 | ret = (reg_t) SyscallEntry::do_sys_mmap_anonymous(hint_addr: (ptr_t) arg1, size: (size_t) arg2, perm: (mem_perm_t) arg3, flags: (u64) arg4); |
| 208 | break; |
| 209 | } |
| 210 | case SYSCALL_mmap_file: |
| 211 | { |
| 212 | pr_dinfo2(syscall, "mmap_file(hint_addr=" PTR_FMT ", size=%zu, perm=%d, flags=%llu, fd=%d, offset=%zd)" , (ptr_t) arg1, (size_t) arg2, (mem_perm_t) arg3, (u64) arg4, (fd_t) arg5, (off_t) arg6); |
| 213 | ret = (reg_t) SyscallEntry::do_sys_mmap_file(hint_addr: (ptr_t) arg1, size: (size_t) arg2, perm: (mem_perm_t) arg3, flags: (u64) arg4, fd: (fd_t) arg5, offset: (off_t) arg6); |
| 214 | break; |
| 215 | } |
| 216 | case SYSCALL_wait_for_process: |
| 217 | { |
| 218 | pr_dinfo2(syscall, "wait_for_process(pid=%d, exit_code=%p, flags=%llu)" , (pid_t) arg1, (void *) arg2, (u64) arg3); |
| 219 | ret = (reg_t) SyscallEntry::do_sys_wait_for_process(pid: (pid_t) arg1, exit_code: (u32 *) arg2, flags: (u64) arg3); |
| 220 | break; |
| 221 | } |
| 222 | case SYSCALL_munmap: |
| 223 | { |
| 224 | pr_dinfo2(syscall, "munmap(addr=%p, size=%zu)" , (void *) arg1, (size_t) arg2); |
| 225 | ret = (reg_t) SyscallEntry::do_sys_munmap(addr: (void *) arg1, size: (size_t) arg2); |
| 226 | break; |
| 227 | } |
| 228 | case SYSCALL_vfs_chdirat: |
| 229 | { |
| 230 | pr_dinfo2(syscall, "vfs_chdirat(dirfd=%d, path='%s')" , (fd_t) arg1, (const char *) arg2); |
| 231 | ret = (reg_t) SyscallEntry::do_sys_vfs_chdirat(dirfd: (fd_t) arg1, path: (const char *) arg2); |
| 232 | break; |
| 233 | } |
| 234 | case SYSCALL_vfs_getcwd: |
| 235 | { |
| 236 | pr_dinfo2(syscall, "vfs_getcwd(buf=%p, buf_size=%zu)" , (void *) arg1, (size_t) arg2); |
| 237 | ret = (reg_t) SyscallEntry::do_sys_vfs_getcwd(buf: (char *) arg1, buf_size: (size_t) arg2); |
| 238 | break; |
| 239 | } |
| 240 | case SYSCALL_io_seek: |
| 241 | { |
| 242 | pr_dinfo2(syscall, "io_seek(fd=%d, offset=%zd, whence=%d)" , (fd_t) arg1, (off_t) arg2, (io_seek_whence_t) arg3); |
| 243 | ret = (reg_t) SyscallEntry::do_sys_io_seek(fd: (fd_t) arg1, offset: (off_t) arg2, whence: (io_seek_whence_t) arg3); |
| 244 | break; |
| 245 | } |
| 246 | case SYSCALL_io_tell: |
| 247 | { |
| 248 | pr_dinfo2(syscall, "io_tell(fd=%d)" , (fd_t) arg1); |
| 249 | ret = (reg_t) SyscallEntry::do_sys_io_tell(fd: (fd_t) arg1); |
| 250 | break; |
| 251 | } |
| 252 | case SYSCALL_signal_register: |
| 253 | { |
| 254 | pr_dinfo2(syscall, "signal_register(signum=%d, action=%p)" , (signal_t) arg1, (void *) arg2); |
| 255 | ret = (reg_t) SyscallEntry::do_sys_signal_register(signum: (signal_t) arg1, action: (const sigaction_t *) arg2); |
| 256 | break; |
| 257 | } |
| 258 | case SYSCALL_signal_process: |
| 259 | { |
| 260 | pr_dinfo2(syscall, "signal_process(pid=%d, signum=%d)" , (pid_t) arg1, (signal_t) arg2); |
| 261 | ret = (reg_t) SyscallEntry::do_sys_signal_process(pid: (pid_t) arg1, signum: (signal_t) arg2); |
| 262 | break; |
| 263 | } |
| 264 | case SYSCALL_signal_thread: |
| 265 | { |
| 266 | pr_dinfo2(syscall, "signal_thread(tid=%d, signum=%d)" , (tid_t) arg1, (signal_t) arg2); |
| 267 | ret = (reg_t) SyscallEntry::do_sys_signal_thread(tid: (tid_t) arg1, signum: (signal_t) arg2); |
| 268 | break; |
| 269 | } |
| 270 | case SYSCALL_poweroff: |
| 271 | { |
| 272 | pr_dinfo2(syscall, "poweroff(reboot=%d, magic=%u)" , (bool) arg1, (u32) arg2); |
| 273 | SyscallEntry::do_sys_poweroff(reboot: (bool) arg1, magic: (u32) arg2); |
| 274 | break; |
| 275 | } |
| 276 | case SYSCALL_signal_return: |
| 277 | { |
| 278 | pr_dinfo2(syscall, "signal_return(sp=%p)" , (void *) arg1); |
| 279 | SyscallEntry::do_sys_signal_return(sp: (void *) arg1); |
| 280 | break; |
| 281 | } |
| 282 | case SYSCALL_vm_protect: |
| 283 | { |
| 284 | pr_dinfo2(syscall, "vm_protect(addr=%p, size=%zu, perm=%d)" , (void *) arg1, (size_t) arg2, (mem_perm_t) arg3); |
| 285 | ret = (reg_t) SyscallEntry::do_sys_vm_protect(addr: (void *) arg1, size: (size_t) arg2, perm: (mem_perm_t) arg3); |
| 286 | break; |
| 287 | } |
| 288 | case SYSCALL_io_poll: |
| 289 | { |
| 290 | pr_dinfo2(syscall, "io_poll(fds=%p, nfds=%ld, timeout=%d)" , (void *) arg1, (nfds_t) arg2, (int) arg3); |
| 291 | ret = (reg_t) SyscallEntry::do_sys_io_poll(fds: (struct pollfd *) arg1, nfds: (nfds_t) arg2, timeout: (int) arg3); |
| 292 | break; |
| 293 | } |
| 294 | case SYSCALL_io_pselect: |
| 295 | { |
| 296 | pr_dinfo2(syscall, "io_pselect(nfds=%d, readfds=%p, writefds=%p, exceptfds=%p, timeout=%p, sigmask=%p)" , (int) arg1, (void *) arg2, (void *) arg3, (void *) arg4, (void *) arg5, (void *) arg6); |
| 297 | ret = (reg_t) SyscallEntry::do_sys_io_pselect(nfds: (int) arg1, readfds: (fd_set *) arg2, writefds: (fd_set *) arg3, exceptfds: (fd_set *) arg4, timeout: (const struct timespec *) arg5, sigmask: (const sigset_t *) arg6); |
| 298 | break; |
| 299 | } |
| 300 | case SYSCALL_execveat: |
| 301 | { |
| 302 | pr_dinfo2(syscall, "execveat(dirfd=%d, file_path='%s', argv=%p, envp=%p, flags=%llu)" , (fd_t) arg1, (const char *) arg2, (void *) arg3, (void *) arg4, (u64) arg5); |
| 303 | ret = (reg_t) SyscallEntry::do_sys_execveat(dirfd: (fd_t) arg1, file_path: (const char *) arg2, argv: (const char *const *) arg3, envp: (const char *const *) arg4, flags: (u64) arg5); |
| 304 | break; |
| 305 | } |
| 306 | case SYSCALL_clock_msleep: |
| 307 | { |
| 308 | pr_dinfo2(syscall, "clock_msleep(ms=%llu)" , (u64) arg1); |
| 309 | ret = (reg_t) SyscallEntry::do_sys_clock_msleep(ms: (u64) arg1); |
| 310 | break; |
| 311 | } |
| 312 | case SYSCALL_io_dup: |
| 313 | { |
| 314 | pr_dinfo2(syscall, "io_dup(fd=%d)" , (fd_t) arg1); |
| 315 | ret = (reg_t) SyscallEntry::do_sys_io_dup(fd: (fd_t) arg1); |
| 316 | break; |
| 317 | } |
| 318 | case SYSCALL_io_dup2: |
| 319 | { |
| 320 | pr_dinfo2(syscall, "io_dup2(old_fd=%d, new_fd=%d)" , (fd_t) arg1, (fd_t) arg2); |
| 321 | ret = (reg_t) SyscallEntry::do_sys_io_dup2(old_fd: (fd_t) arg1, new_fd: (fd_t) arg2); |
| 322 | break; |
| 323 | } |
| 324 | case SYSCALL_dmabuf_alloc: |
| 325 | { |
| 326 | pr_dinfo2(syscall, "dmabuf_alloc(n_pages=%zu, out_paddr=%p, out_vaddr=%p)" , (size_t) arg1, (void *) arg2, (void *) arg3); |
| 327 | ret = (reg_t) SyscallEntry::do_sys_dmabuf_alloc(n_pages: (size_t) arg1, out_paddr: (ptr_t *) arg2, out_vaddr: (ptr_t *) arg3); |
| 328 | break; |
| 329 | } |
| 330 | case SYSCALL_dmabuf_free: |
| 331 | { |
| 332 | pr_dinfo2(syscall, "dmabuf_free(vaddr=" PTR_FMT ", paddr=" PTR_FMT ")" , (ptr_t) arg1, (ptr_t) arg2); |
| 333 | ret = (reg_t) SyscallEntry::do_sys_dmabuf_free(vaddr: (ptr_t) arg1, paddr: (ptr_t) arg2); |
| 334 | break; |
| 335 | } |
| 336 | case SYSCALL_dmabuf_share: |
| 337 | { |
| 338 | pr_dinfo2(syscall, "dmabuf_share(buf=%p, bufsize=%zu, out_paddr=%p)" , (void *) arg1, (size_t) arg2, (void *) arg3); |
| 339 | ret = (reg_t) SyscallEntry::do_sys_dmabuf_share(buf: (void *) arg1, bufsize: (size_t) arg2, out_paddr: (ptr_t *) arg3); |
| 340 | break; |
| 341 | } |
| 342 | case SYSCALL_dmabuf_unshare: |
| 343 | { |
| 344 | pr_dinfo2(syscall, "dmabuf_unshare(paddr=" PTR_FMT ", size=%zu, vaddr=%p)" , (ptr_t) arg1, (size_t) arg2, (void *) arg3); |
| 345 | ret = (reg_t) SyscallEntry::do_sys_dmabuf_unshare(paddr: (ptr_t) arg1, size: (size_t) arg2, vaddr: (void *) arg3); |
| 346 | break; |
| 347 | } |
| 348 | case SYSCALL_pipe: |
| 349 | { |
| 350 | pr_dinfo2(syscall, "pipe(out_read_fd=%p, out_write_fd=%p, flags=%llu)" , (void *) arg1, (void *) arg2, (u64) arg3); |
| 351 | ret = (reg_t) SyscallEntry::do_sys_pipe(out_read_fd: (fd_t *) arg1, out_write_fd: (fd_t *) arg2, flags: (u64) arg3); |
| 352 | break; |
| 353 | } |
| 354 | case SYSCALL_io_readv: |
| 355 | { |
| 356 | pr_dinfo2(syscall, "io_readv(fd=%d, iov=%p, iov_count=%d)" , (fd_t) arg1, (void *) arg2, (int) arg3); |
| 357 | ret = (reg_t) SyscallEntry::do_sys_io_readv(fd: (fd_t) arg1, iov: (const struct iovec *) arg2, iov_count: (int) arg3); |
| 358 | break; |
| 359 | } |
| 360 | case SYSCALL_vfs_unmount: |
| 361 | { |
| 362 | pr_dinfo2(syscall, "vfs_unmount(mount_point='%s')" , (const char *) arg1); |
| 363 | ret = (reg_t) SyscallEntry::do_sys_vfs_unmount(mount_point: (const char *) arg1); |
| 364 | break; |
| 365 | } |
| 366 | case SYSCALL_clock_gettimeofday: |
| 367 | { |
| 368 | pr_dinfo2(syscall, "clock_gettimeofday(tv=%p)" , (void *) arg1); |
| 369 | ret = (reg_t) SyscallEntry::do_sys_clock_gettimeofday(tv: (struct timespec *) arg1); |
| 370 | break; |
| 371 | } |
| 372 | case SYSCALL_thread_setname: |
| 373 | { |
| 374 | pr_dinfo2(syscall, "thread_setname(tid=%d, name='%s')" , (tid_t) arg1, (const char *) arg2); |
| 375 | ret = (reg_t) SyscallEntry::do_sys_thread_setname(tid: (tid_t) arg1, name: (const char *) arg2); |
| 376 | break; |
| 377 | } |
| 378 | case SYSCALL_thread_getname: |
| 379 | { |
| 380 | pr_dinfo2(syscall, "thread_getname(tid=%d, buf=%p, buf_size=%zu)" , (tid_t) arg1, (void *) arg2, (size_t) arg3); |
| 381 | ret = (reg_t) SyscallEntry::do_sys_thread_getname(tid: (tid_t) arg1, buf: (char *) arg2, buf_size: (size_t) arg3); |
| 382 | break; |
| 383 | } |
| 384 | case SYSCALL_vfs_fchmodat: |
| 385 | { |
| 386 | pr_dinfo2(syscall, "vfs_fchmodat(dirfd=%d, path='%s', mode=%d, flags=%llu)" , (fd_t) arg1, (const char *) arg2, (int) arg3, (u64) arg4); |
| 387 | ret = (reg_t) SyscallEntry::do_sys_vfs_fchmodat(dirfd: (fd_t) arg1, path: (const char *) arg2, mode: (int) arg3, flags: (u64) arg4); |
| 388 | break; |
| 389 | } |
| 390 | case SYSCALL_io_pread: |
| 391 | { |
| 392 | pr_dinfo2(syscall, "io_pread(fd=%d, buf=%p, count=%zu, offset=%zd)" , (fd_t) arg1, (void *) arg2, (size_t) arg3, (off_t) arg4); |
| 393 | ret = (reg_t) SyscallEntry::do_sys_io_pread(fd: (fd_t) arg1, buf: (void *) arg2, count: (size_t) arg3, offset: (off_t) arg4); |
| 394 | break; |
| 395 | } |
| 396 | case SYSCALL_memfd_create: |
| 397 | { |
| 398 | pr_dinfo2(syscall, "memfd_create(name='%s', flags=%llu)" , (const char *) arg1, (u64) arg2); |
| 399 | ret = (reg_t) SyscallEntry::do_sys_memfd_create(name: (const char *) arg1, flags: (u64) arg2); |
| 400 | break; |
| 401 | } |
| 402 | case SYSCALL_signal_mask_op: |
| 403 | { |
| 404 | pr_dinfo2(syscall, "signal_mask_op(how=%d, set=%p, oldset=%p)" , (int) arg1, (void *) arg2, (void *) arg3); |
| 405 | ret = (reg_t) SyscallEntry::do_sys_signal_mask_op(how: (int) arg1, set: (const sigset_t *) arg2, oldset: (sigset_t *) arg3); |
| 406 | break; |
| 407 | } |
| 408 | case SYSCALL_vfs_fsync: |
| 409 | { |
| 410 | pr_dinfo2(syscall, "vfs_fsync(fd=%d, data_only=%d)" , (fd_t) arg1, (bool) arg2); |
| 411 | ret = (reg_t) SyscallEntry::do_sys_vfs_fsync(fd: (fd_t) arg1, data_only: (bool) arg2); |
| 412 | break; |
| 413 | } |
| 414 | case SYSCALL_vfs_rmdir: |
| 415 | { |
| 416 | pr_dinfo2(syscall, "vfs_rmdir(path='%s')" , (const char *) arg1); |
| 417 | ret = (reg_t) SyscallEntry::do_sys_vfs_rmdir(path: (const char *) arg1); |
| 418 | break; |
| 419 | } |
| 420 | } |
| 421 | |
| 422 | pr_dcont(syscall, " = 0x%lx" , ret); |
| 423 | return ret; |
| 424 | } |
| 425 | |