diff --git a/include/arch-loongarch.h b/include/arch-loongarch.h new file mode 100644 index 00000000..20ced62f --- /dev/null +++ b/include/arch-loongarch.h @@ -0,0 +1,16 @@ +#pragma once + +#define KERNEL_ADDR 0x9000000000000000 +#define MODULE_ADDR 0xffff800000000000 +#define PAGE_OFFSET 0x9000000000000000 +#define TASK_SIZE (PAGE_OFFSET) + +#define PAGE_SHIFT 14 +#define PTE_FILE_MAX_BITS 31 + +#define PTRACE_GETREGS 0 +#define PTRACE_GETFPREGS 0 +#define PTRACE_SETREGS 0 +#define PTRACE_SETFPREGS 0 + +#define SYSCALLS syscalls_loongarch diff --git a/include/arch-syscalls.h b/include/arch-syscalls.h index 64cfa102..256bb6bc 100644 --- a/include/arch-syscalls.h +++ b/include/arch-syscalls.h @@ -43,6 +43,9 @@ #ifdef __tile__ #include "syscalls-tile.h" #endif +#ifdef __loongarch__ +#include "syscalls-loongarch.h" +#endif #if defined(__riscv) || defined(__riscv__) #if __riscv_xlen == 64 #include "syscalls-riscv64.h" diff --git a/include/arch.h b/include/arch.h index a4baaab0..9bf83a4b 100644 --- a/include/arch.h +++ b/include/arch.h @@ -54,6 +54,10 @@ #include "arch-tile.h" #endif +#ifdef __loongarch__ +#include "arch-loongarch.h" +#endif + #if defined(__riscv) || defined(__riscv__) #if __riscv_xlen == 64 #include "arch-riscv64.h" diff --git a/include/syscalls-loongarch-64.h b/include/syscalls-loongarch-64.h new file mode 100644 index 00000000..ac3dae27 --- /dev/null +++ b/include/syscalls-loongarch-64.h @@ -0,0 +1,457 @@ +#pragma once + +/* + * (inherits from include/uapi/asm-generic/unistd.h) + */ + +#include "sanitise.h" +#include "syscall.h" +#include "syscalls/syscalls.h" + +struct syscalltable syscalls_loongarch[] = { +/* 0 */ { .entry = &syscall_io_setup }, +/* 1 */ { .entry = &syscall_io_destroy }, +/* 2 */ { .entry = &syscall_io_submit }, +/* 3 */ { .entry = &syscall_io_cancel }, +/* 4 */ { .entry = &syscall_io_getevents }, +/* 5 */ { .entry = &syscall_setxattr }, +/* 6 */ { .entry = &syscall_lsetxattr }, +/* 7 */ { .entry = &syscall_fsetxattr }, +/* 8 */ { .entry = &syscall_getxattr }, +/* 9 */ { .entry = &syscall_lgetxattr }, +/* 10 */ { .entry = &syscall_fgetxattr }, +/* 11 */ { .entry = &syscall_listxattr }, +/* 12 */ { .entry = &syscall_llistxattr }, +/* 13 */ { .entry = &syscall_flistxattr }, +/* 14 */ { .entry = &syscall_removexattr }, +/* 15 */ { .entry = &syscall_lremovexattr }, +/* 16 */ { .entry = &syscall_fremovexattr }, +/* 17 */ { .entry = &syscall_getcwd }, +/* 18 */ { .entry = &syscall_lookup_dcookie }, +/* 19 */ { .entry = &syscall_eventfd2 }, +/* 20 */ { .entry = &syscall_epoll_create1 }, +/* 21 */ { .entry = &syscall_epoll_ctl }, +/* 22 */ { .entry = &syscall_epoll_pwait }, +/* 23 */ { .entry = &syscall_dup }, +/* 24 */ { .entry = &syscall_dup3 }, +/* 25 */ { .entry = &syscall_fcntl }, +/* 26 */ { .entry = &syscall_inotify_init1 }, +/* 27 */ { .entry = &syscall_inotify_add_watch }, +/* 28 */ { .entry = &syscall_inotify_rm_watch }, +/* 29 */ { .entry = &syscall_ioctl }, +/* 30 */ { .entry = &syscall_ioprio_set }, +/* 31 */ { .entry = &syscall_ioprio_get }, +/* 32 */ { .entry = &syscall_flock }, +/* 33 */ { .entry = &syscall_mknodat }, +/* 34 */ { .entry = &syscall_mkdirat }, +/* 35 */ { .entry = &syscall_unlinkat }, +/* 36 */ { .entry = &syscall_symlinkat }, +/* 37 */ { .entry = &syscall_linkat }, +/* 38 */ { .entry = NULL }, +/* 39 */ { .entry = &syscall_umount }, +/* 40 */ { .entry = &syscall_mount }, +/* 41 */ { .entry = &syscall_pivot_root }, +/* 42 */ { .entry = &syscall_ni_syscall }, +/* 43 */ { .entry = &syscall_statfs }, +/* 44 */ { .entry = &syscall_fstatfs }, +/* 45 */ { .entry = &syscall_truncate }, +/* 46 */ { .entry = &syscall_ftruncate }, +/* 47 */ { .entry = &syscall_fallocate }, +/* 48 */ { .entry = &syscall_faccessat }, +/* 49 */ { .entry = &syscall_chdir }, +/* 50 */ { .entry = &syscall_fchdir }, +/* 51 */ { .entry = &syscall_chroot }, +/* 52 */ { .entry = &syscall_fchmod }, +/* 53 */ { .entry = &syscall_fchmodat }, +/* 54 */ { .entry = &syscall_fchownat }, +/* 55 */ { .entry = &syscall_fchown }, +/* 56 */ { .entry = &syscall_openat }, +/* 57 */ { .entry = &syscall_close }, +/* 58 */ { .entry = &syscall_vhangup }, +/* 59 */ { .entry = &syscall_pipe2 }, +/* 60 */ { .entry = &syscall_quotactl }, +/* 61 */ { .entry = &syscall_getdents64 }, +/* 62 */ { .entry = &syscall_lseek }, +/* 63 */ { .entry = &syscall_read }, +/* 64 */ { .entry = &syscall_write }, +/* 65 */ { .entry = &syscall_readv }, +/* 66 */ { .entry = &syscall_writev }, +/* 67 */ { .entry = &syscall_pread64 }, +/* 68 */ { .entry = &syscall_pwrite64 }, +/* 69 */ { .entry = &syscall_preadv }, +/* 70 */ { .entry = &syscall_pwritev }, +/* 71 */ { .entry = &syscall_sendfile64 }, +/* 72 */ { .entry = &syscall_pselect6 }, +/* 73 */ { .entry = &syscall_ppoll }, +/* 74 */ { .entry = &syscall_signalfd4 }, +/* 75 */ { .entry = &syscall_vmsplice }, +/* 76 */ { .entry = &syscall_splice }, +/* 77 */ { .entry = &syscall_tee }, +/* 78 */ { .entry = &syscall_readlinkat }, +/* 79 */ { .entry = NULL }, +/* 80 */ { .entry = NULL }, +/* 81 */ { .entry = &syscall_sync }, +/* 82 */ { .entry = &syscall_fsync }, +/* 83 */ { .entry = &syscall_fdatasync }, +/* 84 */ { .entry = &syscall_sync_file_range }, +/* 85 */ { .entry = &syscall_timerfd_create }, +/* 86 */ { .entry = &syscall_timerfd_settime }, +/* 87 */ { .entry = &syscall_timerfd_gettime }, +/* 88 */ { .entry = &syscall_utimensat }, +/* 89 */ { .entry = &syscall_acct }, +/* 90 */ { .entry = &syscall_capget }, +/* 91 */ { .entry = &syscall_capset }, +/* 92 */ { .entry = &syscall_personality }, +/* 93 */ { .entry = &syscall_exit }, +/* 94 */ { .entry = &syscall_exit_group }, +/* 95 */ { .entry = &syscall_waitid }, +/* 96 */ { .entry = &syscall_set_tid_address }, +/* 97 */ { .entry = &syscall_unshare }, +/* 98 */ { .entry = &syscall_futex }, +/* 99 */ { .entry = &syscall_set_robust_list }, +/* 100 */ { .entry = &syscall_get_robust_list }, +/* 101 */ { .entry = &syscall_nanosleep }, +/* 102 */ { .entry = &syscall_getitimer }, +/* 103 */ { .entry = &syscall_setitimer }, +/* 104 */ { .entry = &syscall_kexec_load }, +/* 105 */ { .entry = &syscall_init_module }, +/* 106 */ { .entry = &syscall_delete_module }, +/* 107 */ { .entry = &syscall_timer_create }, +/* 108 */ { .entry = &syscall_timer_gettime }, +/* 109 */ { .entry = &syscall_timer_getoverrun }, +/* 110 */ { .entry = &syscall_timer_settime }, +/* 111 */ { .entry = &syscall_timer_delete }, +/* 112 */ { .entry = &syscall_clock_settime }, +/* 113 */ { .entry = &syscall_clock_gettime }, +/* 114 */ { .entry = &syscall_clock_getres }, +/* 115 */ { .entry = &syscall_clock_nanosleep }, +/* 116 */ { .entry = &syscall_syslog }, +/* 117 */ { .entry = &syscall_ptrace }, +/* 118 */ { .entry = &syscall_sched_setparam }, +/* 119 */ { .entry = &syscall_sched_setscheduler }, +/* 120 */ { .entry = &syscall_sched_getscheduler }, +/* 121 */ { .entry = &syscall_sched_getparam }, +/* 122 */ { .entry = &syscall_sched_setaffinity }, +/* 123 */ { .entry = &syscall_sched_getaffinity }, +/* 124 */ { .entry = &syscall_sched_yield }, +/* 125 */ { .entry = &syscall_sched_get_priority_max }, +/* 126 */ { .entry = &syscall_sched_get_priority_min }, +/* 127 */ { .entry = &syscall_sched_rr_get_interval }, +/* 128 */ { .entry = &syscall_restart_syscall }, +/* 129 */ { .entry = &syscall_kill }, +/* 130 */ { .entry = &syscall_tkill }, +/* 131 */ { .entry = &syscall_tgkill }, +/* 132 */ { .entry = &syscall_sigaltstack }, +/* 133 */ { .entry = &syscall_rt_sigsuspend }, +/* 134 */ { .entry = &syscall_rt_sigaction }, +/* 135 */ { .entry = &syscall_rt_sigprocmask }, +/* 136 */ { .entry = &syscall_rt_sigpending }, +/* 137 */ { .entry = &syscall_rt_sigtimedwait }, +/* 138 */ { .entry = &syscall_rt_sigqueueinfo }, +/* 139 */ { .entry = &syscall_rt_sigreturn }, +/* 140 */ { .entry = &syscall_setpriority }, +/* 141 */ { .entry = &syscall_getpriority }, +/* 142 */ { .entry = &syscall_reboot }, +/* 143 */ { .entry = &syscall_setregid }, +/* 144 */ { .entry = &syscall_setgid }, +/* 145 */ { .entry = &syscall_setreuid }, +/* 146 */ { .entry = &syscall_setuid }, +/* 147 */ { .entry = &syscall_setresuid }, +/* 148 */ { .entry = &syscall_getresuid }, +/* 149 */ { .entry = &syscall_setresgid }, +/* 150 */ { .entry = &syscall_getresgid }, +/* 151 */ { .entry = &syscall_setfsuid }, +/* 152 */ { .entry = &syscall_setfsgid }, +/* 153 */ { .entry = &syscall_times }, +/* 154 */ { .entry = &syscall_setpgid }, +/* 155 */ { .entry = &syscall_getpgid }, +/* 156 */ { .entry = &syscall_getsid }, +/* 157 */ { .entry = &syscall_setsid }, +/* 158 */ { .entry = &syscall_getgroups }, +/* 159 */ { .entry = &syscall_setgroups }, +/* 160 */ { .entry = &syscall_newuname }, +/* 161 */ { .entry = &syscall_sethostname }, +/* 162 */ { .entry = &syscall_setdomainname }, +/* 163 */ { .entry = NULL }, +/* 164 */ { .entry = NULL }, +/* 165 */ { .entry = &syscall_getrusage }, +/* 166 */ { .entry = &syscall_umask }, +/* 167 */ { .entry = &syscall_prctl }, +/* 168 */ { .entry = &syscall_getcpu }, +/* 169 */ { .entry = &syscall_gettimeofday }, +/* 170 */ { .entry = &syscall_settimeofday }, +/* 171 */ { .entry = &syscall_adjtimex }, +/* 172 */ { .entry = &syscall_getpid }, +/* 173 */ { .entry = &syscall_getppid }, +/* 174 */ { .entry = &syscall_getuid }, +/* 175 */ { .entry = &syscall_geteuid }, +/* 176 */ { .entry = &syscall_getgid }, +/* 177 */ { .entry = &syscall_getegid }, +/* 178 */ { .entry = &syscall_gettid }, +/* 179 */ { .entry = &syscall_sysinfo }, +/* 180 */ { .entry = &syscall_mq_open }, +/* 181 */ { .entry = &syscall_mq_unlink }, +/* 182 */ { .entry = &syscall_mq_timedsend }, +/* 183 */ { .entry = &syscall_mq_timedreceive }, +/* 184 */ { .entry = &syscall_mq_notify }, +/* 185 */ { .entry = &syscall_mq_getsetattr }, +/* 186 */ { .entry = &syscall_msgget }, +/* 187 */ { .entry = &syscall_msgctl }, +/* 188 */ { .entry = &syscall_msgrcv }, +/* 189 */ { .entry = &syscall_msgsnd }, +/* 190 */ { .entry = &syscall_semget }, +/* 191 */ { .entry = &syscall_semctl }, +/* 192 */ { .entry = &syscall_semtimedop }, +/* 193 */ { .entry = &syscall_semop }, +/* 194 */ { .entry = &syscall_shmget }, +/* 195 */ { .entry = &syscall_shmctl }, +/* 196 */ { .entry = &syscall_shmat }, +/* 197 */ { .entry = &syscall_shmdt }, +/* 198 */ { .entry = &syscall_socket }, +/* 199 */ { .entry = &syscall_socketpair }, +/* 200 */ { .entry = &syscall_bind }, +/* 201 */ { .entry = &syscall_listen }, +/* 202 */ { .entry = &syscall_accept }, +/* 203 */ { .entry = &syscall_connect }, +/* 204 */ { .entry = &syscall_getsockname }, +/* 205 */ { .entry = &syscall_getpeername }, +/* 206 */ { .entry = &syscall_sendto }, +/* 207 */ { .entry = &syscall_recvfrom }, +/* 208 */ { .entry = &syscall_setsockopt }, +/* 209 */ { .entry = &syscall_getsockopt }, +/* 210 */ { .entry = &syscall_shutdown }, +/* 211 */ { .entry = &syscall_sendmsg }, +/* 212 */ { .entry = &syscall_recvmsg }, +/* 213 */ { .entry = &syscall_readahead }, +/* 214 */ { .entry = &syscall_brk }, +/* 215 */ { .entry = &syscall_munmap }, +/* 216 */ { .entry = &syscall_mremap }, +/* 217 */ { .entry = &syscall_add_key }, +/* 218 */ { .entry = &syscall_request_key }, +/* 219 */ { .entry = &syscall_keyctl }, +/* 220 */ { .entry = &syscall_clone }, +/* 221 */ { .entry = &syscall_execve }, +/* 222 */ { .entry = &syscall_mmap }, +/* 223 */ { .entry = &syscall_fadvise64_64 }, +/* 224 */ { .entry = &syscall_swapon }, +/* 225 */ { .entry = &syscall_swapoff }, +/* 226 */ { .entry = &syscall_mprotect }, +/* 227 */ { .entry = &syscall_msync }, +/* 228 */ { .entry = &syscall_mlock }, +/* 229 */ { .entry = &syscall_munlock }, +/* 230 */ { .entry = &syscall_mlockall }, +/* 231 */ { .entry = &syscall_munlockall }, +/* 232 */ { .entry = &syscall_mincore }, +/* 233 */ { .entry = &syscall_madvise }, +/* 234 */ { .entry = &syscall_remap_file_pages }, +/* 235 */ { .entry = &syscall_mbind }, +/* 236 */ { .entry = &syscall_get_mempolicy }, +/* 237 */ { .entry = &syscall_set_mempolicy }, +/* 238 */ { .entry = &syscall_migrate_pages }, +/* 239 */ { .entry = &syscall_move_pages }, +/* 240 */ { .entry = &syscall_rt_tgsigqueueinfo }, +/* 241 */ { .entry = &syscall_perf_event_open }, +/* 242 */ { .entry = &syscall_accept4 }, +/* 243 */ { .entry = &syscall_recvmmsg }, +/* 244 */ { .entry = &syscall_ni_syscall }, +/* 245 */ { .entry = &syscall_ni_syscall }, +/* 246 */ { .entry = &syscall_ni_syscall }, +/* 247 */ { .entry = &syscall_ni_syscall }, +/* 248 */ { .entry = &syscall_ni_syscall }, +/* 249 */ { .entry = &syscall_ni_syscall }, +/* 250 */ { .entry = &syscall_ni_syscall }, +/* 251 */ { .entry = &syscall_ni_syscall }, +/* 252 */ { .entry = &syscall_ni_syscall }, +/* 253 */ { .entry = &syscall_ni_syscall }, +/* 254 */ { .entry = &syscall_ni_syscall }, +/* 255 */ { .entry = &syscall_ni_syscall }, +/* 256 */ { .entry = &syscall_ni_syscall }, +/* 257 */ { .entry = &syscall_ni_syscall }, +/* 258 */ { .entry = &syscall_ni_syscall }, +/* 259 */ { .entry = &syscall_ni_syscall }, +/* 260 */ { .entry = &syscall_wait4 }, +/* 261 */ { .entry = &syscall_prlimit64 }, +/* 262 */ { .entry = &syscall_fanotify_init }, +/* 263 */ { .entry = &syscall_fanotify_mark }, +/* 264 */ { .entry = &syscall_name_to_handle_at }, +/* 265 */ { .entry = &syscall_open_by_handle_at }, +/* 266 */ { .entry = &syscall_clock_adjtime }, +/* 267 */ { .entry = &syscall_syncfs }, +/* 268 */ { .entry = &syscall_setns }, +/* 269 */ { .entry = &syscall_sendmmsg }, +/* 270 */ { .entry = &syscall_process_vm_readv }, +/* 271 */ { .entry = &syscall_process_vm_writev }, +/* 272 */ { .entry = &syscall_kcmp }, +/* 273 */ { .entry = &syscall_finit_module }, +/* 274 */ { .entry = &syscall_sched_setattr }, +/* 275 */ { .entry = &syscall_sched_getattr }, +/* 276 */ { .entry = &syscall_renameat2 }, +/* 277 */ { .entry = &syscall_seccomp }, +/* 278 */ { .entry = &syscall_getrandom }, +/* 279 */ { .entry = &syscall_memfd_create }, +#ifdef USE_BPF +/* 280 */ { .entry = &syscall_bpf }, +#else + { .entry = NULL }, +#endif +/* 281 */ { .entry = &syscall_execveat }, +/* 282 */ { .entry = &syscall_userfaultfd }, +/* 283 */ { .entry = &syscall_membarrier }, +/* 284 */ { .entry = &syscall_mlock2 }, +/* 285 */ { .entry = &syscall_copy_file_range }, +/* 286 */ { .entry = &syscall_preadv2 }, +/* 287 */ { .entry = &syscall_pwritev2 }, +/* 288 */ { .entry = &syscall_pkey_mprotect }, +/* 289 */ { .entry = &syscall_pkey_alloc }, +/* 290 */ { .entry = &syscall_pkey_free }, +/* 291 */ { .entry = &syscall_statx }, +/* 292 */ { .entry = &syscall_io_pgetevents }, +/* 293 */ { .entry = &syscall_rseq }, +/* 294 */ { .entry = &syscall_kexec_file_load }, +/* 295 */ { .entry = NULL }, +/* 296 */ { .entry = NULL }, +/* 297 */ { .entry = NULL }, +/* 298 */ { .entry = NULL }, +/* 299 */ { .entry = NULL }, +/* 300 */ { .entry = NULL }, +/* 301 */ { .entry = NULL }, +/* 302 */ { .entry = NULL }, +/* 303 */ { .entry = NULL }, +/* 304 */ { .entry = NULL }, +/* 305 */ { .entry = NULL }, +/* 306 */ { .entry = NULL }, +/* 307 */ { .entry = NULL }, +/* 308 */ { .entry = NULL }, +/* 309 */ { .entry = NULL }, +/* 310 */ { .entry = NULL }, +/* 311 */ { .entry = NULL }, +/* 312 */ { .entry = NULL }, +/* 313 */ { .entry = NULL }, +/* 314 */ { .entry = NULL }, +/* 315 */ { .entry = NULL }, +/* 316 */ { .entry = NULL }, +/* 317 */ { .entry = NULL }, +/* 318 */ { .entry = NULL }, +/* 319 */ { .entry = NULL }, +/* 320 */ { .entry = NULL }, +/* 321 */ { .entry = NULL }, +/* 322 */ { .entry = NULL }, +/* 323 */ { .entry = NULL }, +/* 324 */ { .entry = NULL }, +/* 325 */ { .entry = NULL }, +/* 326 */ { .entry = NULL }, +/* 327 */ { .entry = NULL }, +/* 328 */ { .entry = NULL }, +/* 329 */ { .entry = NULL }, +/* 330 */ { .entry = NULL }, +/* 331 */ { .entry = NULL }, +/* 332 */ { .entry = NULL }, +/* 333 */ { .entry = NULL }, +/* 334 */ { .entry = NULL }, +/* 335 */ { .entry = NULL }, +/* 336 */ { .entry = NULL }, +/* 337 */ { .entry = NULL }, +/* 338 */ { .entry = NULL }, +/* 339 */ { .entry = NULL }, +/* 340 */ { .entry = NULL }, +/* 341 */ { .entry = NULL }, +/* 342 */ { .entry = NULL }, +/* 343 */ { .entry = NULL }, +/* 344 */ { .entry = NULL }, +/* 345 */ { .entry = NULL }, +/* 346 */ { .entry = NULL }, +/* 347 */ { .entry = NULL }, +/* 348 */ { .entry = NULL }, +/* 349 */ { .entry = NULL }, +/* 350 */ { .entry = NULL }, +/* 351 */ { .entry = NULL }, +/* 352 */ { .entry = NULL }, +/* 353 */ { .entry = NULL }, +/* 354 */ { .entry = NULL }, +/* 355 */ { .entry = NULL }, +/* 356 */ { .entry = NULL }, +/* 357 */ { .entry = NULL }, +/* 358 */ { .entry = NULL }, +/* 359 */ { .entry = NULL }, +/* 360 */ { .entry = NULL }, +/* 361 */ { .entry = NULL }, +/* 362 */ { .entry = NULL }, +/* 363 */ { .entry = NULL }, +/* 364 */ { .entry = NULL }, +/* 365 */ { .entry = NULL }, +/* 366 */ { .entry = NULL }, +/* 367 */ { .entry = NULL }, +/* 368 */ { .entry = NULL }, +/* 369 */ { .entry = NULL }, +/* 370 */ { .entry = NULL }, +/* 371 */ { .entry = NULL }, +/* 372 */ { .entry = NULL }, +/* 373 */ { .entry = NULL }, +/* 374 */ { .entry = NULL }, +/* 375 */ { .entry = NULL }, +/* 376 */ { .entry = NULL }, +/* 377 */ { .entry = NULL }, +/* 378 */ { .entry = NULL }, +/* 379 */ { .entry = NULL }, +/* 380 */ { .entry = NULL }, +/* 381 */ { .entry = NULL }, +/* 382 */ { .entry = NULL }, +/* 383 */ { .entry = NULL }, +/* 384 */ { .entry = NULL }, +/* 385 */ { .entry = NULL }, +/* 386 */ { .entry = NULL }, +/* 387 */ { .entry = NULL }, +/* 388 */ { .entry = NULL }, +/* 389 */ { .entry = NULL }, +/* 390 */ { .entry = NULL }, +/* 391 */ { .entry = NULL }, +/* 392 */ { .entry = NULL }, +/* 393 */ { .entry = NULL }, +/* 394 */ { .entry = NULL }, +/* 395 */ { .entry = NULL }, +/* 396 */ { .entry = NULL }, +/* 397 */ { .entry = NULL }, +/* 398 */ { .entry = NULL }, +/* 399 */ { .entry = NULL }, +/* 400 */ { .entry = NULL }, +/* 401 */ { .entry = NULL }, +/* 402 */ { .entry = NULL }, +/* 403 */ { .entry = NULL }, +/* 404 */ { .entry = NULL }, +/* 405 */ { .entry = NULL }, +/* 406 */ { .entry = NULL }, +/* 407 */ { .entry = NULL }, +/* 408 */ { .entry = NULL }, +/* 409 */ { .entry = NULL }, +/* 410 */ { .entry = NULL }, +/* 411 */ { .entry = NULL }, +/* 412 */ { .entry = NULL }, +/* 413 */ { .entry = NULL }, +/* 414 */ { .entry = NULL }, +/* 415 */ { .entry = NULL }, +/* 416 */ { .entry = NULL }, +/* 417 */ { .entry = NULL }, +/* 418 */ { .entry = NULL }, +/* 419 */ { .entry = NULL }, +/* 420 */ { .entry = NULL }, +/* 421 */ { .entry = NULL }, +/* 422 */ { .entry = NULL }, +/* 423 */ { .entry = NULL }, +/* 424 */ { .entry = &syscall_pidfd_send_signal }, +/* 425 */ { .entry = &syscall_io_uring_setup }, +/* 426 */ { .entry = &syscall_io_uring_enter }, +/* 427 */ { .entry = &syscall_io_uring_register }, +/* 428 */ { .entry = &syscall_open_tree }, +/* 429 */ { .entry = &syscall_move_mount }, +/* 430 */ { .entry = &syscall_fsopen }, +/* 431 */ { .entry = &syscall_fsconfig }, +/* 432 */ { .entry = &syscall_fsmount }, +/* 433 */ { .entry = &syscall_fspick }, +/* 434 */ { .entry = &syscall_pidfd_open }, +/* 435 */ { .entry = &syscall_clone3 }, +/* 436 */ { .entry = &syscall_close_range }, +/* 437 */ { .entry = &syscall_openat2 }, +/* 438 */ { .entry = &syscall_pidfd_getfd }, +/* 439 */ { .entry = &syscall_faccessat2 }, +/* 440 */ { .entry = &syscall_process_madvise }, +}; diff --git a/include/syscalls-loongarch.h b/include/syscalls-loongarch.h new file mode 100644 index 00000000..e91eed8d --- /dev/null +++ b/include/syscalls-loongarch.h @@ -0,0 +1,4 @@ +#include "syscall.h" +#include "syscalls/syscalls.h" + +#include "syscalls-loongarch-64.h" diff --git a/ioctls/autofs.c b/ioctls/autofs.c index 03eacaae..dafcbe89 100644 --- a/ioctls/autofs.c +++ b/ioctls/autofs.c @@ -294,6 +294,7 @@ static void autofs_sanitise(const struct ioctl_group *grp, struct syscallrecord case AUTOFS_DEV_IOCTL_EXPIRE: case AUTOFS_DEV_IOCTL_ASKUMOUNT: case AUTOFS_DEV_IOCTL_ISMOUNTPOINT: + rec->a3 = (unsigned long) get_writable_address(sizeof(struct autofs_dev_ioctl)); arg = (struct autofs_dev_ioctl *) rec->a3; init_autofs_dev_ioctl(arg); arg->ioctlfd = get_random_fd(); diff --git a/ioctls/scsi.c b/ioctls/scsi.c index e20c7149..e3349ddc 100644 --- a/ioctls/scsi.c +++ b/ioctls/scsi.c @@ -80,7 +80,7 @@ static void scsi_sg_io_sanitise(struct syscallrecord *rec) { struct sgio *sgio; - sgio = (struct sgio *) get_address(); + sgio = (struct sgio *) get_writable_address(sizeof(struct sgio)); sgio->cmd[0] = 0x12; sgio->cmd[3] = 0x2; diff --git a/syscalls/vmsplice.c b/syscalls/vmsplice.c index 14706992..2d8a865f 100644 --- a/syscalls/vmsplice.c +++ b/syscalls/vmsplice.c @@ -17,8 +17,6 @@ static void sanitise_vmsplice(struct syscallrecord *rec) { if ((rnd() % 10) > 0) rec->a1 = get_rand_pipe_fd(); - - rec->a3 = rnd() % UIO_MAXIOV; } static unsigned long vmsplice_flags[] = { diff --git a/sysv-shm.c b/sysv-shm.c index 57bc56c9..98e0d7f3 100644 --- a/sysv-shm.c +++ b/sysv-shm.c @@ -48,7 +48,7 @@ void create_sysv_shms(void) size = page_size * (1 + rnd() % 10); - id = shmget(IPC_PRIVATE, page_size, flags); + id = shmget(IPC_PRIVATE, size, flags); if (id == -1) { free(obj); continue; @@ -57,10 +57,9 @@ void create_sysv_shms(void) obj->sysv_shm.flags = flags; obj->sysv_shm.size = size; - add_object(obj, OBJ_GLOBAL, OBJ_SYSV_SHM); - p = shmat(id, NULL, 0); // TODO: Try alternative flags. if (p != (void *) -1) obj->sysv_shm.ptr = p; + add_object(obj, OBJ_GLOBAL, OBJ_SYSV_SHM); } }