| 15 | } // namespace |
| 16 | |
| 17 | auto syscall_dispatcher(int64_t syscall_id, uint64_t args[6]) -> int { |
| 18 | int64_t ret = 0; |
| 19 | switch (syscall_id) { |
| 20 | case kSyscallWrite: |
| 21 | ret = sys_write(static_cast<int>(args[0]), |
| 22 | reinterpret_cast<const char*>(args[1]), |
| 23 | static_cast<size_t>(args[2])); |
| 24 | break; |
| 25 | case kSyscallExit: |
| 26 | ret = sys_exit(static_cast<int>(args[0])); |
| 27 | break; |
| 28 | case kSyscallYield: |
| 29 | ret = sys_yield(); |
| 30 | break; |
| 31 | case kSyscallClone: |
| 32 | ret = sys_clone(args[0], reinterpret_cast<void*>(args[1]), |
| 33 | reinterpret_cast<int*>(args[2]), |
| 34 | reinterpret_cast<int*>(args[3]), |
| 35 | reinterpret_cast<void*>(args[4])); |
| 36 | break; |
| 37 | case kSyscallFork: |
| 38 | ret = sys_fork(); |
| 39 | break; |
| 40 | case kSyscallGettid: |
| 41 | ret = sys_gettid(); |
| 42 | break; |
| 43 | case kSyscallSetTidAddress: |
| 44 | ret = sys_set_tid_address(reinterpret_cast<int*>(args[0])); |
| 45 | break; |
| 46 | case kSyscallFutex: |
| 47 | ret = sys_futex( |
| 48 | reinterpret_cast<int*>(args[0]), static_cast<int>(args[1]), |
| 49 | static_cast<int>(args[2]), reinterpret_cast<const void*>(args[3]), |
| 50 | reinterpret_cast<int*>(args[4]), static_cast<int>(args[5])); |
| 51 | break; |
| 52 | case kSyscallSleep: |
| 53 | ret = sys_sleep(args[0]); |
| 54 | break; |
| 55 | case kSyscallKill: |
| 56 | ret = sys_kill(static_cast<int>(args[0]), static_cast<int>(args[1])); |
| 57 | break; |
| 58 | case kSyscallSigaction: |
| 59 | ret = sys_sigaction(static_cast<int>(args[0]), |
| 60 | reinterpret_cast<SignalHandler>(args[1])); |
| 61 | break; |
| 62 | case kSyscallSigprocmask: |
| 63 | ret = sys_sigprocmask(static_cast<int>(args[0]), |
| 64 | static_cast<uint32_t>(args[1]), |
| 65 | reinterpret_cast<uint32_t*>(args[2])); |
| 66 | break; |
| 67 | case kSyscallSchedGetaffinity: |
| 68 | ret = sys_sched_getaffinity(static_cast<int>(args[0]), |
| 69 | static_cast<size_t>(args[1]), |
| 70 | reinterpret_cast<uint64_t*>(args[2])); |
| 71 | break; |
| 72 | case kSyscallSchedSetaffinity: |
| 73 | ret = sys_sched_setaffinity(static_cast<int>(args[0]), |
| 74 | static_cast<size_t>(args[1]), |
no test coverage detected