| /* |
| * 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 <http://www.gnu.org/licenses/>. |
| */ |
| |
| /* |
| * 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 <sys/syscall.h> |
| #include <sys/param.h> |
| #include <sys/sysctl.h> |
| #include <utime.h> |
| |
| #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_<errcode>. |
| */ |
| 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) |
| { |
| } |