/* * BSD syscalls * * Copyright (c) 2003-2008 Fabrice Bellard * Copyright (c) 2013-2014 Stacey D. Son * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /* * We need the FreeBSD "legacy" definitions. Rust needs the FreeBSD 11 system * calls since it doesn't use libc at all, so we have to emulate that despite * FreeBSD 11 being EOL'd. */ #define _WANT_FREEBSD11_STAT #define _WANT_FREEBSD11_STATFS #define _WANT_FREEBSD11_DIRENT #define _WANT_KERNEL_ERRNO #define _WANT_SEMUN #include "qemu/osdep.h" #include "qemu/cutils.h" #include "qemu/path.h" #include #include #include #include #include "qemu.h" #include "qemu-common.h" #include "signal-common.h" #include "user/syscall-trace.h" #include "bsd-file.h" void target_set_brk(abi_ulong new_brk) { } /* * errno conversion. */ abi_long get_errno(abi_long ret) { if (ret == -1) { return -host_to_target_errno(errno); } else { return ret; } } int host_to_target_errno(int err) { /* * All the BSDs have the property that the error numbers are uniform across * all architectures for a given BSD, though they may vary between different * BSDs. */ return err; } bool is_error(abi_long ret) { return (abi_ulong)ret >= (abi_ulong)(-4096); } /* * do_syscall() should always have a single exit point at the end so that * actions, such as logging of syscall results, can be performed. All errnos * that do_syscall() returns must be -TARGET_. */ abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6, abi_long arg7, abi_long arg8) { return 0; } void syscall_init(void) { }