Commit fd429f2f6cbc77dc5440725ede80df614787ece3
1 parent
fb3e5849
update
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@66 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
38 additions
and
18 deletions
Makefile
| @@ -19,6 +19,10 @@ ifeq ($(ARCH),ppc) | @@ -19,6 +19,10 @@ ifeq ($(ARCH),ppc) | ||
| 19 | OP_CFLAGS=$(CFLAGS) | 19 | OP_CFLAGS=$(CFLAGS) |
| 20 | endif | 20 | endif |
| 21 | 21 | ||
| 22 | +ifeq ($(ARCH),s390) | ||
| 23 | +OP_CFLAGS=$(CFLAGS) | ||
| 24 | +endif | ||
| 25 | + | ||
| 22 | ifeq ($(GCC_MAJOR),3) | 26 | ifeq ($(GCC_MAJOR),3) |
| 23 | # very important to generate a return at the end of every operation | 27 | # very important to generate a return at the end of every operation |
| 24 | OP_CFLAGS+=-fno-reorder-blocks -fno-optimize-sibling-calls | 28 | OP_CFLAGS+=-fno-reorder-blocks -fno-optimize-sibling-calls |
| @@ -94,19 +98,20 @@ qemu-doc.html: qemu-doc.texi | @@ -94,19 +98,20 @@ qemu-doc.html: qemu-doc.texi | ||
| 94 | texi2html -monolithic -number $< | 98 | texi2html -monolithic -number $< |
| 95 | 99 | ||
| 96 | FILES= \ | 100 | FILES= \ |
| 97 | -README COPYING COPYING.LIB TODO Changelog VERSION \ | ||
| 98 | -dyngen.c ioctls.h ops_template.h syscall_types.h\ | 101 | +README README.distrib COPYING COPYING.LIB TODO Changelog VERSION \ |
| 102 | +dyngen.c ioctls.h ops_template.h op_string.h syscall_types.h\ | ||
| 99 | Makefile elf.h linux_bin.h segment.h thunk.c\ | 103 | Makefile elf.h linux_bin.h segment.h thunk.c\ |
| 100 | elfload.c main.c signal.c thunk.h\ | 104 | elfload.c main.c signal.c thunk.h\ |
| 101 | -cpu-i386.h qemu.h op-i386.c opc-i386.h syscall-i386.h translate-i386.c\ | 105 | +cpu-i386.h qemu.h op-i386.c opc-i386.h syscall-i386.h translate-i386.c\ |
| 102 | dis-asm.h gen-i386.h op-i386.h syscall.c\ | 106 | dis-asm.h gen-i386.h op-i386.h syscall.c\ |
| 103 | dis-buf.c i386-dis.c opreg_template.h syscall_defs.h\ | 107 | dis-buf.c i386-dis.c opreg_template.h syscall_defs.h\ |
| 104 | -i386.ld ppc.ld exec-i386.h exec-i386.c configure \ | 108 | +i386.ld ppc.ld s390.ld exec-i386.h exec-i386.c configure \ |
| 105 | tests/Makefile\ | 109 | tests/Makefile\ |
| 106 | tests/test-i386.c tests/test-i386-shift.h tests/test-i386.h\ | 110 | tests/test-i386.c tests/test-i386-shift.h tests/test-i386.h\ |
| 107 | tests/test-i386-muldiv.h tests/test-i386-code16.S\ | 111 | tests/test-i386-muldiv.h tests/test-i386-code16.S\ |
| 108 | tests/hello.c tests/hello tests/sha1.c \ | 112 | tests/hello.c tests/hello tests/sha1.c \ |
| 109 | tests/testsig.c tests/testclone.c tests/testthread.c \ | 113 | tests/testsig.c tests/testclone.c tests/testthread.c \ |
| 114 | +tests/runcom.c tests/pi_10.com \ | ||
| 110 | qemu-doc.texi qemu-doc.html | 115 | qemu-doc.texi qemu-doc.html |
| 111 | 116 | ||
| 112 | FILE=qemu-$(VERSION) | 117 | FILE=qemu-$(VERSION) |
VERSION
qemu-doc.texi
| @@ -12,8 +12,9 @@ | @@ -12,8 +12,9 @@ | ||
| 12 | QEMU is an x86 processor emulator. Its purpose is to run x86 Linux | 12 | QEMU is an x86 processor emulator. Its purpose is to run x86 Linux |
| 13 | processes on non-x86 Linux architectures such as PowerPC or ARM. By | 13 | processes on non-x86 Linux architectures such as PowerPC or ARM. By |
| 14 | using dynamic translation it achieves a reasonnable speed while being | 14 | using dynamic translation it achieves a reasonnable speed while being |
| 15 | -easy to port on new host CPUs. An obviously interesting x86 only process | ||
| 16 | -is 'wine' (Windows emulation). | 15 | +easy to port 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}) on | ||
| 17 | +non-x86 CPUs. | ||
| 17 | 18 | ||
| 18 | QEMU features: | 19 | QEMU features: |
| 19 | 20 | ||
| @@ -21,12 +22,13 @@ QEMU features: | @@ -21,12 +22,13 @@ QEMU features: | ||
| 21 | 22 | ||
| 22 | @item User space only x86 emulator. | 23 | @item User space only x86 emulator. |
| 23 | 24 | ||
| 24 | -@item Currently ported on i386 and PowerPC. | 25 | +@item Currently ported on i386, PowerPC and S390. |
| 25 | 26 | ||
| 26 | -@item Using dynamic translation for reasonnable speed. | 27 | +@item Using dynamic translation to native code for reasonnable speed. |
| 27 | 28 | ||
| 28 | @item The virtual x86 CPU supports 16 bit and 32 bit addressing with segmentation. | 29 | @item The virtual x86 CPU supports 16 bit and 32 bit addressing with segmentation. |
| 29 | -User space LDT and GDT are emulated. | 30 | +User space LDT and GDT are emulated. VM86 mode is also supported |
| 31 | +(experimental). | ||
| 30 | 32 | ||
| 31 | @item Generic Linux system call converter, including most ioctls. | 33 | @item Generic Linux system call converter, including most ioctls. |
| 32 | 34 | ||
| @@ -52,10 +54,6 @@ Current QEMU Limitations: | @@ -52,10 +54,6 @@ Current QEMU Limitations: | ||
| 52 | 54 | ||
| 53 | @item No support for self modifying code (yet). [Very few programs need that, a notable exception is QEMU itself !]. | 55 | @item No support for self modifying code (yet). [Very few programs need that, a notable exception is QEMU itself !]. |
| 54 | 56 | ||
| 55 | -@item No VM86 mode (yet), althought the virtual | ||
| 56 | -CPU has support for most of it. [VM86 support is useful to launch old 16 | ||
| 57 | -bit DOS programs with dosemu or wine]. | ||
| 58 | - | ||
| 59 | @item No SSE/MMX support (yet). | 57 | @item No SSE/MMX support (yet). |
| 60 | 58 | ||
| 61 | @item No x86-64 support. | 59 | @item No x86-64 support. |
| @@ -123,10 +121,10 @@ able to do: | @@ -123,10 +121,10 @@ able to do: | ||
| 123 | qemu /usr/local/qemu-i386/bin/ls-i386 | 121 | qemu /usr/local/qemu-i386/bin/ls-i386 |
| 124 | @end example | 122 | @end example |
| 125 | 123 | ||
| 126 | -@item Download the binary x86 wine install | 124 | +@item Download the binary x86 Wine install |
| 127 | (@file{qemu-i386-wine.tar.gz} on the QEMU web page). | 125 | (@file{qemu-i386-wine.tar.gz} on the QEMU web page). |
| 128 | 126 | ||
| 129 | -@item Configure wine on your account. Look at the provided script | 127 | +@item Configure Wine on your account. Look at the provided script |
| 130 | @file{/usr/local/qemu-i386/bin/wine-conf.sh}. Your previous | 128 | @file{/usr/local/qemu-i386/bin/wine-conf.sh}. Your previous |
| 131 | @code{$@{HOME@}/.wine} directory is saved to @code{$@{HOME@}/.wine.org}. | 129 | @code{$@{HOME@}/.wine} directory is saved to @code{$@{HOME@}/.wine.org}. |
| 132 | 130 | ||
| @@ -177,6 +175,13 @@ code, in particular the ELF file loader). EM86 was limited to an alpha | @@ -177,6 +175,13 @@ code, in particular the ELF file loader). EM86 was limited to an alpha | ||
| 177 | host and used a proprietary and slow interpreter (the interpreter part | 175 | host and used a proprietary and slow interpreter (the interpreter part |
| 178 | of the FX!32 Digital Win32 code translator [5]). | 176 | of the FX!32 Digital Win32 code translator [5]). |
| 179 | 177 | ||
| 178 | +TWIN [6] is a Windows API emulator like Wine. It is less accurate than | ||
| 179 | +Wine but includes a protected mode x86 interpreter to launch x86 Windows | ||
| 180 | +executables. Such an approach as greater potential because most of the | ||
| 181 | +Windows API is executed natively but it is far more difficult to develop | ||
| 182 | +because all the data structures and function parameters exchanged | ||
| 183 | +between the API and the x86 code must be converted. | ||
| 184 | + | ||
| 180 | @section Portable dynamic translation | 185 | @section Portable dynamic translation |
| 181 | 186 | ||
| 182 | QEMU is a dynamic translator. When it first encounters a piece of code, | 187 | QEMU is a dynamic translator. When it first encounters a piece of code, |
| @@ -218,7 +223,7 @@ doing complicated register allocation. | @@ -218,7 +223,7 @@ doing complicated register allocation. | ||
| 218 | Good CPU condition codes emulation (@code{EFLAGS} register on x86) is a | 223 | Good CPU condition codes emulation (@code{EFLAGS} register on x86) is a |
| 219 | critical point to get good performances. QEMU uses lazy condition code | 224 | critical point to get good performances. QEMU uses lazy condition code |
| 220 | evaluation: instead of computing the condition codes after each x86 | 225 | evaluation: instead of computing the condition codes after each x86 |
| 221 | -instruction, it store justs one operand (called @code{CC_CRC}), the | 226 | +instruction, it just stores one operand (called @code{CC_SRC}), the |
| 222 | result (called @code{CC_DST}) and the type of operation (called | 227 | result (called @code{CC_DST}) and the type of operation (called |
| 223 | @code{CC_OP}). | 228 | @code{CC_OP}). |
| 224 | 229 | ||
| @@ -231,7 +236,7 @@ generated simple instructions (see | @@ -231,7 +236,7 @@ generated simple instructions (see | ||
| 231 | the condition codes are not needed by the next instructions, no | 236 | the condition codes are not needed by the next instructions, no |
| 232 | condition codes are computed at all. | 237 | condition codes are computed at all. |
| 233 | 238 | ||
| 234 | -@section Translation CPU state optimisations | 239 | +@section CPU state optimisations |
| 235 | 240 | ||
| 236 | The x86 CPU has many internal states which change the way it evaluates | 241 | The x86 CPU has many internal states which change the way it evaluates |
| 237 | instructions. In order to achieve a good speed, the translation phase | 242 | instructions. In order to achieve a good speed, the translation phase |
| @@ -323,6 +328,10 @@ x86 emulator on Alpha-Linux. | @@ -323,6 +328,10 @@ x86 emulator on Alpha-Linux. | ||
| 323 | DIGITAL FX!32: Running 32-Bit x86 Applications on Alpha NT, by Anton | 328 | DIGITAL FX!32: Running 32-Bit x86 Applications on Alpha NT, by Anton |
| 324 | Chernoff and Ray Hookway. | 329 | Chernoff and Ray Hookway. |
| 325 | 330 | ||
| 331 | +@item [6] | ||
| 332 | +@url{http://www.willows.com/}, Windows API library emulation from | ||
| 333 | +Willows Software. | ||
| 334 | + | ||
| 326 | @end table | 335 | @end table |
| 327 | 336 | ||
| 328 | @chapter Regression Tests | 337 | @chapter Regression Tests |
| @@ -365,3 +374,9 @@ It is a simple benchmark. Care must be taken to interpret the results | @@ -365,3 +374,9 @@ It is a simple benchmark. Care must be taken to interpret the results | ||
| 365 | because it mostly tests the ability of the virtual CPU to optimize the | 374 | because it mostly tests the ability of the virtual CPU to optimize the |
| 366 | @code{rol} x86 instruction and the condition code computations. | 375 | @code{rol} x86 instruction and the condition code computations. |
| 367 | 376 | ||
| 377 | +@section @file{runcom} | ||
| 378 | + | ||
| 379 | +A very simple MSDOS emulator to test the Linux vm86() system call | ||
| 380 | +emulation. The excellent 54 byte @file{pi_10.com} PI number calculator | ||
| 381 | +can be launched with it. @file{pi_10.com} was written by Bertram | ||
| 382 | +Felgenhauer (more information at @url{http://www.boo.net/~jasonp/pipage.html}). |