Import QEMU upstream snapshot d2e570c
Upstream: https://gitlab.com/qemu-project/qemu.git Upstream-Commit: d2e570cc0f97b936902a5b1b86b73c0f5998b475
This commit is contained in:
commit
cf256aa081
11315 files changed
+3598369
No files matched your search
@@ -0,0 +1,15 @@
|
||||
.. _User Mode Emulation:
|
||||
|
||||
-------------------
|
||||
User Mode Emulation
|
||||
-------------------
|
||||
|
||||
This section of the manual is the overall guide for users using QEMU
|
||||
for user-mode emulation. In this mode, QEMU can launch programs
|
||||
compiled for one CPU architecture on the same Operating System (OS)
|
||||
but running on a different CPU architecture.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
main
|
||||
@@ -0,0 +1,268 @@
|
||||
.. _user-mode:
|
||||
|
||||
QEMU User space emulator
|
||||
========================
|
||||
|
||||
Supported Operating Systems
|
||||
---------------------------
|
||||
|
||||
The following OS are supported in user space emulation:
|
||||
|
||||
- Linux (referred as qemu-linux-user)
|
||||
|
||||
- BSD (referred as qemu-bsd-user)
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
QEMU user space emulation has the following notable features:
|
||||
|
||||
System call translation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
System calls are the principle interface between user-space and the
|
||||
kernel. Generally the same system calls exist on all versions of the
|
||||
kernel so QEMU includes a generic system call translator. The
|
||||
translator takes care of adjusting endianess, 32/64 bit parameter size
|
||||
and then calling the equivalent host system call.
|
||||
|
||||
QEMU can also adjust device specific ``ioctl()`` calls in a similar
|
||||
fashion.
|
||||
|
||||
POSIX signal handling
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
QEMU can redirect to the running program all signals coming from the
|
||||
host (such as ``SIGALRM``), as well as synthesize signals from
|
||||
virtual CPU exceptions (for example ``SIGFPE`` when the program
|
||||
executes a division by zero).
|
||||
|
||||
QEMU relies on the host kernel to emulate most signal system calls,
|
||||
for example to emulate the signal mask. On Linux, QEMU supports both
|
||||
normal and real-time signals.
|
||||
|
||||
Threading
|
||||
~~~~~~~~~
|
||||
|
||||
On Linux, QEMU can emulate the ``clone`` syscall and create a real
|
||||
host thread (with a separate virtual CPU) for each emulated thread.
|
||||
However as QEMU relies on the system libc to call ``clone`` on its
|
||||
behalf we limit the flags accepted to those it uses. Specifically this
|
||||
means flags affecting namespaces (e.g. container runtimes) are not
|
||||
supported. QEMU user-mode processes can still be run inside containers
|
||||
though.
|
||||
|
||||
While QEMU does its best to emulate atomic operations properly
|
||||
differences between the host and guest memory models can cause issues
|
||||
for software that makes assumptions about the memory model.
|
||||
|
||||
QEMU was conceived so that ultimately it can emulate itself. Although it
|
||||
is not very useful, it is an important test to show the power of the
|
||||
emulator.
|
||||
|
||||
.. _linux-user-mode:
|
||||
|
||||
Linux User space emulator
|
||||
-------------------------
|
||||
|
||||
Command line options
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
::
|
||||
|
||||
qemu-i386 [-h] [-d] [-L path] [-s size] [-cpu model] [-g endpoint] [-B offset] [-R size] program [arguments...]
|
||||
|
||||
``-h``
|
||||
Print the help
|
||||
|
||||
``-L path``
|
||||
Set the x86 elf interpreter prefix (default=/usr/local/qemu-i386)
|
||||
|
||||
``-s size``
|
||||
Set the x86 stack size in bytes (default=524288)
|
||||
|
||||
``-cpu model``
|
||||
Select CPU model (-cpu help for list and additional feature
|
||||
selection)
|
||||
|
||||
``-E var=value``
|
||||
Set environment var to value.
|
||||
|
||||
``-U var``
|
||||
Remove var from the environment.
|
||||
|
||||
``-B offset``
|
||||
Offset guest address by the specified number of bytes. This is useful
|
||||
when the address region required by guest applications is reserved on
|
||||
the host. This option is currently only supported on some hosts.
|
||||
|
||||
``-R size``
|
||||
Pre-allocate a guest virtual address space of the given size (in
|
||||
bytes). \"G\", \"M\", and \"k\" suffixes may be used when specifying
|
||||
the size.
|
||||
|
||||
Debug options:
|
||||
|
||||
``-d item1,...``
|
||||
Activate logging of the specified items (use '-d help' for a list of
|
||||
log items)
|
||||
|
||||
``-g endpoint``
|
||||
Wait gdb connection to a port (e.g., ``1234``) or a unix socket (e.g.,
|
||||
``/tmp/qemu.sock``).
|
||||
|
||||
If a unix socket path contains single ``%d`` placeholder (e.g.,
|
||||
``/tmp/qemu-%d.sock``), it is replaced by the emulator PID, which is useful
|
||||
when passing this option via the ``QEMU_GDB`` environment variable to a
|
||||
multi-process application.
|
||||
|
||||
If the endpoint address is followed by ``,suspend=n`` (e.g.,
|
||||
``1234,suspend=n``), then the emulated program starts without waiting for a
|
||||
connection, which can be established at any later point in time.
|
||||
|
||||
``-one-insn-per-tb``
|
||||
Run the emulation with one guest instruction per translation block.
|
||||
This slows down emulation a lot, but can be useful in some situations,
|
||||
such as when trying to analyse the logs produced by the ``-d`` option.
|
||||
|
||||
Environment variables:
|
||||
|
||||
QEMU_STRACE
|
||||
Print system calls and arguments similar to the 'strace' program
|
||||
(NOTE: the actual 'strace' program will not work because the user
|
||||
space emulator hasn't implemented ptrace). At the moment this is
|
||||
incomplete. All system calls that don't have a specific argument
|
||||
format are printed with information for six arguments. Many
|
||||
flag-style arguments don't have decoders and will show up as numbers.
|
||||
|
||||
Other binaries
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
- user mode (Alpha)
|
||||
|
||||
* ``qemu-alpha`` TODO.
|
||||
|
||||
- user mode (Arm)
|
||||
|
||||
* ``qemu-armeb`` TODO.
|
||||
|
||||
* ``qemu-arm`` is also capable of running Arm \"Angel\" semihosted ELF
|
||||
binaries (as implemented by the arm-elf and arm-eabi Newlib/GDB
|
||||
configurations), and arm-uclinux bFLT format binaries.
|
||||
|
||||
- user mode (ColdFire)
|
||||
|
||||
- user mode (M68K)
|
||||
|
||||
* ``qemu-m68k`` is capable of running semihosted binaries using the BDM
|
||||
(m5xxx-ram-hosted.ld) or m68k-sim (sim.ld) syscall interfaces, and
|
||||
coldfire uClinux bFLT format binaries.
|
||||
|
||||
The binary format is detected automatically.
|
||||
|
||||
- user mode (i386)
|
||||
|
||||
* ``qemu-i386`` TODO.
|
||||
* ``qemu-x86_64`` TODO.
|
||||
|
||||
- user mode (Microblaze)
|
||||
|
||||
* ``qemu-microblaze`` TODO.
|
||||
|
||||
- user mode (MIPS)
|
||||
|
||||
* ``qemu-mips`` executes 32-bit big endian MIPS binaries (MIPS O32 ABI).
|
||||
|
||||
* ``qemu-mipsel`` executes 32-bit little endian MIPS binaries (MIPS O32 ABI).
|
||||
|
||||
* ``qemu-mips64`` executes 64-bit big endian MIPS binaries (MIPS N64 ABI).
|
||||
|
||||
* ``qemu-mips64el`` executes 64-bit little endian MIPS binaries (MIPS N64
|
||||
ABI).
|
||||
|
||||
* ``qemu-mipsn32`` executes 32-bit big endian MIPS binaries (MIPS N32 ABI).
|
||||
|
||||
* ``qemu-mipsn32el`` executes 32-bit little endian MIPS binaries (MIPS N32
|
||||
ABI).
|
||||
|
||||
- user mode (PowerPC)
|
||||
|
||||
* ``qemu-ppc64`` TODO.
|
||||
* ``qemu-ppc`` TODO.
|
||||
|
||||
- user mode (SH4)
|
||||
|
||||
* ``qemu-sh4eb`` TODO.
|
||||
* ``qemu-sh4`` TODO.
|
||||
|
||||
- user mode (SPARC)
|
||||
|
||||
* ``qemu-sparc`` can execute Sparc32 binaries (Sparc32 CPU, 32 bit ABI).
|
||||
|
||||
* ``qemu-sparc32plus`` can execute Sparc32 and SPARC32PLUS binaries
|
||||
(Sparc64 CPU, 32 bit ABI).
|
||||
|
||||
* ``qemu-sparc64`` can execute some Sparc64 (Sparc64 CPU, 64 bit ABI) and
|
||||
SPARC32PLUS binaries (Sparc64 CPU, 32 bit ABI).
|
||||
|
||||
.. _bsd-user-mode:
|
||||
|
||||
BSD User space emulator
|
||||
-----------------------
|
||||
|
||||
BSD Status
|
||||
~~~~~~~~~~
|
||||
|
||||
- target Sparc64 on Sparc64: Some trivial programs work.
|
||||
|
||||
Quick Start
|
||||
~~~~~~~~~~~
|
||||
|
||||
In order to launch a BSD process, QEMU needs the process executable
|
||||
itself and all the target dynamic libraries used by it.
|
||||
|
||||
- On Sparc64, you can just try to launch any process by using the
|
||||
native libraries::
|
||||
|
||||
qemu-sparc64 /bin/ls
|
||||
|
||||
Command line options
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
::
|
||||
|
||||
qemu-sparc64 [-h] [-d] [-L path] [-s size] [-bsd type] program [arguments...]
|
||||
|
||||
``-h``
|
||||
Print the help
|
||||
|
||||
``-L path``
|
||||
Set the library root path (default=/)
|
||||
|
||||
``-s size``
|
||||
Set the stack size in bytes (default=524288)
|
||||
|
||||
``-ignore-environment``
|
||||
Start with an empty environment. Without this option, the initial
|
||||
environment is a copy of the caller's environment.
|
||||
|
||||
``-E var=value``
|
||||
Set environment var to value.
|
||||
|
||||
``-U var``
|
||||
Remove var from the environment.
|
||||
|
||||
``-bsd type``
|
||||
Set the type of the emulated BSD Operating system. Valid values are
|
||||
FreeBSD, NetBSD and OpenBSD (default).
|
||||
|
||||
Debug options:
|
||||
|
||||
``-d item1,...``
|
||||
Activate logging of the specified items (use '-d help' for a list of
|
||||
log items)
|
||||
|
||||
``-one-insn-per-tb``
|
||||
Run the emulation with one guest instruction per translation block.
|
||||
This slows down emulation a lot, but can be useful in some situations,
|
||||
such as when trying to analyse the logs produced by the ``-d`` option.
|
||||
Reference in new issue
Block a user