]> Git Repo - qemu.git/blame - qemu-doc.texi
Alpha update (Falk Hueffner)
[qemu.git] / qemu-doc.texi
CommitLineData
386405f7
FB
1\input texinfo @c -*- texinfo -*-
2
3@settitle QEMU x86 Emulator Reference Documentation
4@titlepage
5@sp 7
6@center @titlefont{QEMU x86 Emulator Reference Documentation}
7@sp 3
8@end titlepage
9
10@chapter Introduction
11
12QEMU is an x86 processor emulator. Its purpose is to run x86 Linux
df0f11a0
FB
13processes on non-x86 Linux architectures such as PowerPC. By using
14dynamic translation it achieves a reasonnable speed while being easy to
15port on new host CPUs. Its main goal is to be able to launch the
16@code{Wine} Windows API emulator (@url{http://www.winehq.org}) or
17@code{DOSEMU} (@url{http://www.dosemu.org}) on non-x86 CPUs.
386405f7
FB
18
19QEMU features:
20
21@itemize
22
23@item User space only x86 emulator.
24
df0f11a0 25@item Currently ported on i386, PowerPC. Work in progress for S390, Alpha and Sparc.
386405f7 26
fd429f2f 27@item Using dynamic translation to native code for reasonnable speed.
386405f7
FB
28
29@item The virtual x86 CPU supports 16 bit and 32 bit addressing with segmentation.
df0f11a0 30User space LDT and GDT are emulated. VM86 mode is also supported.
386405f7
FB
31
32@item Generic Linux system call converter, including most ioctls.
33
34@item clone() emulation using native CPU clone() to use Linux scheduler for threads.
35
df0f11a0 36@item Accurate signal handling by remapping host signals to virtual x86 signals.
386405f7 37
df0f11a0
FB
38@item Precise user space x86 exceptions.
39
40@item Self-modifying code support.
41
42@item Support of host page sizes bigger than 4KB.
43
44@item QEMU can emulate itself on x86.
1eb87257 45
386405f7
FB
46@item The virtual x86 CPU is a library (@code{libqemu}) which can be used
47in other projects.
48
49@item An extensive Linux x86 CPU test program is included @file{tests/test-i386}.
50It can be used to test other x86 virtual CPUs.
51
52@end itemize
53
df0f11a0 54Current QEMU limitations:
386405f7
FB
55
56@itemize
57
386405f7
FB
58@item No SSE/MMX support (yet).
59
60@item No x86-64 support.
61
df0f11a0 62@item IPC syscalls are missing.
386405f7
FB
63
64@item The x86 segment limits and access rights are not tested at every
65memory access (and will never be to have good performances).
66
67@item On non x86 host CPUs, @code{double}s are used instead of the non standard
6810 byte @code{long double}s of x86 for floating point emulation to get
69maximum performances.
70
71@end itemize
72
73@chapter Invocation
74
d691f669
FB
75@section Quick Start
76
386405f7 77In order to launch a Linux process, QEMU needs the process executable
d691f669
FB
78itself and all the target (x86) dynamic libraries used by it.
79
80@itemize
386405f7 81
d691f669
FB
82@item On x86, you can just try to launch any process by using the native
83libraries:
386405f7
FB
84
85@example
d691f669 86qemu -L / /bin/ls
386405f7
FB
87@end example
88
d691f669
FB
89@code{-L /} tells that the x86 dynamic linker must be searched with a
90@file{/} prefix.
386405f7 91
1eb87257
FB
92@item Since QEMU is also a linux process, you can launch qemu with qemu:
93
94@example
95qemu -L / qemu -L / /bin/ls
96@end example
386405f7 97
d691f669 98@item On non x86 CPUs, you need first to download at least an x86 glibc
1eb87257 99(@file{qemu-XXX-i386-glibc21.tar.gz} on the QEMU web page). Ensure that
644c433c
FB
100@code{LD_LIBRARY_PATH} is not set:
101
102@example
103unset LD_LIBRARY_PATH
104@end example
105
106Then you can launch the precompiled @file{ls} x86 executable:
107
d691f669 108@example
168485b7
FB
109qemu /usr/local/qemu-i386/bin/ls-i386
110@end example
111You can look at @file{/usr/local/qemu-i386/bin/qemu-conf.sh} so that
112QEMU is automatically launched by the Linux kernel when you try to
113launch x86 executables. It requires the @code{binfmt_misc} module in the
114Linux kernel.
115
1eb87257
FB
116@item The x86 version of QEMU is also included. You can try weird things such as:
117@example
118qemu /usr/local/qemu-i386/bin/qemu-i386 /usr/local/qemu-i386/bin/ls-i386
119@end example
120
168485b7
FB
121@end itemize
122
df0f11a0 123@section Wine launch
168485b7
FB
124
125@itemize
126
127@item Ensure that you have a working QEMU with the x86 glibc
128distribution (see previous section). In order to verify it, you must be
129able to do:
130
131@example
132qemu /usr/local/qemu-i386/bin/ls-i386
133@end example
134
fd429f2f 135@item Download the binary x86 Wine install
1eb87257 136(@file{qemu-XXX-i386-wine.tar.gz} on the QEMU web page).
168485b7 137
fd429f2f 138@item Configure Wine on your account. Look at the provided script
168485b7
FB
139@file{/usr/local/qemu-i386/bin/wine-conf.sh}. Your previous
140@code{$@{HOME@}/.wine} directory is saved to @code{$@{HOME@}/.wine.org}.
141
142@item Then you can try the example @file{putty.exe}:
143
144@example
145qemu /usr/local/qemu-i386/wine/bin/wine /usr/local/qemu-i386/wine/c/Program\ Files/putty.exe
386405f7 146@end example
d691f669
FB
147
148@end itemize
149
150@section Command line options
151
152@example
153usage: qemu [-h] [-d] [-L path] [-s size] program [arguments...]
154@end example
155
df0f11a0 156@table @option
d691f669
FB
157@item -h
158Print the help
d691f669
FB
159@item -L path
160Set the x86 elf interpreter prefix (default=/usr/local/qemu-i386)
161@item -s size
162Set the x86 stack size in bytes (default=524288)
163@end table
386405f7 164
df0f11a0
FB
165Debug options:
166
167@table @option
168@item -d
169Activate log (logfile=/tmp/qemu.log)
170@item -p pagesize
171Act as if the host page size was 'pagesize' bytes
172@end table
173
386405f7
FB
174@chapter QEMU Internals
175
176@section QEMU compared to other emulators
177
178Unlike bochs [3], QEMU emulates only a user space x86 CPU. It means that
179you cannot launch an operating system with it. The benefit is that it is
180simpler and faster due to the fact that some of the low level CPU state
181can be ignored (in particular, no virtual memory needs to be emulated).
182
183Like Valgrind [2], QEMU does user space emulation and dynamic
184translation. Valgrind is mainly a memory debugger while QEMU has no
185support for it (QEMU could be used to detect out of bound memory accesses
186as Valgrind, but it has no support to track uninitialised data as
187Valgrind does). Valgrind dynamic translator generates better code than
188QEMU (in particular it does register allocation) but it is closely tied
189to an x86 host.
190
191EM86 [4] is the closest project to QEMU (and QEMU still uses some of its
192code, in particular the ELF file loader). EM86 was limited to an alpha
193host and used a proprietary and slow interpreter (the interpreter part
194of the FX!32 Digital Win32 code translator [5]).
195
fd429f2f
FB
196TWIN [6] is a Windows API emulator like Wine. It is less accurate than
197Wine but includes a protected mode x86 interpreter to launch x86 Windows
198executables. Such an approach as greater potential because most of the
199Windows API is executed natively but it is far more difficult to develop
200because all the data structures and function parameters exchanged
201between the API and the x86 code must be converted.
202
386405f7
FB
203@section Portable dynamic translation
204
205QEMU is a dynamic translator. When it first encounters a piece of code,
206it converts it to the host instruction set. Usually dynamic translators
207are very complicated and highly CPU dependant. QEMU uses some tricks
208which make it relatively easily portable and simple while achieving good
209performances.
210
211The basic idea is to split every x86 instruction into fewer simpler
212instructions. Each simple instruction is implemented by a piece of C
213code (see @file{op-i386.c}). Then a compile time tool (@file{dyngen})
214takes the corresponding object file (@file{op-i386.o}) to generate a
215dynamic code generator which concatenates the simple instructions to
216build a function (see @file{op-i386.h:dyngen_code()}).
217
218In essence, the process is similar to [1], but more work is done at
219compile time.
220
221A key idea to get optimal performances is that constant parameters can
222be passed to the simple operations. For that purpose, dummy ELF
223relocations are generated with gcc for each constant parameter. Then,
224the tool (@file{dyngen}) can locate the relocations and generate the
225appriopriate C code to resolve them when building the dynamic code.
226
227That way, QEMU is no more difficult to port than a dynamic linker.
228
229To go even faster, GCC static register variables are used to keep the
230state of the virtual CPU.
231
232@section Register allocation
233
234Since QEMU uses fixed simple instructions, no efficient register
235allocation can be done. However, because RISC CPUs have a lot of
236register, most of the virtual CPU state can be put in registers without
237doing complicated register allocation.
238
239@section Condition code optimisations
240
241Good CPU condition codes emulation (@code{EFLAGS} register on x86) is a
242critical point to get good performances. QEMU uses lazy condition code
243evaluation: instead of computing the condition codes after each x86
fd429f2f 244instruction, it just stores one operand (called @code{CC_SRC}), the
386405f7
FB
245result (called @code{CC_DST}) and the type of operation (called
246@code{CC_OP}).
247
248@code{CC_OP} is almost never explicitely set in the generated code
249because it is known at translation time.
250
251In order to increase performances, a backward pass is performed on the
252generated simple instructions (see
253@code{translate-i386.c:optimize_flags()}). When it can be proved that
254the condition codes are not needed by the next instructions, no
255condition codes are computed at all.
256
fd429f2f 257@section CPU state optimisations
386405f7
FB
258
259The x86 CPU has many internal states which change the way it evaluates
260instructions. In order to achieve a good speed, the translation phase
261considers that some state information of the virtual x86 CPU cannot
262change in it. For example, if the SS, DS and ES segments have a zero
263base, then the translator does not even generate an addition for the
264segment base.
265
266[The FPU stack pointer register is not handled that way yet].
267
268@section Translation cache
269
270A 2MByte cache holds the most recently used translations. For
271simplicity, it is completely flushed when it is full. A translation unit
272contains just a single basic block (a block of x86 instructions
273terminated by a jump or by a virtual CPU state change which the
274translator cannot deduce statically).
275
df0f11a0
FB
276@section Direct block chaining
277
278After each translated basic block is executed, QEMU uses the simulated
279Program Counter (PC) and other cpu state informations (such as the CS
280segment base value) to find the next basic block.
281
282In order to accelerate the most common cases where the new simulated PC
283is known, QEMU can patch a basic block so that it jumps directly to the
284next one.
285
286The most portable code uses an indirect jump. An indirect jump makes it
287easier to make the jump target modification atomic. On some
288architectures (such as PowerPC), the @code{JUMP} opcode is directly
289patched so that the block chaining has no overhead.
290
291@section Self-modifying code and translated code invalidation
292
293Self-modifying code is a special challenge in x86 emulation because no
294instruction cache invalidation is signaled by the application when code
295is modified.
296
297When translated code is generated for a basic block, the corresponding
298host page is write protected if it is not already read-only (with the
299system call @code{mprotect()}). Then, if a write access is done to the
300page, Linux raises a SEGV signal. QEMU then invalidates all the
301translated code in the page and enables write accesses to the page.
302
303Correct translated code invalidation is done efficiently by maintaining
304a linked list of every translated block contained in a given page. Other
305linked lists are also maintained to undo direct block chaining.
306
307Althought the overhead of doing @code{mprotect()} calls is important,
308most MSDOS programs can be emulated at reasonnable speed with QEMU and
309DOSEMU.
310
311Note that QEMU also invalidates pages of translated code when it detects
312that memory mappings are modified with @code{mmap()} or @code{munmap()}.
386405f7
FB
313
314@section Exception support
315
316longjmp() is used when an exception such as division by zero is
df0f11a0 317encountered.
386405f7 318
df0f11a0
FB
319The host SIGSEGV and SIGBUS signal handlers are used to get invalid
320memory accesses. The exact CPU state can be retrieved because all the
321x86 registers are stored in fixed host registers. The simulated program
322counter is found by retranslating the corresponding basic block and by
323looking where the host program counter was at the exception point.
324
325The virtual CPU cannot retrieve the exact @code{EFLAGS} register because
326in some cases it is not computed because of condition code
327optimisations. It is not a big concern because the emulated code can
328still be restarted in any cases.
386405f7
FB
329
330@section Linux system call translation
331
332QEMU includes a generic system call translator for Linux. It means that
333the parameters of the system calls can be converted to fix the
334endianness and 32/64 bit issues. The IOCTLs are converted with a generic
335type description system (see @file{ioctls.h} and @file{thunk.c}).
336
df0f11a0
FB
337QEMU supports host CPUs which have pages bigger than 4KB. It records all
338the mappings the process does and try to emulated the @code{mmap()}
339system calls in cases where the host @code{mmap()} call would fail
340because of bad page alignment.
341
386405f7
FB
342@section Linux signals
343
344Normal and real-time signals are queued along with their information
345(@code{siginfo_t}) as it is done in the Linux kernel. Then an interrupt
346request is done to the virtual CPU. When it is interrupted, one queued
347signal is handled by generating a stack frame in the virtual CPU as the
348Linux kernel does. The @code{sigreturn()} system call is emulated to return
349from the virtual signal handler.
350
351Some signals (such as SIGALRM) directly come from the host. Other
352signals are synthetized from the virtual CPU exceptions such as SIGFPE
353when a division by zero is done (see @code{main.c:cpu_loop()}).
354
355The blocked signal mask is still handled by the host Linux kernel so
356that most signal system calls can be redirected directly to the host
357Linux kernel. Only the @code{sigaction()} and @code{sigreturn()} system
358calls need to be fully emulated (see @file{signal.c}).
359
360@section clone() system call and threads
361
362The Linux clone() system call is usually used to create a thread. QEMU
363uses the host clone() system call so that real host threads are created
364for each emulated thread. One virtual CPU instance is created for each
365thread.
366
367The virtual x86 CPU atomic operations are emulated with a global lock so
368that their semantic is preserved.
369
df0f11a0
FB
370Note that currently there are still some locking issues in QEMU. In
371particular, the translated cache flush is not protected yet against
372reentrancy.
373
1eb87257
FB
374@section Self-virtualization
375
376QEMU was conceived so that ultimately it can emulate itself. Althought
377it is not very useful, it is an important test to show the power of the
378emulator.
379
380Achieving self-virtualization is not easy because there may be address
6cd9f35b
FB
381space conflicts. QEMU solves this problem by being an executable ELF
382shared object as the ld-linux.so ELF interpreter. That way, it can be
383relocated at load time.
1eb87257 384
386405f7
FB
385@section Bibliography
386
387@table @asis
388
389@item [1]
390@url{http://citeseer.nj.nec.com/piumarta98optimizing.html}, Optimizing
391direct threaded code by selective inlining (1998) by Ian Piumarta, Fabio
392Riccardi.
393
394@item [2]
395@url{http://developer.kde.org/~sewardj/}, Valgrind, an open-source
396memory debugger for x86-GNU/Linux, by Julian Seward.
397
398@item [3]
399@url{http://bochs.sourceforge.net/}, the Bochs IA-32 Emulator Project,
400by Kevin Lawton et al.
401
402@item [4]
403@url{http://www.cs.rose-hulman.edu/~donaldlf/em86/index.html}, the EM86
404x86 emulator on Alpha-Linux.
405
406@item [5]
407@url{http://www.usenix.org/publications/library/proceedings/usenix-nt97/full_papers/chernoff/chernoff.pdf},
408DIGITAL FX!32: Running 32-Bit x86 Applications on Alpha NT, by Anton
409Chernoff and Ray Hookway.
410
fd429f2f
FB
411@item [6]
412@url{http://www.willows.com/}, Windows API library emulation from
413Willows Software.
414
386405f7
FB
415@end table
416
417@chapter Regression Tests
418
419In the directory @file{tests/}, various interesting x86 testing programs
420are available. There are used for regression testing.
421
422@section @file{hello}
423
424Very simple statically linked x86 program, just to test QEMU during a
425port to a new host CPU.
426
427@section @file{test-i386}
428
429This program executes most of the 16 bit and 32 bit x86 instructions and
430generates a text output. It can be compared with the output obtained with
431a real CPU or another emulator. The target @code{make test} runs this
432program and a @code{diff} on the generated output.
433
434The Linux system call @code{modify_ldt()} is used to create x86 selectors
435to test some 16 bit addressing and 32 bit with segmentation cases.
436
df0f11a0 437The Linux system call @code{vm86()} is used to test vm86 emulation.
386405f7 438
df0f11a0
FB
439Various exceptions are raised to test most of the x86 user space
440exception reporting.
386405f7
FB
441
442@section @file{sha1}
443
444It is a simple benchmark. Care must be taken to interpret the results
445because it mostly tests the ability of the virtual CPU to optimize the
446@code{rol} x86 instruction and the condition code computations.
447
This page took 0.07325 seconds and 4 git commands to generate.