1/* 2 * Copyright 2016, Data61 3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO) 4 * ABN 41 687 119 230. 5 * 6 * This software may be distributed and modified according to the terms of 7 * the BSD 2-Clause license. Note that NO WARRANTY is provided. 8 * See "LICENSE_BSD2.txt" for details. 9 * 10 * @TAG(D61_BSD) 11 */ 12 13#include <bits/syscall.h> 14#include <syscall.h> 15#include <stdio.h> 16#include <stdlib.h> 17#include <assert.h> 18#include <sel4/sel4.h> 19#include <refos-util/init.h> 20#include <refos-util/cspace.h> 21#include <refos-util/walloc.h> 22#include <refos-util/dprintf.h> 23#include <refos/refos.h> 24#include <refos/vmlayout.h> 25#include <autoconf.h> 26#include "stdio_copy.h" 27 28/*! @file 29 @brief RefOS client environment initialisation helper functions. */ 30 31/* Forward declarations to avoid spectacular circular library dependency header soup. */ 32extern void refosio_init_morecore(struct sl_procinfo_s *procInfo); 33extern void refos_init_timer(char *dspacePath); 34extern void filetable_init_default(void); 35 36/* Static buffer for the cspace allocator, to avoid malloc() circular dependency disaster. */ 37#define REFOS_UTIL_CSPACE_STATIC_SIZE 0x8000 38static char _refosUtilCSpaceStatic[REFOS_UTIL_CSPACE_STATIC_SIZE]; 39static char *_refosEnv[1]; 40extern char **__environ; /*! < POSIX standard, from MUSLC lib. */ 41 42/* Provide default weak links to dprintf. */ 43const char* dprintfServerName __attribute__((weak)) = "????????"; 44int dprintfServerColour __attribute__((weak)) = 33; 45 46/* Future Work 3: 47 How the selfloader bootstraps user processes needs to be modified further. Changes were 48 made to accomodate the new way that muslc expects process's stacks to be set up when 49 processes start, but the one part of this that still needs to changed is how user processes 50 find their system call table. Currently the selfloader sets up user processes so that 51 the selfloader's system call table is used by user processes by passing the address of the 52 selfloader's system call table to the user processes via the user process's environment 53 variables. Ideally, user processes would use their own system call table. 54*/ 55 56typedef long (*syscall_t)(va_list); 57 58long sys_restart_syscall(va_list ap); 59long sys_exit(va_list ap); 60long sys_fork(va_list ap); 61long sys_read(va_list ap); 62long sys_write(va_list ap); 63long sys_open(va_list ap); 64long sys_close(va_list ap); 65long sys_creat(va_list ap); 66long sys_link(va_list ap); 67long sys_unlink(va_list ap); 68long sys_execve(va_list ap); 69long sys_chdir(va_list ap); 70long sys_mknod(va_list ap); 71long sys_chmod(va_list ap); 72long sys_lchown(va_list ap); 73long sys_lseek(va_list ap); 74long sys_getpid(va_list ap); 75long sys_mount(va_list ap); 76long sys_setuid(va_list ap); 77long sys_getuid(va_list ap); 78long sys_ptrace(va_list ap); 79long sys_pause(va_list ap); 80long sys_access(va_list ap); 81long sys_nice(va_list ap); 82long sys_sync(va_list ap); 83long sys_kill(va_list ap); 84long sys_rename(va_list ap); 85long sys_mkdir(va_list ap); 86long sys_rmdir(va_list ap); 87long sys_dup(va_list ap); 88long sys_pipe(va_list ap); 89long sys_times(va_list ap); 90long sys_brk(va_list ap); 91long sys_setgid(va_list ap); 92long sys_getgid(va_list ap); 93long sys_geteuid(va_list ap); 94long sys_getegid(va_list ap); 95long sys_acct(va_list ap); 96long sys_umount2(va_list ap); 97long sys_ioctl(va_list ap); 98long sys_fcntl(va_list ap); 99long sys_setpgid(va_list ap); 100long sys_umask(va_list ap); 101long sys_chroot(va_list ap); 102long sys_ustat(va_list ap); 103long sys_dup2(va_list ap); 104long sys_getppid(va_list ap); 105long sys_getpgrp(va_list ap); 106long sys_setsid(va_list ap); 107long sys_sigaction(va_list ap); 108long sys_setreuid(va_list ap); 109long sys_setregid(va_list ap); 110long sys_sigsuspend(va_list ap); 111long sys_sigpending(va_list ap); 112long sys_sethostname(va_list ap); 113long sys_setrlimit(va_list ap); 114long sys_getrusage(va_list ap); 115long sys_gettimeofday(va_list ap); 116long sys_settimeofday(va_list ap); 117long sys_getgroups(va_list ap); 118long sys_setgroups(va_list ap); 119long sys_symlink(va_list ap); 120long sys_readlink(va_list ap); 121long sys_uselib(va_list ap); 122long sys_swapon(va_list ap); 123long sys_reboot(va_list ap); 124long sys_munmap(va_list ap); 125long sys_truncate(va_list ap); 126long sys_ftruncate(va_list ap); 127long sys_fchmod(va_list ap); 128long sys_fchown(va_list ap); 129long sys_getpriority(va_list ap); 130long sys_setpriority(va_list ap); 131long sys_statfs(va_list ap); 132long sys_fstatfs(va_list ap); 133long sys_syslog(va_list ap); 134long sys_setitimer(va_list ap); 135long sys_getitimer(va_list ap); 136long sys_stat(va_list ap); 137long sys_lstat(va_list ap); 138long sys_fstat(va_list ap); 139long sys_vhangup(va_list ap); 140long sys_wait4(va_list ap); 141long sys_swapoff(va_list ap); 142long sys_sysinfo(va_list ap); 143long sys_fsync(va_list ap); 144long sys_sigreturn(va_list ap); 145long sys_clone(va_list ap); 146long sys_setdomainname(va_list ap); 147long sys_uname(va_list ap); 148long sys_adjtimex(va_list ap); 149long sys_mprotect(va_list ap); 150long sys_sigprocmask(va_list ap); 151long sys_init_module(va_list ap); 152long sys_delete_module(va_list ap); 153long sys_quotactl(va_list ap); 154long sys_getpgid(va_list ap); 155long sys_fchdir(va_list ap); 156long sys_bdflush(va_list ap); 157long sys_sysfs(va_list ap); 158long sys_personality(va_list ap); 159long sys_setfsuid(va_list ap); 160long sys_setfsgid(va_list ap); 161long sys_getdents(va_list ap); 162long sys__newselect(va_list ap); 163long sys_flock(va_list ap); 164long sys_msync(va_list ap); 165long sys_readv(va_list ap); 166long sys_writev(va_list ap); 167long sys_getsid(va_list ap); 168long sys_fdatasync(va_list ap); 169long sys__sysctl(va_list ap); 170long sys_mlock(va_list ap); 171long sys_munlock(va_list ap); 172long sys_mlockall(va_list ap); 173long sys_munlockall(va_list ap); 174long sys_sched_setparam(va_list ap); 175long sys_sched_getparam(va_list ap); 176long sys_sched_setscheduler(va_list ap); 177long sys_sched_getscheduler(va_list ap); 178long sys_sched_yield(va_list ap); 179long sys_sched_get_priority_max(va_list ap); 180long sys_sched_get_priority_min(va_list ap); 181long sys_sched_rr_get_interval(va_list ap); 182long sys_nanosleep(va_list ap); 183long sys_mremap(va_list ap); 184long sys_setresuid(va_list ap); 185long sys_getresuid(va_list ap); 186long sys_poll(va_list ap); 187long sys_nfsservctl(va_list ap); 188long sys_setresgid(va_list ap); 189long sys_getresgid(va_list ap); 190long sys_prctl(va_list ap); 191long sys_rt_sigreturn(va_list ap); 192long sys_rt_sigaction(va_list ap); 193long sys_rt_sigprocmask(va_list ap); 194long sys_rt_sigpending(va_list ap); 195long sys_rt_sigtimedwait(va_list ap); 196long sys_rt_sigqueueinfo(va_list ap); 197long sys_rt_sigsuspend(va_list ap); 198long sys_pread64(va_list ap); 199long sys_pwrite64(va_list ap); 200long sys_chown(va_list ap); 201long sys_getcwd(va_list ap); 202long sys_capget(va_list ap); 203long sys_capset(va_list ap); 204long sys_sigaltstack(va_list ap); 205long sys_sendfile(va_list ap); 206long sys_vfork(va_list ap); 207long sys_ugetrlimit(va_list ap); 208long sys_mmap2(va_list ap); 209long sys_truncate64(va_list ap); 210long sys_ftruncate64(va_list ap); 211long sys_stat64(va_list ap); 212long sys_lstat64(va_list ap); 213long sys_fstat64(va_list ap); 214long sys_lchown32(va_list ap); 215long sys_getuid32(va_list ap); 216long sys_getgid32(va_list ap); 217long sys_geteuid32(va_list ap); 218long sys_getegid32(va_list ap); 219long sys_setreuid32(va_list ap); 220long sys_setregid32(va_list ap); 221long sys_getgroups32(va_list ap); 222long sys_setgroups32(va_list ap); 223long sys_fchown32(va_list ap); 224long sys_setresuid32(va_list ap); 225long sys_getresuid32(va_list ap); 226long sys_setresgid32(va_list ap); 227long sys_getresgid32(va_list ap); 228long sys_chown32(va_list ap); 229long sys_setuid32(va_list ap); 230long sys_setgid32(va_list ap); 231long sys_setfsuid32(va_list ap); 232long sys_setfsgid32(va_list ap); 233long sys_getdents64(va_list ap); 234long sys_pivot_root(va_list ap); 235long sys_mincore(va_list ap); 236long sys_madvise(va_list ap); 237long sys_fcntl64(va_list ap); 238long sys_gettid(va_list ap); 239long sys_readahead(va_list ap); 240long sys_setxattr(va_list ap); 241long sys_lsetxattr(va_list ap); 242long sys_fsetxattr(va_list ap); 243long sys_getxattr(va_list ap); 244long sys_lgetxattr(va_list ap); 245long sys_fgetxattr(va_list ap); 246long sys_listxattr(va_list ap); 247long sys_llistxattr(va_list ap); 248long sys_flistxattr(va_list ap); 249long sys_removexattr(va_list ap); 250long sys_lremovexattr(va_list ap); 251long sys_fremovexattr(va_list ap); 252long sys_tkill(va_list ap); 253long sys_sendfile64(va_list ap); 254long sys_futex(va_list ap); 255long sys_sched_setaffinity(va_list ap); 256long sys_sched_getaffinity(va_list ap); 257long sys_io_setup(va_list ap); 258long sys_io_destroy(va_list ap); 259long sys_io_getevents(va_list ap); 260long sys_io_submit(va_list ap); 261long sys_io_cancel(va_list ap); 262long sys_exit_group(va_list ap); 263long sys_lookup_dcookie(va_list ap); 264long sys_epoll_create(va_list ap); 265long sys_epoll_ctl(va_list ap); 266long sys_epoll_wait(va_list ap); 267long sys_remap_file_pages(va_list ap); 268long sys_set_tid_address(va_list ap); 269long sys_timer_create(va_list ap); 270long sys_timer_settime(va_list ap); 271long sys_timer_gettime(va_list ap); 272long sys_timer_getoverrun(va_list ap); 273long sys_timer_delete(va_list ap); 274long sys_clock_settime(va_list ap); 275long sys_clock_gettime(va_list ap); 276long sys_clock_getres(va_list ap); 277long sys_clock_nanosleep(va_list ap); 278long sys_statfs64(va_list ap); 279long sys_fstatfs64(va_list ap); 280long sys_tgkill(va_list ap); 281long sys_utimes(va_list ap); 282long sys_fadvise64_64(va_list ap); 283long sys_mq_open(va_list ap); 284long sys_mq_unlink(va_list ap); 285long sys_mq_timedsend(va_list ap); 286long sys_mq_timedreceive(va_list ap); 287long sys_mq_notify(va_list ap); 288long sys_mq_getsetattr(va_list ap); 289long sys_waitid(va_list ap); 290long sys_add_key(va_list ap); 291long sys_request_key(va_list ap); 292long sys_keyctl(va_list ap); 293long sys_vserver(va_list ap); 294long sys_ioprio_set(va_list ap); 295long sys_ioprio_get(va_list ap); 296long sys_inotify_init(va_list ap); 297long sys_inotify_add_watch(va_list ap); 298long sys_inotify_rm_watch(va_list ap); 299long sys_mbind(va_list ap); 300long sys_get_mempolicy(va_list ap); 301long sys_set_mempolicy(va_list ap); 302long sys_openat(va_list ap); 303long sys_mkdirat(va_list ap); 304long sys_mknodat(va_list ap); 305long sys_fchownat(va_list ap); 306long sys_futimesat(va_list ap); 307long sys_fstatat64(va_list ap); 308long sys_unlinkat(va_list ap); 309long sys_renameat(va_list ap); 310long sys_linkat(va_list ap); 311long sys_symlinkat(va_list ap); 312long sys_readlinkat(va_list ap); 313long sys_fchmodat(va_list ap); 314long sys_faccessat(va_list ap); 315long sys_pselect6(va_list ap); 316long sys_ppoll(va_list ap); 317long sys_unshare(va_list ap); 318long sys_set_robust_list(va_list ap); 319long sys_get_robust_list(va_list ap); 320long sys_splice(va_list ap); 321long sys_tee(va_list ap); 322long sys_vmsplice(va_list ap); 323long sys_move_pages(va_list ap); 324long sys_getcpu(va_list ap); 325long sys_epoll_pwait(va_list ap); 326long sys_kexec_load(va_list ap); 327long sys_utimensat(va_list ap); 328long sys_signalfd(va_list ap); 329long sys_timerfd_create(va_list ap); 330long sys_eventfd(va_list ap); 331long sys_fallocate(va_list ap); 332long sys_timerfd_settime(va_list ap); 333long sys_timerfd_gettime(va_list ap); 334long sys_signalfd4(va_list ap); 335long sys_eventfd2(va_list ap); 336long sys_epoll_create1(va_list ap); 337long sys_dup3(va_list ap); 338long sys_pipe2(va_list ap); 339long sys_inotify_init1(va_list ap); 340long sys_preadv(va_list ap); 341long sys_pwritev(va_list ap); 342long sys_prlimit64(va_list ap); 343long sys_name_to_handle_at(va_list ap); 344long sys_open_by_handle_at(va_list ap); 345long sys_clock_adjtime(va_list ap); 346long sys_syncfs(va_list ap); 347long sys_sendmmsg(va_list ap); 348long sys_setns(va_list ap); 349long sys_process_vm_readv(va_list ap); 350long sys_process_vm_writev(va_list ap); 351#ifdef CONFIG_ARCH_ARM 352long sys_pciconfig_iobase(va_list ap); 353long sys_pciconfig_read(va_list ap); 354long sys_pciconfig_write(va_list ap); 355long sys_socket(va_list ap); 356long sys_bind(va_list ap); 357long sys_connect(va_list ap); 358long sys_listen(va_list ap); 359long sys_accept(va_list ap); 360long sys_getsockname(va_list ap); 361long sys_getpeername(va_list ap); 362long sys_socketpair(va_list ap); 363long sys_send(va_list ap); 364long sys_sendto(va_list ap); 365long sys_recv(va_list ap); 366long sys_recvfrom(va_list ap); 367long sys_shutdown(va_list ap); 368long sys_setsockopt(va_list ap); 369long sys_getsockopt(va_list ap); 370long sys_sendmsg(va_list ap); 371long sys_recvmsg(va_list ap); 372long sys_semop(va_list ap); 373long sys_semget(va_list ap); 374long sys_semctl(va_list ap); 375long sys_msgsnd(va_list ap); 376long sys_msgrcv(va_list ap); 377long sys_msgget(va_list ap); 378long sys_msgctl(va_list ap); 379long sys_shmat(va_list ap); 380long sys_shmdt(va_list ap); 381long sys_shmget(va_list ap); 382long sys_shmctl(va_list ap); 383long sys_semtimedop(va_list ap); 384long sys_sync_file_range2(va_list ap); 385long sys_accept4(va_list ap); 386long sys_rt_tgsigqueueinfo(va_list ap); 387long sys_perf_event_open(va_list ap); 388long sys_recvmmsg(va_list ap); 389long sys_fanotify_init(va_list ap); 390long sys_fanotify_mark(va_list ap); 391#endif /* CONFIG_ARCH_ARM */ 392 393void 394refos_init_selfload_child(uintptr_t parent_syscall_table_address) 395{ 396 /* Point the selfloaded process to the parent's system call table. */ 397 syscall_t *syscall_table = (syscall_t *) parent_syscall_table_address; 398 399 syscall_table[__NR_restart_syscall] = sys_restart_syscall; 400 syscall_table[__NR_exit] = sys_exit; 401 syscall_table[__NR_fork] = sys_fork; 402 syscall_table[__NR_read] = sys_read; 403 syscall_table[__NR_write] = sys_write; 404 syscall_table[__NR_open] = sys_open; 405 syscall_table[__NR_close] = sys_close; 406 syscall_table[__NR_creat] = sys_creat; 407 syscall_table[__NR_link] = sys_link; 408 syscall_table[__NR_unlink] = sys_unlink; 409 syscall_table[__NR_execve] = sys_execve; 410 syscall_table[__NR_chdir] = sys_chdir; 411 syscall_table[__NR_mknod] = sys_mknod; 412 syscall_table[__NR_chmod] = sys_chmod; 413 syscall_table[__NR_lchown] = sys_lchown; 414 syscall_table[__NR_lseek] = sys_lseek; 415 syscall_table[__NR_getpid] = sys_getpid; 416 syscall_table[__NR_mount] = sys_mount; 417 syscall_table[__NR_setuid] = sys_setuid; 418 syscall_table[__NR_getuid] = sys_getuid; 419 syscall_table[__NR_ptrace] = sys_ptrace; 420 syscall_table[__NR_pause] = sys_pause; 421 syscall_table[__NR_access] = sys_access; 422 syscall_table[__NR_nice] = sys_nice; 423 syscall_table[__NR_sync] = sys_sync; 424 syscall_table[__NR_kill] = sys_kill; 425 syscall_table[__NR_rename] = sys_rename; 426 syscall_table[__NR_mkdir] = sys_mkdir; 427 syscall_table[__NR_rmdir] = sys_rmdir; 428 syscall_table[__NR_dup] = sys_dup; 429 syscall_table[__NR_pipe] = sys_pipe; 430 syscall_table[__NR_times] = sys_times; 431 syscall_table[__NR_brk] = sys_brk; 432 syscall_table[__NR_setgid] = sys_setgid; 433 syscall_table[__NR_getgid] = sys_getgid; 434 syscall_table[__NR_geteuid] = sys_geteuid; 435 syscall_table[__NR_getegid] = sys_getegid; 436 syscall_table[__NR_acct] = sys_acct; 437 syscall_table[__NR_umount2] = sys_umount2; 438 syscall_table[__NR_ioctl] = sys_ioctl; 439 syscall_table[__NR_fcntl] = sys_fcntl; 440 syscall_table[__NR_setpgid] = sys_setpgid; 441 syscall_table[__NR_umask] = sys_umask; 442 syscall_table[__NR_chroot] = sys_chroot; 443 syscall_table[__NR_ustat] = sys_ustat; 444 syscall_table[__NR_dup2] = sys_dup2; 445 syscall_table[__NR_getppid] = sys_getppid; 446 syscall_table[__NR_getpgrp] = sys_getpgrp; 447 syscall_table[__NR_setsid] = sys_setsid; 448 syscall_table[__NR_sigaction] = sys_sigaction; 449 syscall_table[__NR_setreuid] = sys_setreuid; 450 syscall_table[__NR_setregid] = sys_setregid; 451 syscall_table[__NR_sigsuspend] = sys_sigsuspend; 452 syscall_table[__NR_sigpending] = sys_sigpending; 453 syscall_table[__NR_sethostname] = sys_sethostname; 454 syscall_table[__NR_setrlimit] = sys_setrlimit; 455 syscall_table[__NR_getrusage] = sys_getrusage; 456 syscall_table[__NR_gettimeofday] = sys_gettimeofday; 457 syscall_table[__NR_settimeofday] = sys_settimeofday; 458 syscall_table[__NR_getgroups] = sys_getgroups; 459 syscall_table[__NR_setgroups] = sys_setgroups; 460 syscall_table[__NR_symlink] = sys_symlink; 461 syscall_table[__NR_readlink] = sys_readlink; 462 syscall_table[__NR_uselib] = sys_uselib; 463 syscall_table[__NR_swapon] = sys_swapon; 464 syscall_table[__NR_reboot] = sys_reboot; 465 syscall_table[__NR_munmap] = sys_munmap; 466 syscall_table[__NR_truncate] = sys_truncate; 467 syscall_table[__NR_ftruncate] = sys_ftruncate; 468 syscall_table[__NR_fchmod] = sys_fchmod; 469 syscall_table[__NR_fchown] = sys_fchown; 470 syscall_table[__NR_getpriority] = sys_getpriority; 471 syscall_table[__NR_setpriority] = sys_setpriority; 472 syscall_table[__NR_statfs] = sys_statfs; 473 syscall_table[__NR_fstatfs] = sys_fstatfs; 474 syscall_table[__NR_syslog] = sys_syslog; 475 syscall_table[__NR_setitimer] = sys_setitimer; 476 syscall_table[__NR_getitimer] = sys_getitimer; 477 syscall_table[__NR_stat] = sys_stat; 478 syscall_table[__NR_lstat] = sys_lstat; 479 syscall_table[__NR_fstat] = sys_fstat; 480 syscall_table[__NR_vhangup] = sys_vhangup; 481 syscall_table[__NR_wait4] = sys_wait4; 482 syscall_table[__NR_swapoff] = sys_swapoff; 483 syscall_table[__NR_sysinfo] = sys_sysinfo; 484 syscall_table[__NR_fsync] = sys_fsync; 485 syscall_table[__NR_sigreturn] = sys_sigreturn; 486 syscall_table[__NR_clone] = sys_clone; 487 syscall_table[__NR_setdomainname] = sys_setdomainname; 488 syscall_table[__NR_uname] = sys_uname; 489 syscall_table[__NR_adjtimex] = sys_adjtimex; 490 syscall_table[__NR_mprotect] = sys_mprotect; 491 syscall_table[__NR_sigprocmask] = sys_sigprocmask; 492 syscall_table[__NR_init_module] = sys_init_module; 493 syscall_table[__NR_delete_module] = sys_delete_module; 494 syscall_table[__NR_quotactl] = sys_quotactl; 495 syscall_table[__NR_getpgid] = sys_getpgid; 496 syscall_table[__NR_fchdir] = sys_fchdir; 497 syscall_table[__NR_bdflush] = sys_bdflush; 498 syscall_table[__NR_sysfs] = sys_sysfs; 499 syscall_table[__NR_personality] = sys_personality; 500 syscall_table[__NR_setfsuid] = sys_setfsuid; 501 syscall_table[__NR_setfsgid] = sys_setfsgid; 502 syscall_table[__NR_getdents] = sys_getdents; 503 syscall_table[__NR__newselect] = sys__newselect; 504 syscall_table[__NR_flock] = sys_flock; 505 syscall_table[__NR_msync] = sys_msync; 506 syscall_table[__NR_readv] = sys_readv; 507 syscall_table[__NR_writev] = sys_writev; 508 syscall_table[__NR_getsid] = sys_getsid; 509 syscall_table[__NR_fdatasync] = sys_fdatasync; 510 syscall_table[__NR__sysctl] = sys__sysctl; 511 syscall_table[__NR_mlock] = sys_mlock; 512 syscall_table[__NR_munlock] = sys_munlock; 513 syscall_table[__NR_mlockall] = sys_mlockall; 514 syscall_table[__NR_munlockall] = sys_munlockall; 515 syscall_table[__NR_sched_setparam] = sys_sched_setparam; 516 syscall_table[__NR_sched_getparam] = sys_sched_getparam; 517 syscall_table[__NR_sched_setscheduler] = sys_sched_setscheduler; 518 syscall_table[__NR_sched_getscheduler] = sys_sched_getscheduler; 519 syscall_table[__NR_sched_yield] = sys_sched_yield; 520 syscall_table[__NR_sched_get_priority_max] = sys_sched_get_priority_max; 521 syscall_table[__NR_sched_get_priority_min] = sys_sched_get_priority_min; 522 syscall_table[__NR_sched_rr_get_interval] = sys_sched_rr_get_interval; 523 syscall_table[__NR_nanosleep] = sys_nanosleep; 524 syscall_table[__NR_mremap] = sys_mremap; 525 syscall_table[__NR_setresuid] = sys_setresuid; 526 syscall_table[__NR_getresuid] = sys_getresuid; 527 syscall_table[__NR_poll] = sys_poll; 528 syscall_table[__NR_nfsservctl] = sys_nfsservctl; 529 syscall_table[__NR_setresgid] = sys_setresgid; 530 syscall_table[__NR_getresgid] = sys_getresgid; 531 syscall_table[__NR_prctl] = sys_prctl; 532 syscall_table[__NR_rt_sigreturn] = sys_rt_sigreturn; 533 syscall_table[__NR_rt_sigaction] = sys_rt_sigaction; 534 syscall_table[__NR_rt_sigprocmask] = sys_rt_sigprocmask; 535 syscall_table[__NR_rt_sigpending] = sys_rt_sigpending; 536 syscall_table[__NR_rt_sigtimedwait] = sys_rt_sigtimedwait; 537 syscall_table[__NR_rt_sigqueueinfo] = sys_rt_sigqueueinfo; 538 syscall_table[__NR_rt_sigsuspend] = sys_rt_sigsuspend; 539 syscall_table[__NR_pread64] = sys_pread64; 540 syscall_table[__NR_pwrite64] = sys_pwrite64; 541 syscall_table[__NR_chown] = sys_chown; 542 syscall_table[__NR_getcwd] = sys_getcwd; 543 syscall_table[__NR_capget] = sys_capget; 544 syscall_table[__NR_capset] = sys_capset; 545 syscall_table[__NR_sigaltstack] = sys_sigaltstack; 546 syscall_table[__NR_sendfile] = sys_sendfile; 547 syscall_table[__NR_vfork] = sys_vfork; 548 syscall_table[__NR_ugetrlimit] = sys_ugetrlimit; 549 syscall_table[__NR_mmap2] = sys_mmap2; 550 syscall_table[__NR_truncate64] = sys_truncate64; 551 syscall_table[__NR_ftruncate64] = sys_ftruncate64; 552 syscall_table[__NR_stat64] = sys_stat64; 553 syscall_table[__NR_lstat64] = sys_lstat64; 554 syscall_table[__NR_fstat64] = sys_fstat64; 555 syscall_table[__NR_lchown32] = sys_lchown32; 556 syscall_table[__NR_getuid32] = sys_getuid32; 557 syscall_table[__NR_getgid32] = sys_getgid32; 558 syscall_table[__NR_geteuid32] = sys_geteuid32; 559 syscall_table[__NR_getegid32] = sys_getegid32; 560 syscall_table[__NR_setreuid32] = sys_setreuid32; 561 syscall_table[__NR_setregid32] = sys_setregid32; 562 syscall_table[__NR_getgroups32] = sys_getgroups32; 563 syscall_table[__NR_setgroups32] = sys_setgroups32; 564 syscall_table[__NR_fchown32] = sys_fchown32; 565 syscall_table[__NR_setresuid32] = sys_setresuid32; 566 syscall_table[__NR_getresuid32] = sys_getresuid32; 567 syscall_table[__NR_setresgid32] = sys_setresgid32; 568 syscall_table[__NR_getresgid32] = sys_getresgid32; 569 syscall_table[__NR_chown32] = sys_chown32; 570 syscall_table[__NR_setuid32] = sys_setuid32; 571 syscall_table[__NR_setgid32] = sys_setgid32; 572 syscall_table[__NR_setfsuid32] = sys_setfsuid32; 573 syscall_table[__NR_setfsgid32] = sys_setfsgid32; 574 syscall_table[__NR_getdents64] = sys_getdents64; 575 syscall_table[__NR_pivot_root] = sys_pivot_root; 576 syscall_table[__NR_mincore] = sys_mincore; 577 syscall_table[__NR_madvise] = sys_madvise; 578 syscall_table[__NR_fcntl64] = sys_fcntl64; 579 syscall_table[__NR_gettid] = sys_gettid; 580 syscall_table[__NR_readahead] = sys_readahead; 581 syscall_table[__NR_setxattr] = sys_setxattr; 582 syscall_table[__NR_lsetxattr] = sys_lsetxattr; 583 syscall_table[__NR_fsetxattr] = sys_fsetxattr; 584 syscall_table[__NR_getxattr] = sys_getxattr; 585 syscall_table[__NR_lgetxattr] = sys_lgetxattr; 586 syscall_table[__NR_fgetxattr] = sys_fgetxattr; 587 syscall_table[__NR_listxattr] = sys_listxattr; 588 syscall_table[__NR_llistxattr] = sys_llistxattr; 589 syscall_table[__NR_flistxattr] = sys_flistxattr; 590 syscall_table[__NR_removexattr] = sys_removexattr; 591 syscall_table[__NR_lremovexattr] = sys_lremovexattr; 592 syscall_table[__NR_fremovexattr] = sys_fremovexattr; 593 syscall_table[__NR_tkill] = sys_tkill; 594 syscall_table[__NR_sendfile64] = sys_sendfile64; 595 syscall_table[__NR_futex] = sys_futex; 596 syscall_table[__NR_sched_setaffinity] = sys_sched_setaffinity; 597 syscall_table[__NR_sched_getaffinity] = sys_sched_getaffinity; 598 syscall_table[__NR_io_setup] = sys_io_setup; 599 syscall_table[__NR_io_destroy] = sys_io_destroy; 600 syscall_table[__NR_io_getevents] = sys_io_getevents; 601 syscall_table[__NR_io_submit] = sys_io_submit; 602 syscall_table[__NR_io_cancel] = sys_io_cancel; 603 syscall_table[__NR_exit_group] = sys_exit_group; 604 syscall_table[__NR_lookup_dcookie] = sys_lookup_dcookie; 605 syscall_table[__NR_epoll_create] = sys_epoll_create; 606 syscall_table[__NR_epoll_ctl] = sys_epoll_ctl; 607 syscall_table[__NR_epoll_wait] = sys_epoll_wait; 608 syscall_table[__NR_remap_file_pages] = sys_remap_file_pages; 609 syscall_table[__NR_set_tid_address] = sys_set_tid_address; 610 syscall_table[__NR_timer_create] = sys_timer_create; 611 syscall_table[__NR_timer_settime] = sys_timer_settime; 612 syscall_table[__NR_timer_gettime] = sys_timer_gettime; 613 syscall_table[__NR_timer_getoverrun] = sys_timer_getoverrun; 614 syscall_table[__NR_timer_delete] = sys_timer_delete; 615 syscall_table[__NR_clock_settime] = sys_clock_settime; 616 syscall_table[__NR_clock_gettime] = sys_clock_gettime; 617 syscall_table[__NR_clock_getres] = sys_clock_getres; 618 syscall_table[__NR_clock_nanosleep] = sys_clock_nanosleep; 619 syscall_table[__NR_statfs64] = sys_statfs64; 620 syscall_table[__NR_fstatfs64] = sys_fstatfs64; 621 syscall_table[__NR_tgkill] = sys_tgkill; 622 syscall_table[__NR_utimes] = sys_utimes; 623 syscall_table[__NR_fadvise64_64] = sys_fadvise64_64; 624 syscall_table[__NR_mq_open] = sys_mq_open; 625 syscall_table[__NR_mq_unlink] = sys_mq_unlink; 626 syscall_table[__NR_mq_timedsend] = sys_mq_timedsend; 627 syscall_table[__NR_mq_timedreceive] = sys_mq_timedreceive; 628 syscall_table[__NR_mq_notify] = sys_mq_notify; 629 syscall_table[__NR_mq_getsetattr] = sys_mq_getsetattr; 630 syscall_table[__NR_waitid] = sys_waitid; 631 syscall_table[__NR_add_key] = sys_add_key; 632 syscall_table[__NR_request_key] = sys_request_key; 633 syscall_table[__NR_keyctl] = sys_keyctl; 634 syscall_table[__NR_vserver] = sys_vserver; 635 syscall_table[__NR_ioprio_set] = sys_ioprio_set; 636 syscall_table[__NR_ioprio_get] = sys_ioprio_get; 637 syscall_table[__NR_inotify_init] = sys_inotify_init; 638 syscall_table[__NR_inotify_add_watch] = sys_inotify_add_watch; 639 syscall_table[__NR_inotify_rm_watch] = sys_inotify_rm_watch; 640 syscall_table[__NR_mbind] = sys_mbind; 641 syscall_table[__NR_get_mempolicy] = sys_get_mempolicy; 642 syscall_table[__NR_set_mempolicy] = sys_set_mempolicy; 643 syscall_table[__NR_openat] = sys_openat; 644 syscall_table[__NR_mkdirat] = sys_mkdirat; 645 syscall_table[__NR_mknodat] = sys_mknodat; 646 syscall_table[__NR_fchownat] = sys_fchownat; 647 syscall_table[__NR_futimesat] = sys_futimesat; 648 syscall_table[__NR_fstatat64] = sys_fstatat64; 649 syscall_table[__NR_unlinkat] = sys_unlinkat; 650 syscall_table[__NR_renameat] = sys_renameat; 651 syscall_table[__NR_linkat] = sys_linkat; 652 syscall_table[__NR_symlinkat] = sys_symlinkat; 653 syscall_table[__NR_readlinkat] = sys_readlinkat; 654 syscall_table[__NR_fchmodat] = sys_fchmodat; 655 syscall_table[__NR_faccessat] = sys_faccessat; 656 syscall_table[__NR_pselect6] = sys_pselect6; 657 syscall_table[__NR_ppoll] = sys_ppoll; 658 syscall_table[__NR_unshare] = sys_unshare; 659 syscall_table[__NR_set_robust_list] = sys_set_robust_list; 660 syscall_table[__NR_get_robust_list] = sys_get_robust_list; 661 syscall_table[__NR_splice] = sys_splice; 662 syscall_table[__NR_tee] = sys_tee; 663 syscall_table[__NR_vmsplice] = sys_vmsplice; 664 syscall_table[__NR_move_pages] = sys_move_pages; 665 syscall_table[__NR_getcpu] = sys_getcpu; 666 syscall_table[__NR_epoll_pwait] = sys_epoll_pwait; 667 syscall_table[__NR_kexec_load] = sys_kexec_load; 668 syscall_table[__NR_utimensat] = sys_utimensat; 669 syscall_table[__NR_signalfd] = sys_signalfd; 670 syscall_table[__NR_timerfd_create] = sys_timerfd_create; 671 syscall_table[__NR_eventfd] = sys_eventfd; 672 syscall_table[__NR_fallocate] = sys_fallocate; 673 syscall_table[__NR_timerfd_settime] = sys_timerfd_settime; 674 syscall_table[__NR_timerfd_gettime] = sys_timerfd_gettime; 675 syscall_table[__NR_signalfd4] = sys_signalfd4; 676 syscall_table[__NR_eventfd2] = sys_eventfd2; 677 syscall_table[__NR_epoll_create1] = sys_epoll_create1; 678 syscall_table[__NR_dup3] = sys_dup3; 679 syscall_table[__NR_pipe2] = sys_pipe2; 680 syscall_table[__NR_inotify_init1] = sys_inotify_init1; 681 syscall_table[__NR_preadv] = sys_preadv; 682 syscall_table[__NR_pwritev] = sys_pwritev; 683 syscall_table[__NR_prlimit64] = sys_prlimit64; 684 syscall_table[__NR_name_to_handle_at] = sys_name_to_handle_at; 685 syscall_table[__NR_open_by_handle_at] = sys_open_by_handle_at; 686 syscall_table[__NR_clock_adjtime] = sys_clock_adjtime; 687 syscall_table[__NR_syncfs] = sys_syncfs; 688 syscall_table[__NR_sendmmsg] = sys_sendmmsg; 689 syscall_table[__NR_setns] = sys_setns; 690 syscall_table[__NR_process_vm_readv] = sys_process_vm_readv; 691 syscall_table[__NR_process_vm_writev] = sys_process_vm_writev; 692#ifdef CONFIG_ARCH_ARM 693 syscall_table[__NR_pciconfig_iobase] = sys_pciconfig_iobase; 694 syscall_table[__NR_pciconfig_read] = sys_pciconfig_read; 695 syscall_table[__NR_pciconfig_write] = sys_pciconfig_write; 696 syscall_table[__NR_socket] = sys_socket; 697 syscall_table[__NR_bind] = sys_bind; 698 syscall_table[__NR_connect] = sys_connect; 699 syscall_table[__NR_listen] = sys_listen; 700 syscall_table[__NR_accept] = sys_accept; 701 syscall_table[__NR_getsockname] = sys_getsockname; 702 syscall_table[__NR_getpeername] = sys_getpeername; 703 syscall_table[__NR_socketpair] = sys_socketpair; 704 syscall_table[__NR_send] = sys_send; 705 syscall_table[__NR_sendto] = sys_sendto; 706 syscall_table[__NR_recv] = sys_recv; 707 syscall_table[__NR_recvfrom] = sys_recvfrom; 708 syscall_table[__NR_shutdown] = sys_shutdown; 709 syscall_table[__NR_setsockopt] = sys_setsockopt; 710 syscall_table[__NR_getsockopt] = sys_getsockopt; 711 syscall_table[__NR_sendmsg] = sys_sendmsg; 712 syscall_table[__NR_recvmsg] = sys_recvmsg; 713 syscall_table[__NR_semop] = sys_semop; 714 syscall_table[__NR_semget] = sys_semget; 715 syscall_table[__NR_semctl] = sys_semctl; 716 syscall_table[__NR_msgsnd] = sys_msgsnd; 717 syscall_table[__NR_msgrcv] = sys_msgrcv; 718 syscall_table[__NR_msgget] = sys_msgget; 719 syscall_table[__NR_msgctl] = sys_msgctl; 720 syscall_table[__NR_shmat] = sys_shmat; 721 syscall_table[__NR_shmdt] = sys_shmdt; 722 syscall_table[__NR_shmget] = sys_shmget; 723 syscall_table[__NR_shmctl] = sys_shmctl; 724 syscall_table[__NR_semtimedop] = sys_semtimedop; 725 syscall_table[__NR_sync_file_range2] = sys_sync_file_range2; 726 syscall_table[__NR_accept4] = sys_accept4; 727 syscall_table[__NR_rt_tgsigqueueinfo] = sys_rt_tgsigqueueinfo; 728 syscall_table[__NR_perf_event_open] = sys_perf_event_open; 729 syscall_table[__NR_recvmmsg] = sys_recvmmsg; 730 syscall_table[__NR_fanotify_init] = sys_fanotify_init; 731 syscall_table[__NR_fanotify_mark] = sys_fanotify_mark; 732#endif /* CONFIG_ARCH_ARM */ 733} 734 735void 736refos_initialise_os_minimal(void) 737{ 738 /* Initialise userspace allocator helper libraries. */ 739 csalloc_init(PROCCSPACE_ALLOC_REGION_START, PROCCSPACE_ALLOC_REGION_END); 740 walloc_init(PROCESS_WALLOC_START, PROCESS_WALLOC_END); 741} 742 743void refos_initialise_selfloader(void) 744{ 745 /* Initialise userspace allocator helper libraries. */ 746 csalloc_init(PROCCSPACE_SELFLOADER_CSPACE_START, PROCCSPACE_SELFLOADER_CSPACE_END); 747 walloc_init(PROCESS_SELFLOADER_RESERVED_READELF, 748 PROCESS_SELFLOADER_RESERVED_READELF + PROCESS_SELFLOADER_RESERVED_READELF_SIZE); 749} 750 751void 752refos_initialise_timer(void) 753{ 754 /* Temporarily use seL4_DebugPutChar before printf is set up. On release kernel this will 755 do nothing. */ 756 refos_seL4_debug_override_stdout(); 757 758 /* We first initialise the cspace allocator statically, as MMap and heap (which malloc 759 depend on) needs this. */ 760 csalloc_init_static(PROCCSPACE_ALLOC_REGION_START, PROCCSPACE_ALLOC_REGION_END, 761 _refosUtilCSpaceStatic, REFOS_UTIL_CSPACE_STATIC_SIZE); 762 763 /* Initialise dynamic MMap and heap. */ 764 refosio_init_morecore(refos_static_param_procinfo()); 765 766 /* Initialise userspace allocator helper libraries. */ 767 walloc_init(PROCESS_WALLOC_START, PROCESS_WALLOC_END); 768 769 /* Write to the STDIO output device. */ 770 refos_override_stdio(NULL, NULL); 771 refos_setup_dataspace_stdio(REFOS_DEFAULT_STDIO_DSPACE); 772 773 /* Initialise file descriptor table. */ 774 filetable_init_default(); 775 776 /* Initialise default environment variables. */ 777 _refosEnv[0] = NULL; 778 __environ = _refosEnv; 779 setenv("SHELL", "/fileserv/terminal", true); 780 setenv("PWD", "/", true); 781 #ifdef CONFIG_REFOS_TIMEZONE 782 setenv("TZ", CONFIG_REFOS_TIMEZONE, true); 783 #endif 784} 785 786void 787refos_initialise(void) 788{ 789 /* Temporarily use seL4_DebugPutChar before printf is set up. On release kernel this will 790 do nothing. */ 791 refos_seL4_debug_override_stdout(); 792 793 /* We first initialise the cspace allocator statically, as MMap and heap (which malloc 794 depend on) needs this. */ 795 csalloc_init_static(PROCCSPACE_ALLOC_REGION_START, PROCCSPACE_ALLOC_REGION_END, 796 _refosUtilCSpaceStatic, REFOS_UTIL_CSPACE_STATIC_SIZE); 797 798 /* Initialise dynamic MMap and heap. */ 799 refosio_init_morecore(refos_static_param_procinfo()); 800 801 /* Initialise userspace allocator helper libraries. */ 802 walloc_init(PROCESS_WALLOC_START, PROCESS_WALLOC_END); 803 804 /* Write to the STDIO output device. */ 805 refos_override_stdio(NULL, NULL); 806 refos_setup_dataspace_stdio(REFOS_DEFAULT_STDIO_DSPACE); 807 808 /* Initialise file descriptor table. */ 809 filetable_init_default(); 810 811 /* Initialise timer so we can sleep. */ 812 refos_init_timer(REFOS_DEFAULT_TIMER_DSPACE); 813 814 /* Initialise default environment variables. */ 815 _refosEnv[0] = NULL; 816 __environ = _refosEnv; 817 setenv("SHELL", "/fileserv/terminal", true); 818 setenv("PWD", "/", true); 819 #ifdef CONFIG_REFOS_TIMEZONE 820 setenv("TZ", CONFIG_REFOS_TIMEZONE, true); 821 #endif 822} 823 824char * 825refos_static_param(void) 826{ 827 return (char*)(PROCESS_STATICPARAM_ADDR); 828} 829 830struct sl_procinfo_s * 831refos_static_param_procinfo(void) 832{ 833 return (struct sl_procinfo_s *)(PROCESS_STATICPARAM_PROCINFO_ADDR); 834} 835