Duplicated word "are". Signed-off-by: Lizhi Yang <sledgeh4w@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-Id: <20230511080119.99018-1-sledgeh4w@gmail.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
		
			
				
	
	
		
			191 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
Emulation
 | 
						|
=========
 | 
						|
 | 
						|
QEMU's Tiny Code Generator (TCG) provides the ability to emulate a
 | 
						|
number of CPU architectures on any supported host platform. Both
 | 
						|
:ref:`System Emulation` and :ref:`User Mode Emulation` are supported
 | 
						|
depending on the guest architecture.
 | 
						|
 | 
						|
.. list-table:: Supported Guest Architectures for Emulation
 | 
						|
  :widths: 30 10 10 50
 | 
						|
  :header-rows: 1
 | 
						|
 | 
						|
  * - Architecture (qemu name)
 | 
						|
    - System
 | 
						|
    - User
 | 
						|
    - Notes
 | 
						|
  * - Alpha
 | 
						|
    - Yes
 | 
						|
    - Yes
 | 
						|
    - Legacy 64 bit RISC ISA developed by DEC
 | 
						|
  * - Arm (arm, aarch64)
 | 
						|
    - :ref:`Yes<ARM-System-emulator>`
 | 
						|
    - Yes
 | 
						|
    - Wide range of features, see :ref:`Arm Emulation` for details
 | 
						|
  * - AVR
 | 
						|
    - :ref:`Yes<AVR-System-emulator>`
 | 
						|
    - No
 | 
						|
    - 8 bit micro controller, often used in maker projects
 | 
						|
  * - Cris
 | 
						|
    - Yes
 | 
						|
    - Yes
 | 
						|
    - Embedded RISC chip developed by AXIS
 | 
						|
  * - Hexagon
 | 
						|
    - No
 | 
						|
    - Yes
 | 
						|
    - Family of DSPs by Qualcomm
 | 
						|
  * - PA-RISC (hppa)
 | 
						|
    - Yes
 | 
						|
    - Yes
 | 
						|
    - A legacy RISC system used in HP's old minicomputers
 | 
						|
  * - x86 (i386, x86_64)
 | 
						|
    - :ref:`Yes<QEMU-PC-System-emulator>`
 | 
						|
    - Yes
 | 
						|
    - The ubiquitous desktop PC CPU architecture, 32 and 64 bit.
 | 
						|
  * - Loongarch
 | 
						|
    - Yes
 | 
						|
    - Yes
 | 
						|
    - A MIPS-like 64bit RISC architecture developed in China
 | 
						|
  * - m68k
 | 
						|
    - :ref:`Yes<ColdFire-System-emulator>`
 | 
						|
    - Yes
 | 
						|
    - Motorola 68000 variants and ColdFire
 | 
						|
  * - Microblaze
 | 
						|
    - Yes
 | 
						|
    - Yes
 | 
						|
    - RISC based soft-core by Xilinx
 | 
						|
  * - MIPS (mips*)
 | 
						|
    - :ref:`Yes<MIPS-System-emulator>`
 | 
						|
    - Yes
 | 
						|
    - Venerable RISC architecture originally out of Stanford University
 | 
						|
  * - Nios2
 | 
						|
    - Yes
 | 
						|
    - Yes
 | 
						|
    - 32 bit embedded soft-core by Altera
 | 
						|
  * - OpenRISC
 | 
						|
    - :ref:`Yes<OpenRISC-System-emulator>`
 | 
						|
    - Yes
 | 
						|
    - Open source RISC architecture developed by the OpenRISC community
 | 
						|
  * - Power (ppc, ppc64)
 | 
						|
    - :ref:`Yes<PowerPC-System-emulator>`
 | 
						|
    - Yes
 | 
						|
    - A general purpose RISC architecture now managed by IBM
 | 
						|
  * - RISC-V
 | 
						|
    - :ref:`Yes<RISC-V-System-emulator>`
 | 
						|
    - Yes
 | 
						|
    - An open standard RISC ISA maintained by RISC-V International
 | 
						|
  * - RX
 | 
						|
    - :ref:`Yes<RX-System-emulator>`
 | 
						|
    - No
 | 
						|
    - A 32 bit micro controller developed by Renesas
 | 
						|
  * - s390x
 | 
						|
    - :ref:`Yes<s390x-System-emulator>`
 | 
						|
    - Yes
 | 
						|
    - A 64 bit CPU found in IBM's System Z mainframes
 | 
						|
  * - sh4
 | 
						|
    - Yes
 | 
						|
    - Yes
 | 
						|
    - A 32 bit RISC embedded CPU developed by Hitachi
 | 
						|
  * - SPARC (sparc, sparc64)
 | 
						|
    - :ref:`Yes<Sparc32-System-emulator>`
 | 
						|
    - Yes
 | 
						|
    - A RISC ISA originally developed by Sun Microsystems
 | 
						|
  * - Tricore
 | 
						|
    - Yes
 | 
						|
    - No
 | 
						|
    - A 32 bit RISC/uController/DSP developed by Infineon
 | 
						|
  * - Xtensa
 | 
						|
    - :ref:`Yes<Xtensa-System-emulator>`
 | 
						|
    - Yes
 | 
						|
    - A configurable 32 bit soft core now owned by Cadence
 | 
						|
 | 
						|
A number of features are only available when running under
 | 
						|
emulation including :ref:`Record/Replay<replay>` and :ref:`TCG Plugins`.
 | 
						|
 | 
						|
.. _Semihosting:
 | 
						|
 | 
						|
Semihosting
 | 
						|
-----------
 | 
						|
 | 
						|
Semihosting is a feature defined by the owner of the architecture to
 | 
						|
allow programs to interact with a debugging host system. On real
 | 
						|
hardware this is usually provided by an In-circuit emulator (ICE)
 | 
						|
hooked directly to the board. QEMU's implementation allows for
 | 
						|
semihosting calls to be passed to the host system or via the
 | 
						|
``gdbstub``.
 | 
						|
 | 
						|
Generally semihosting makes it easier to bring up low level code before a
 | 
						|
more fully functional operating system has been enabled. On QEMU it
 | 
						|
also allows for embedded micro-controller code which typically doesn't
 | 
						|
have a full libc to be run as "bare-metal" code under QEMU's user-mode
 | 
						|
emulation. It is also useful for writing test cases and indeed a
 | 
						|
number of compiler suites as well as QEMU itself use semihosting calls
 | 
						|
to exit test code while reporting the success state.
 | 
						|
 | 
						|
Semihosting is only available using TCG emulation. This is because the
 | 
						|
instructions to trigger a semihosting call are typically reserved
 | 
						|
causing most hypervisors to trap and fault on them.
 | 
						|
 | 
						|
.. warning::
 | 
						|
   Semihosting inherently bypasses any isolation there may be between
 | 
						|
   the guest and the host. As a result a program using semihosting can
 | 
						|
   happily trash your host system. You should only ever run trusted
 | 
						|
   code with semihosting enabled.
 | 
						|
 | 
						|
Redirection
 | 
						|
~~~~~~~~~~~
 | 
						|
 | 
						|
Semihosting calls can be re-directed to a (potentially remote) gdb
 | 
						|
during debugging via the :ref:`gdbstub<GDB usage>`. Output to the
 | 
						|
semihosting console is configured as a ``chardev`` so can be
 | 
						|
redirected to a file, pipe or socket like any other ``chardev``
 | 
						|
device.
 | 
						|
 | 
						|
Supported Targets
 | 
						|
~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
Most targets offer similar semihosting implementations with some
 | 
						|
minor changes to define the appropriate instruction to encode the
 | 
						|
semihosting call and which registers hold the parameters. They tend to
 | 
						|
presents a simple POSIX-like API which allows your program to read and
 | 
						|
write files, access the console and some other basic interactions.
 | 
						|
 | 
						|
For full details of the ABI for a particular target, and the set of
 | 
						|
calls it provides, you should consult the semihosting specification
 | 
						|
for that architecture.
 | 
						|
 | 
						|
.. note::
 | 
						|
   QEMU makes an implementation decision to implement all file
 | 
						|
   access in ``O_BINARY`` mode. The user-visible effect of this is
 | 
						|
   regardless of the text/binary mode the program sets QEMU will
 | 
						|
   always select a binary mode ensuring no line-terminator conversion
 | 
						|
   is performed on input or output. This is because gdb semihosting
 | 
						|
   support doesn't make the distinction between the modes and
 | 
						|
   magically processing line endings can be confusing.
 | 
						|
 | 
						|
.. list-table:: Guest Architectures supporting Semihosting
 | 
						|
  :widths: 10 10 80
 | 
						|
  :header-rows: 1
 | 
						|
 | 
						|
  * - Architecture
 | 
						|
    - Modes
 | 
						|
    - Specification
 | 
						|
  * - Arm
 | 
						|
    - System and User-mode
 | 
						|
    - https://github.com/ARM-software/abi-aa/blob/main/semihosting/semihosting.rst
 | 
						|
  * - m68k
 | 
						|
    - System
 | 
						|
    - https://sourceware.org/git/?p=newlib-cygwin.git;a=blob;f=libgloss/m68k/m68k-semi.txt;hb=HEAD
 | 
						|
  * - MIPS
 | 
						|
    - System
 | 
						|
    - Unified Hosting Interface (MD01069)
 | 
						|
  * - Nios II
 | 
						|
    - System
 | 
						|
    - https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=libgloss/nios2/nios2-semi.txt;hb=HEAD
 | 
						|
  * - RISC-V
 | 
						|
    - System and User-mode
 | 
						|
    - https://github.com/riscv/riscv-semihosting-spec/blob/main/riscv-semihosting-spec.adoc
 | 
						|
  * - Xtensa
 | 
						|
    - System
 | 
						|
    - Tensilica ISS SIMCALL
 |