[v2] - Rebases to 1.7.0-rc0. (Requires, however, Andreas Tobler's patch to build: see http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg00000.html) - Fixes deadlock in the _umtx_op() system call handler. - Fixes race condition in mmap() system call handler. - Makes qemu-mips (o32) usable. - A small code clean up to the ARM cpu_loop(). - Fixes comment in arm-bsd-user.mak to match filename. - Fixes symbol conflicts with FreeBSD's libcrypto for static link.
[v1] This patch series adds a significant number of system calls and mips/arm support for bsd-user. In its current state it can emulate most FreeBSD mips/mips64 and arm target binaries on a x86 host in a simple chroot environment. (see https://wiki.freebsd.org/QemuUserModeHowTo for the details.) Besides adding a lot of shims and other support code this change restructures the code significantly to reduce the amount of C preprocessor conditionals for the various target and host arch/OS's. In general, the target cpu depedent code has been moved into into the various arch directories and the host OS dependent code (ie. FreeBSD, NetBSD, OpenBSD) has been moved into the OS directories as much as possible. I would like to recognize Olivier Houchard for a lot of the arm dependent code and Juergen Lock, the maintainer of the FreeBSD Qemu port, for their contributions. Best Regards, Stacey D. Son --- Stacey Son (19): bsd-user: refresh freebsd system call numbers bsd-user: add HOST_ABI_DIR for the various *BSD dependent code. bsd-user: move OS/arch dependent code for strace into separate directories bsd-user: move target arch and host OS dependent code out of main.c bsd-user: move target arch and host OS dependent code out of syscall.c bsd-user: add support for freebsd time related system calls bsd-user: add support for freebsd signal related system calls bsd-user: move target arch and host OS dependent code out of elfload.c bsd-user: add support for freebsd process related system calls bsd-user: add support for file system related system calls bsd-user: add support for stat, directory, and file control related system calls bsd-user: add support for memory management related system calls bsd-user: add support for socket related system calls bsd-user: add support for thread related system calls bsd-user: add support for the ioctl system call bsd-user: add support for extended attribute and ACL related syscalls bsd-user: add support for miscellaneous system calls bsd-user: add arm, mips and mips64 options to configure target-list bsd-user: fix linking conflicts with FreeBSD libcrypto Makefile.target | 5 +- bsd-user/Makefile.objs | 6 +- bsd-user/arm/syscall.h | 36 + bsd-user/arm/target_arch.h | 10 + bsd-user/arm/target_arch_cpu.c | 27 + bsd-user/arm/target_arch_cpu.h | 375 ++++++ bsd-user/arm/target_arch_elf.h | 54 + bsd-user/arm/target_arch_signal.h | 257 +++++ bsd-user/arm/target_arch_sigtramp.h | 33 + bsd-user/arm/target_arch_sysarch.h | 78 ++ bsd-user/arm/target_arch_thread.h | 67 ++ bsd-user/arm/target_arch_vmparam.h | 51 + bsd-user/bsd-file.h | 1111 ++++++++++++++++++ bsd-user/bsd-ioctl.c | 448 ++++++++ bsd-user/bsd-ioctl.h | 27 + bsd-user/bsd-mem.c | 122 ++ bsd-user/bsd-mem.h | 393 +++++++ bsd-user/bsd-misc.c | 209 ++++ bsd-user/bsd-misc.h | 339 ++++++ bsd-user/bsd-proc.c | 160 +++ bsd-user/bsd-proc.h | 434 +++++++ bsd-user/bsd-signal.h | 232 ++++ bsd-user/bsd-socket.c | 108 ++ bsd-user/bsd-socket.h | 266 +++++ bsd-user/bsdload.c | 170 ++- bsd-user/elfload.c | 956 ++++------------- bsd-user/errno_defs.h | 13 +- bsd-user/freebsd/host_os.h | 46 + bsd-user/freebsd/os-extattr.c | 119 ++ bsd-user/freebsd/os-extattr.h | 644 +++++++++++ bsd-user/freebsd/os-ioctl-cmds.h | 47 + bsd-user/freebsd/os-ioctl-filio.h | 45 + bsd-user/freebsd/os-ioctl-ioccom.h | 54 + bsd-user/freebsd/os-ioctl-ttycom.h | 257 +++++ bsd-user/freebsd/os-ioctl-types.h | 7 + bsd-user/freebsd/os-misc.h | 442 ++++++++ bsd-user/freebsd/os-proc.c | 234 ++++ bsd-user/freebsd/os-proc.h | 428 +++++++ bsd-user/freebsd/os-signal.h | 43 + bsd-user/freebsd/os-socket.c | 149 +++ bsd-user/freebsd/os-socket.h | 548 +++++++++ bsd-user/freebsd/os-stat.c | 234 ++++ bsd-user/freebsd/os-stat.h | 437 +++++++ bsd-user/freebsd/os-strace.h | 29 + bsd-user/freebsd/os-sys.c | 268 +++++ bsd-user/freebsd/os-thread.c | 1001 ++++++++++++++++ bsd-user/freebsd/os-thread.h | 511 +++++++++ bsd-user/freebsd/os-time.c | 205 ++++ bsd-user/freebsd/os-time.h | 643 +++++++++++ bsd-user/freebsd/qemu-os.h | 79 ++ bsd-user/freebsd/strace.list | 76 ++- bsd-user/freebsd/syscall_nr.h | 813 ++++++++------ bsd-user/freebsd/target_os_elf.h | 145 +++ bsd-user/freebsd/target_os_siginfo.h | 110 ++ bsd-user/freebsd/target_os_signal.h | 79 ++ bsd-user/freebsd/target_os_stack.h | 157 +++ bsd-user/freebsd/target_os_thread.h | 6 + bsd-user/freebsd/target_os_vmparam.h | 23 + bsd-user/i386/syscall.h | 23 + bsd-user/i386/target_arch.h | 13 + bsd-user/i386/target_arch_cpu.c | 79 ++ bsd-user/i386/target_arch_cpu.h | 302 +++++ bsd-user/i386/target_arch_elf.h | 62 + bsd-user/i386/target_arch_signal.h | 94 ++ bsd-user/i386/target_arch_sigtramp.h | 11 + bsd-user/i386/target_arch_sysarch.h | 78 ++ bsd-user/i386/target_arch_thread.h | 45 + bsd-user/i386/target_arch_vmparam.h | 28 + bsd-user/i386/target_signal.h | 6 - bsd-user/main.c | 926 +++------------ bsd-user/mips/syscall.h | 52 + bsd-user/mips/target_arch.h | 10 + bsd-user/mips/target_arch_cpu.c | 27 + bsd-user/mips/target_arch_cpu.h | 257 +++++ bsd-user/mips/target_arch_elf.h | 36 + bsd-user/mips/target_arch_signal.h | 237 ++++ bsd-user/mips/target_arch_sigtramp.h | 23 + bsd-user/mips/target_arch_sysarch.h | 69 ++ bsd-user/mips/target_arch_thread.h | 54 + bsd-user/mips/target_arch_vmparam.h | 50 + bsd-user/mips64/syscall.h | 53 + bsd-user/mips64/target_arch.h | 10 + bsd-user/mips64/target_arch_cpu.c | 27 + bsd-user/mips64/target_arch_cpu.h | 243 ++++ bsd-user/mips64/target_arch_elf.h | 36 + bsd-user/mips64/target_arch_signal.h | 236 ++++ bsd-user/mips64/target_arch_sigtramp.h | 23 + bsd-user/mips64/target_arch_sysarch.h | 69 ++ bsd-user/mips64/target_arch_thread.h | 54 + bsd-user/mips64/target_arch_vmparam.h | 47 + bsd-user/mmap.c | 473 +++++--- bsd-user/netbsd/host_os.h | 31 + bsd-user/netbsd/os-extattr.h | 247 ++++ bsd-user/netbsd/os-ioctl-cmds.h | 48 + bsd-user/netbsd/os-ioctl-filio.h | 29 + bsd-user/netbsd/os-ioctl-ioccom.h | 38 + bsd-user/netbsd/os-ioctl-ttycom.h | 240 ++++ bsd-user/netbsd/os-ioctl-types.h | 7 + bsd-user/netbsd/os-misc.h | 375 ++++++ bsd-user/netbsd/os-proc.c | 11 + bsd-user/netbsd/os-proc.h | 243 ++++ bsd-user/netbsd/os-socket.c | 1 + bsd-user/netbsd/os-socket.h | 98 ++ bsd-user/netbsd/os-stat.c | 1 + bsd-user/netbsd/os-stat.h | 1 + bsd-user/netbsd/os-strace.h | 1 + bsd-user/netbsd/os-sys.c | 46 + bsd-user/netbsd/os-thread.c | 1 + bsd-user/netbsd/os-thread.h | 133 +++ bsd-user/netbsd/os-time.c | 1 + bsd-user/netbsd/os-time.h | 179 +++ bsd-user/netbsd/qemu-os.h | 1 + bsd-user/netbsd/target_os_elf.h | 226 ++++ bsd-user/netbsd/target_os_siginfo.h | 82 ++ bsd-user/netbsd/target_os_signal.h | 70 ++ bsd-user/netbsd/target_os_stack.h | 33 + bsd-user/netbsd/target_os_thread.h | 6 + bsd-user/openbsd/host_os.h | 31 + bsd-user/openbsd/os-extattr.h | 247 ++++ bsd-user/openbsd/os-ioctl-cmds.h | 48 + bsd-user/openbsd/os-ioctl-filio.h | 29 + bsd-user/openbsd/os-ioctl-ioccom.h | 38 + bsd-user/openbsd/os-ioctl-ttycom.h | 240 ++++ bsd-user/openbsd/os-ioctl-types.h | 7 + bsd-user/openbsd/os-misc.h | 375 ++++++ bsd-user/openbsd/os-proc.c | 11 + bsd-user/openbsd/os-proc.h | 243 ++++ bsd-user/openbsd/os-socket.c | 1 + bsd-user/openbsd/os-socket.h | 98 ++ bsd-user/openbsd/os-stat.c | 1 + bsd-user/openbsd/os-stat.h | 176 +++ bsd-user/openbsd/os-strace.h | 1 + bsd-user/openbsd/os-sys.c | 46 + bsd-user/openbsd/os-thread.c | 1 + bsd-user/openbsd/os-thread.h | 133 +++ bsd-user/openbsd/os-time.c | 1 + bsd-user/openbsd/os-time.h | 179 +++ bsd-user/openbsd/qemu-os.h | 1 + bsd-user/openbsd/target_os_elf.h | 226 ++++ bsd-user/openbsd/target_os_siginfo.h | 82 ++ bsd-user/openbsd/target_os_signal.h | 70 ++ bsd-user/openbsd/target_os_stack.h | 33 + bsd-user/openbsd/target_os_thread.h | 6 + bsd-user/qemu-bsd.h | 79 ++ bsd-user/qemu.h | 202 +++- bsd-user/signal.c | 907 +++++++++++++++- bsd-user/sparc/syscall.h | 29 +- bsd-user/sparc/target_arch.h | 11 + bsd-user/sparc/target_arch_cpu.c | 113 ++ bsd-user/sparc/target_arch_cpu.h | 158 +++ bsd-user/sparc/target_arch_elf.h | 30 + bsd-user/sparc/target_arch_signal.h | 77 ++ bsd-user/sparc/target_arch_sigtramp.h | 11 + bsd-user/sparc/target_arch_sysarch.h | 52 + bsd-user/sparc/target_arch_thread.h | 39 + bsd-user/sparc/target_arch_vmparam.h | 37 + bsd-user/sparc/target_signal.h | 5 - bsd-user/sparc64/syscall.h | 28 +- bsd-user/sparc64/target_arch.h | 11 + bsd-user/sparc64/target_arch_cpu.c | 118 ++ bsd-user/sparc64/target_arch_cpu.h | 191 ++++ bsd-user/sparc64/target_arch_elf.h | 34 + bsd-user/sparc64/target_arch_signal.h | 94 ++ bsd-user/sparc64/target_arch_sigtramp.h | 11 + bsd-user/sparc64/target_arch_sysarch.h | 52 + bsd-user/sparc64/target_arch_thread.h | 55 + bsd-user/sparc64/target_arch_vmparam.h | 37 + bsd-user/sparc64/target_signal.h | 5 - bsd-user/strace.c | 175 ++- bsd-user/syscall.c | 1884 ++++++++++++++++++++++++------- bsd-user/syscall_defs.h | 860 +++++++++++++-- bsd-user/x86_64/syscall.h | 26 +- bsd-user/x86_64/target_arch.h | 13 + bsd-user/x86_64/target_arch_cpu.c | 79 ++ bsd-user/x86_64/target_arch_cpu.h | 324 ++++++ bsd-user/x86_64/target_arch_elf.h | 55 + bsd-user/x86_64/target_arch_signal.h | 94 ++ bsd-user/x86_64/target_arch_sigtramp.h | 11 + bsd-user/x86_64/target_arch_sysarch.h | 76 ++ bsd-user/x86_64/target_arch_thread.h | 40 + bsd-user/x86_64/target_arch_vmparam.h | 28 + bsd-user/x86_64/target_signal.h | 5 - configure | 11 + default-configs/arm-bsd-user.mak | 3 + default-configs/mips-bsd-user.mak | 1 + default-configs/mips64-bsd-user.mak | 1 + default-configs/mips64el-bsd-user.mak | 1 + default-configs/mipsel-bsd-user.mak | 1 + include/qemu/aes.h | 9 + include/qemu/tls.h | 2 +- 190 files changed, 25475 insertions(+), 2702 deletions(-) create mode 100644 bsd-user/arm/syscall.h create mode 100644 bsd-user/arm/target_arch.h create mode 100644 bsd-user/arm/target_arch_cpu.c create mode 100644 bsd-user/arm/target_arch_cpu.h create mode 100644 bsd-user/arm/target_arch_elf.h create mode 100644 bsd-user/arm/target_arch_signal.h create mode 100644 bsd-user/arm/target_arch_sigtramp.h create mode 100644 bsd-user/arm/target_arch_sysarch.h create mode 100644 bsd-user/arm/target_arch_thread.h create mode 100644 bsd-user/arm/target_arch_vmparam.h create mode 100644 bsd-user/bsd-file.h create mode 100644 bsd-user/bsd-ioctl.c create mode 100644 bsd-user/bsd-ioctl.h create mode 100644 bsd-user/bsd-mem.c create mode 100644 bsd-user/bsd-mem.h create mode 100644 bsd-user/bsd-misc.c create mode 100644 bsd-user/bsd-misc.h create mode 100644 bsd-user/bsd-proc.c create mode 100644 bsd-user/bsd-proc.h create mode 100644 bsd-user/bsd-signal.h create mode 100644 bsd-user/bsd-socket.c create mode 100644 bsd-user/bsd-socket.h create mode 100644 bsd-user/freebsd/host_os.h create mode 100644 bsd-user/freebsd/os-extattr.c create mode 100644 bsd-user/freebsd/os-extattr.h create mode 100644 bsd-user/freebsd/os-ioctl-cmds.h create mode 100644 bsd-user/freebsd/os-ioctl-filio.h create mode 100644 bsd-user/freebsd/os-ioctl-ioccom.h create mode 100644 bsd-user/freebsd/os-ioctl-ttycom.h create mode 100644 bsd-user/freebsd/os-ioctl-types.h create mode 100644 bsd-user/freebsd/os-misc.h create mode 100644 bsd-user/freebsd/os-proc.c create mode 100644 bsd-user/freebsd/os-proc.h create mode 100644 bsd-user/freebsd/os-signal.h create mode 100644 bsd-user/freebsd/os-socket.c create mode 100644 bsd-user/freebsd/os-socket.h create mode 100644 bsd-user/freebsd/os-stat.c create mode 100644 bsd-user/freebsd/os-stat.h create mode 100644 bsd-user/freebsd/os-strace.h create mode 100644 bsd-user/freebsd/os-sys.c create mode 100644 bsd-user/freebsd/os-thread.c create mode 100644 bsd-user/freebsd/os-thread.h create mode 100644 bsd-user/freebsd/os-time.c create mode 100644 bsd-user/freebsd/os-time.h create mode 100644 bsd-user/freebsd/qemu-os.h create mode 100644 bsd-user/freebsd/target_os_elf.h create mode 100644 bsd-user/freebsd/target_os_siginfo.h create mode 100644 bsd-user/freebsd/target_os_signal.h create mode 100644 bsd-user/freebsd/target_os_stack.h create mode 100644 bsd-user/freebsd/target_os_thread.h create mode 100644 bsd-user/freebsd/target_os_vmparam.h create mode 100644 bsd-user/i386/target_arch.h create mode 100644 bsd-user/i386/target_arch_cpu.c create mode 100644 bsd-user/i386/target_arch_cpu.h create mode 100644 bsd-user/i386/target_arch_elf.h create mode 100644 bsd-user/i386/target_arch_signal.h create mode 100644 bsd-user/i386/target_arch_sigtramp.h create mode 100644 bsd-user/i386/target_arch_sysarch.h create mode 100644 bsd-user/i386/target_arch_thread.h create mode 100644 bsd-user/i386/target_arch_vmparam.h create mode 100644 bsd-user/mips/syscall.h create mode 100644 bsd-user/mips/target_arch.h create mode 100644 bsd-user/mips/target_arch_cpu.c create mode 100644 bsd-user/mips/target_arch_cpu.h create mode 100644 bsd-user/mips/target_arch_elf.h create mode 100644 bsd-user/mips/target_arch_signal.h create mode 100644 bsd-user/mips/target_arch_sigtramp.h create mode 100644 bsd-user/mips/target_arch_sysarch.h create mode 100644 bsd-user/mips/target_arch_thread.h create mode 100644 bsd-user/mips/target_arch_vmparam.h create mode 100644 bsd-user/mips64/syscall.h create mode 100644 bsd-user/mips64/target_arch.h create mode 100644 bsd-user/mips64/target_arch_cpu.c create mode 100644 bsd-user/mips64/target_arch_cpu.h create mode 100644 bsd-user/mips64/target_arch_elf.h create mode 100644 bsd-user/mips64/target_arch_signal.h create mode 100644 bsd-user/mips64/target_arch_sigtramp.h create mode 100644 bsd-user/mips64/target_arch_sysarch.h create mode 100644 bsd-user/mips64/target_arch_thread.h create mode 100644 bsd-user/mips64/target_arch_vmparam.h create mode 100644 bsd-user/netbsd/host_os.h create mode 100644 bsd-user/netbsd/os-extattr.h create mode 100644 bsd-user/netbsd/os-ioctl-cmds.h create mode 100644 bsd-user/netbsd/os-ioctl-filio.h create mode 100644 bsd-user/netbsd/os-ioctl-ioccom.h create mode 100644 bsd-user/netbsd/os-ioctl-ttycom.h create mode 100644 bsd-user/netbsd/os-ioctl-types.h create mode 100644 bsd-user/netbsd/os-misc.h create mode 100644 bsd-user/netbsd/os-proc.c create mode 100644 bsd-user/netbsd/os-proc.h create mode 100644 bsd-user/netbsd/os-socket.c create mode 100644 bsd-user/netbsd/os-socket.h create mode 100644 bsd-user/netbsd/os-stat.c create mode 100644 bsd-user/netbsd/os-stat.h create mode 100644 bsd-user/netbsd/os-strace.h create mode 100644 bsd-user/netbsd/os-sys.c create mode 100644 bsd-user/netbsd/os-thread.c create mode 100644 bsd-user/netbsd/os-thread.h create mode 100644 bsd-user/netbsd/os-time.c create mode 100644 bsd-user/netbsd/os-time.h create mode 100644 bsd-user/netbsd/qemu-os.h create mode 100644 bsd-user/netbsd/target_os_elf.h create mode 100644 bsd-user/netbsd/target_os_siginfo.h create mode 100644 bsd-user/netbsd/target_os_signal.h create mode 100644 bsd-user/netbsd/target_os_stack.h create mode 100644 bsd-user/netbsd/target_os_thread.h create mode 100644 bsd-user/openbsd/host_os.h create mode 100644 bsd-user/openbsd/os-extattr.h create mode 100644 bsd-user/openbsd/os-ioctl-cmds.h create mode 100644 bsd-user/openbsd/os-ioctl-filio.h create mode 100644 bsd-user/openbsd/os-ioctl-ioccom.h create mode 100644 bsd-user/openbsd/os-ioctl-ttycom.h create mode 100644 bsd-user/openbsd/os-ioctl-types.h create mode 100644 bsd-user/openbsd/os-misc.h create mode 100644 bsd-user/openbsd/os-proc.c create mode 100644 bsd-user/openbsd/os-proc.h create mode 100644 bsd-user/openbsd/os-socket.c create mode 100644 bsd-user/openbsd/os-socket.h create mode 100644 bsd-user/openbsd/os-stat.c create mode 100644 bsd-user/openbsd/os-stat.h create mode 100644 bsd-user/openbsd/os-strace.h create mode 100644 bsd-user/openbsd/os-sys.c create mode 100644 bsd-user/openbsd/os-thread.c create mode 100644 bsd-user/openbsd/os-thread.h create mode 100644 bsd-user/openbsd/os-time.c create mode 100644 bsd-user/openbsd/os-time.h create mode 100644 bsd-user/openbsd/qemu-os.h create mode 100644 bsd-user/openbsd/target_os_elf.h create mode 100644 bsd-user/openbsd/target_os_siginfo.h create mode 100644 bsd-user/openbsd/target_os_signal.h create mode 100644 bsd-user/openbsd/target_os_stack.h create mode 100644 bsd-user/openbsd/target_os_thread.h create mode 100644 bsd-user/qemu-bsd.h create mode 100644 bsd-user/sparc/target_arch.h create mode 100644 bsd-user/sparc/target_arch_cpu.c create mode 100644 bsd-user/sparc/target_arch_cpu.h create mode 100644 bsd-user/sparc/target_arch_elf.h create mode 100644 bsd-user/sparc/target_arch_signal.h create mode 100644 bsd-user/sparc/target_arch_sigtramp.h create mode 100644 bsd-user/sparc/target_arch_sysarch.h create mode 100644 bsd-user/sparc/target_arch_thread.h create mode 100644 bsd-user/sparc/target_arch_vmparam.h create mode 100644 bsd-user/sparc64/target_arch.h create mode 100644 bsd-user/sparc64/target_arch_cpu.c create mode 100644 bsd-user/sparc64/target_arch_cpu.h create mode 100644 bsd-user/sparc64/target_arch_elf.h create mode 100644 bsd-user/sparc64/target_arch_signal.h create mode 100644 bsd-user/sparc64/target_arch_sigtramp.h create mode 100644 bsd-user/sparc64/target_arch_sysarch.h create mode 100644 bsd-user/sparc64/target_arch_thread.h create mode 100644 bsd-user/sparc64/target_arch_vmparam.h create mode 100644 bsd-user/x86_64/target_arch.h create mode 100644 bsd-user/x86_64/target_arch_cpu.c create mode 100644 bsd-user/x86_64/target_arch_cpu.h create mode 100644 bsd-user/x86_64/target_arch_elf.h create mode 100644 bsd-user/x86_64/target_arch_signal.h create mode 100644 bsd-user/x86_64/target_arch_sigtramp.h create mode 100644 bsd-user/x86_64/target_arch_sysarch.h create mode 100644 bsd-user/x86_64/target_arch_thread.h create mode 100644 bsd-user/x86_64/target_arch_vmparam.h create mode 100644 default-configs/arm-bsd-user.mak create mode 100644 default-configs/mips-bsd-user.mak create mode 100644 default-configs/mips64-bsd-user.mak create mode 100644 default-configs/mips64el-bsd-user.mak create mode 100644 default-configs/mipsel-bsd-user.mak -- 1.7.8