Annotation of qemu/qemu-tech.html, revision 1.1.1.1

1.1       root        1: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
                      2: <html>
                      3: <!-- Created on May, 1 2009 by texi2html 1.78 -->
                      4: <!--
                      5: Written by: Lionel Cons <[email protected]> (original author)
                      6:             Karl Berry  <[email protected]>
                      7:             Olaf Bachmann <[email protected]>
                      8:             and many others.
                      9: Maintained by: Many creative people.
                     10: Send bugs and suggestions to <[email protected]>
                     11: 
                     12: -->
                     13: <head>
                     14: <title>QEMU Internals</title>
                     15: 
                     16: <meta name="description" content="QEMU Internals">
                     17: <meta name="keywords" content="QEMU Internals">
                     18: <meta name="resource-type" content="document">
                     19: <meta name="distribution" content="global">
                     20: <meta name="Generator" content="texi2html 1.78">
                     21: <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
                     22: <style type="text/css">
                     23: <!--
                     24: a.summary-letter {text-decoration: none}
                     25: pre.display {font-family: serif}
                     26: pre.format {font-family: serif}
                     27: pre.menu-comment {font-family: serif}
                     28: pre.menu-preformatted {font-family: serif}
                     29: pre.smalldisplay {font-family: serif; font-size: smaller}
                     30: pre.smallexample {font-size: smaller}
                     31: pre.smallformat {font-family: serif; font-size: smaller}
                     32: pre.smalllisp {font-size: smaller}
                     33: span.roman {font-family:serif; font-weight:normal;}
                     34: span.sansserif {font-family:sans-serif; font-weight:normal;}
                     35: ul.toc {list-style: none}
                     36: -->
                     37: </style>
                     38: 
                     39: 
                     40: </head>
                     41: 
                     42: <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
                     43: 
                     44: <a name="Top"></a>
                     45: <a name="SEC_Top"></a>
                     46: <table cellpadding="1" cellspacing="1" border="0">
                     47: <tr><td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                     48: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                     49: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                     50: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                     51: </tr></table>
                     52: <h1 class="settitle">QEMU Internals
                     53: </h1>
                     54: 
                     55: <table class="menu" border="0" cellspacing="0">
                     56: <tr><td align="left" valign="top"><a href="#SEC1">1. Introduction</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                     57: </td></tr>
                     58: <tr><td align="left" valign="top"><a href="#SEC9">2. QEMU Internals</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                     59: </td></tr>
                     60: <tr><td align="left" valign="top"><a href="#SEC27">3. Regression Tests</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                     61: </td></tr>
                     62: <tr><td align="left" valign="top"><a href="#SEC31">4. Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                     63: </td></tr>
                     64: </table>
                     65: 
                     66: 
                     67: <hr size="1">
                     68: <a name="Introduction"></a>
                     69: <a name="SEC1"></a>
                     70: <table cellpadding="1" cellspacing="1" border="0">
                     71: <tr><td valign="middle" align="left">[<a href="#SEC_Top" title="Previous section in reading order"> &lt; </a>]</td>
                     72: <td valign="middle" align="left">[<a href="#SEC2" title="Next section in reading order"> &gt; </a>]</td>
                     73: <td valign="middle" align="left"> &nbsp; </td>
                     74: <td valign="middle" align="left">[ &lt;&lt; ]</td>
                     75: <td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
                     76: <td valign="middle" align="left">[<a href="#SEC9" title="Next chapter"> &gt;&gt; </a>]</td>
                     77: <td valign="middle" align="left"> &nbsp; </td>
                     78: <td valign="middle" align="left"> &nbsp; </td>
                     79: <td valign="middle" align="left"> &nbsp; </td>
                     80: <td valign="middle" align="left"> &nbsp; </td>
                     81: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                     82: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                     83: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                     84: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                     85: </tr></table>
                     86: <h1 class="chapter"> 1. Introduction </h1>
                     87: 
                     88: <table class="menu" border="0" cellspacing="0">
                     89: <tr><td align="left" valign="top"><a href="#SEC2">1.1 Features</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top"></td></tr>
                     90: <tr><td align="left" valign="top"><a href="#SEC3">1.2 x86 and x86-64 emulation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top"></td></tr>
                     91: <tr><td align="left" valign="top"><a href="#SEC4">1.3 ARM emulation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top"></td></tr>
                     92: <tr><td align="left" valign="top"><a href="#SEC5">1.4 MIPS emulation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top"></td></tr>
                     93: <tr><td align="left" valign="top"><a href="#SEC6">1.5 PowerPC emulation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top"></td></tr>
                     94: <tr><td align="left" valign="top"><a href="#SEC7">1.6 Sparc32 and Sparc64 emulation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top"></td></tr>
                     95: <tr><td align="left" valign="top"><a href="#SEC8">1.7 Other CPU emulation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top"></td></tr>
                     96: </table>
                     97: 
                     98: <hr size="6">
                     99: <a name="intro_005ffeatures"></a>
                    100: <a name="SEC2"></a>
                    101: <table cellpadding="1" cellspacing="1" border="0">
                    102: <tr><td valign="middle" align="left">[<a href="#SEC1" title="Previous section in reading order"> &lt; </a>]</td>
                    103: <td valign="middle" align="left">[<a href="#SEC3" title="Next section in reading order"> &gt; </a>]</td>
                    104: <td valign="middle" align="left"> &nbsp; </td>
                    105: <td valign="middle" align="left">[<a href="#SEC1" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    106: <td valign="middle" align="left">[<a href="#SEC1" title="Up section"> Up </a>]</td>
                    107: <td valign="middle" align="left">[<a href="#SEC9" title="Next chapter"> &gt;&gt; </a>]</td>
                    108: <td valign="middle" align="left"> &nbsp; </td>
                    109: <td valign="middle" align="left"> &nbsp; </td>
                    110: <td valign="middle" align="left"> &nbsp; </td>
                    111: <td valign="middle" align="left"> &nbsp; </td>
                    112: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    113: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    114: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    115: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    116: </tr></table>
                    117: <h2 class="section"> 1.1 Features </h2>
                    118: 
                    119: <p>QEMU is a FAST! processor emulator using a portable dynamic
                    120: translator.
                    121: </p>
                    122: <p>QEMU has two operating modes:
                    123: </p>
                    124: <ul class="toc">
                    125: <li>-
                    126: Full system emulation. In this mode (full platform virtualization),
                    127: QEMU emulates a full system (usually a PC), including a processor and
                    128: various peripherals. It can be used to launch several different
                    129: Operating Systems at once without rebooting the host machine or to
                    130: debug system code.
                    131: 
                    132: </li><li>-
                    133: User mode emulation. In this mode (application level virtualization),
                    134: QEMU can launch processes compiled for one CPU on another CPU, however
                    135: the Operating Systems must match. This can be used for example to ease
                    136: cross-compilation and cross-debugging.
                    137: </li></ul>
                    138: 
                    139: <p>As QEMU requires no host kernel driver to run, it is very safe and
                    140: easy to use.
                    141: </p>
                    142: <p>QEMU generic features:
                    143: </p>
                    144: <ul class="toc">
                    145: <li> User space only or full system emulation.
                    146: 
                    147: </li><li> Using dynamic translation to native code for reasonable speed.
                    148: 
                    149: </li><li>
                    150: Working on x86, x86_64 and PowerPC32/64 hosts. Being tested on ARM,
                    151: HPPA, Sparc32 and Sparc64. Previous versions had some support for
                    152: Alpha and S390 hosts, but TCG (see below) doesn't support those yet.
                    153: 
                    154: </li><li> Self-modifying code support.
                    155: 
                    156: </li><li> Precise exceptions support.
                    157: 
                    158: </li><li> The virtual CPU is a library (<code>libqemu</code>) which can be used
                    159: in other projects (look at &lsquo;<tt>qemu/tests/qruncom.c</tt>&rsquo; to have an
                    160: example of user mode <code>libqemu</code> usage).
                    161: 
                    162: </li><li>
                    163: Floating point library supporting both full software emulation and
                    164: native host FPU instructions.
                    165: 
                    166: </li></ul>
                    167: 
                    168: <p>QEMU user mode emulation features:
                    169: </p><ul class="toc">
                    170: <li> Generic Linux system call converter, including most ioctls.
                    171: 
                    172: </li><li> clone() emulation using native CPU clone() to use Linux scheduler for threads.
                    173: 
                    174: </li><li> Accurate signal handling by remapping host signals to target signals.
                    175: </li></ul>
                    176: 
                    177: <p>Linux user emulator (Linux host only) can be used to launch the Wine
                    178: Windows API emulator (<a href="http://www.winehq.org">http://www.winehq.org</a>). A Darwin user
                    179: emulator (Darwin hosts only) exists and a BSD user emulator for BSD
                    180: hosts is under development. It would also be possible to develop a
                    181: similar user emulator for Solaris.
                    182: </p>
                    183: <p>QEMU full system emulation features:
                    184: </p><ul class="toc">
                    185: <li>
                    186: QEMU uses a full software MMU for maximum portability.
                    187: 
                    188: </li><li>
                    189: QEMU can optionally use an in-kernel accelerator, like kqemu and
                    190: kvm. The accelerators execute some of the guest code natively, while
                    191: continuing to emulate the rest of the machine.
                    192: 
                    193: </li><li>
                    194: Various hardware devices can be emulated and in some cases, host
                    195: devices (e.g. serial and parallel ports, USB, drives) can be used
                    196: transparently by the guest Operating System. Host device passthrough
                    197: can be used for talking to external physical peripherals (e.g. a
                    198: webcam, modem or tape drive).
                    199: 
                    200: </li><li>
                    201: Symmetric multiprocessing (SMP) even on a host with a single CPU. On a
                    202: SMP host system, QEMU can use only one CPU fully due to difficulty in
                    203: implementing atomic memory accesses efficiently.
                    204: 
                    205: </li></ul>
                    206: 
                    207: <hr size="6">
                    208: <a name="intro_005fx86_005femulation"></a>
                    209: <a name="SEC3"></a>
                    210: <table cellpadding="1" cellspacing="1" border="0">
                    211: <tr><td valign="middle" align="left">[<a href="#SEC2" title="Previous section in reading order"> &lt; </a>]</td>
                    212: <td valign="middle" align="left">[<a href="#SEC4" title="Next section in reading order"> &gt; </a>]</td>
                    213: <td valign="middle" align="left"> &nbsp; </td>
                    214: <td valign="middle" align="left">[<a href="#SEC1" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    215: <td valign="middle" align="left">[<a href="#SEC1" title="Up section"> Up </a>]</td>
                    216: <td valign="middle" align="left">[<a href="#SEC9" title="Next chapter"> &gt;&gt; </a>]</td>
                    217: <td valign="middle" align="left"> &nbsp; </td>
                    218: <td valign="middle" align="left"> &nbsp; </td>
                    219: <td valign="middle" align="left"> &nbsp; </td>
                    220: <td valign="middle" align="left"> &nbsp; </td>
                    221: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    222: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    223: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    224: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    225: </tr></table>
                    226: <h2 class="section"> 1.2 x86 and x86-64 emulation </h2>
                    227: 
                    228: <p>QEMU x86 target features:
                    229: </p>
                    230: <ul class="toc">
                    231: <li> The virtual x86 CPU supports 16 bit and 32 bit addressing with segmentation.
                    232: LDT/GDT and IDT are emulated. VM86 mode is also supported to run
                    233: DOSEMU. There is some support for MMX/3DNow!, SSE, SSE2, SSE3, SSSE3,
                    234: and SSE4 as well as x86-64 SVM.
                    235: 
                    236: </li><li> Support of host page sizes bigger than 4KB in user mode emulation.
                    237: 
                    238: </li><li> QEMU can emulate itself on x86.
                    239: 
                    240: </li><li> An extensive Linux x86 CPU test program is included &lsquo;<tt>tests/test-i386</tt>&rsquo;.
                    241: It can be used to test other x86 virtual CPUs.
                    242: 
                    243: </li></ul>
                    244: 
                    245: <p>Current QEMU limitations:
                    246: </p>
                    247: <ul class="toc">
                    248: <li> Limited x86-64 support.
                    249: 
                    250: </li><li> IPC syscalls are missing.
                    251: 
                    252: </li><li> The x86 segment limits and access rights are not tested at every
                    253: memory access (yet). Hopefully, very few OSes seem to rely on that for
                    254: normal use.
                    255: 
                    256: </li></ul>
                    257: 
                    258: <hr size="6">
                    259: <a name="intro_005farm_005femulation"></a>
                    260: <a name="SEC4"></a>
                    261: <table cellpadding="1" cellspacing="1" border="0">
                    262: <tr><td valign="middle" align="left">[<a href="#SEC3" title="Previous section in reading order"> &lt; </a>]</td>
                    263: <td valign="middle" align="left">[<a href="#SEC5" title="Next section in reading order"> &gt; </a>]</td>
                    264: <td valign="middle" align="left"> &nbsp; </td>
                    265: <td valign="middle" align="left">[<a href="#SEC1" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    266: <td valign="middle" align="left">[<a href="#SEC1" title="Up section"> Up </a>]</td>
                    267: <td valign="middle" align="left">[<a href="#SEC9" title="Next chapter"> &gt;&gt; </a>]</td>
                    268: <td valign="middle" align="left"> &nbsp; </td>
                    269: <td valign="middle" align="left"> &nbsp; </td>
                    270: <td valign="middle" align="left"> &nbsp; </td>
                    271: <td valign="middle" align="left"> &nbsp; </td>
                    272: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    273: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    274: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    275: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    276: </tr></table>
                    277: <h2 class="section"> 1.3 ARM emulation </h2>
                    278: 
                    279: <ul class="toc">
                    280: <li> Full ARM 7 user emulation.
                    281: 
                    282: </li><li> NWFPE FPU support included in user Linux emulation.
                    283: 
                    284: </li><li> Can run most ARM Linux binaries.
                    285: 
                    286: </li></ul>
                    287: 
                    288: <hr size="6">
                    289: <a name="intro_005fmips_005femulation"></a>
                    290: <a name="SEC5"></a>
                    291: <table cellpadding="1" cellspacing="1" border="0">
                    292: <tr><td valign="middle" align="left">[<a href="#SEC4" title="Previous section in reading order"> &lt; </a>]</td>
                    293: <td valign="middle" align="left">[<a href="#SEC6" title="Next section in reading order"> &gt; </a>]</td>
                    294: <td valign="middle" align="left"> &nbsp; </td>
                    295: <td valign="middle" align="left">[<a href="#SEC1" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    296: <td valign="middle" align="left">[<a href="#SEC1" title="Up section"> Up </a>]</td>
                    297: <td valign="middle" align="left">[<a href="#SEC9" title="Next chapter"> &gt;&gt; </a>]</td>
                    298: <td valign="middle" align="left"> &nbsp; </td>
                    299: <td valign="middle" align="left"> &nbsp; </td>
                    300: <td valign="middle" align="left"> &nbsp; </td>
                    301: <td valign="middle" align="left"> &nbsp; </td>
                    302: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    303: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    304: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    305: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    306: </tr></table>
                    307: <h2 class="section"> 1.4 MIPS emulation </h2>
                    308: 
                    309: <ul class="toc">
                    310: <li> The system emulation allows full MIPS32/MIPS64 Release 2 emulation,
                    311: including privileged instructions, FPU and MMU, in both little and big
                    312: endian modes.
                    313: 
                    314: </li><li> The Linux userland emulation can run many 32 bit MIPS Linux binaries.
                    315: 
                    316: </li></ul>
                    317: 
                    318: <p>Current QEMU limitations:
                    319: </p>
                    320: <ul class="toc">
                    321: <li> Self-modifying code is not always handled correctly.
                    322: 
                    323: </li><li> 64 bit userland emulation is not implemented.
                    324: 
                    325: </li><li> The system emulation is not complete enough to run real firmware.
                    326: 
                    327: </li><li> The watchpoint debug facility is not implemented.
                    328: 
                    329: </li></ul>
                    330: 
                    331: <hr size="6">
                    332: <a name="intro_005fppc_005femulation"></a>
                    333: <a name="SEC6"></a>
                    334: <table cellpadding="1" cellspacing="1" border="0">
                    335: <tr><td valign="middle" align="left">[<a href="#SEC5" title="Previous section in reading order"> &lt; </a>]</td>
                    336: <td valign="middle" align="left">[<a href="#SEC7" title="Next section in reading order"> &gt; </a>]</td>
                    337: <td valign="middle" align="left"> &nbsp; </td>
                    338: <td valign="middle" align="left">[<a href="#SEC1" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    339: <td valign="middle" align="left">[<a href="#SEC1" title="Up section"> Up </a>]</td>
                    340: <td valign="middle" align="left">[<a href="#SEC9" title="Next chapter"> &gt;&gt; </a>]</td>
                    341: <td valign="middle" align="left"> &nbsp; </td>
                    342: <td valign="middle" align="left"> &nbsp; </td>
                    343: <td valign="middle" align="left"> &nbsp; </td>
                    344: <td valign="middle" align="left"> &nbsp; </td>
                    345: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    346: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    347: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    348: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    349: </tr></table>
                    350: <h2 class="section"> 1.5 PowerPC emulation </h2>
                    351: 
                    352: <ul class="toc">
                    353: <li> Full PowerPC 32 bit emulation, including privileged instructions,
                    354: FPU and MMU.
                    355: 
                    356: </li><li> Can run most PowerPC Linux binaries.
                    357: 
                    358: </li></ul>
                    359: 
                    360: <hr size="6">
                    361: <a name="intro_005fsparc_005femulation"></a>
                    362: <a name="SEC7"></a>
                    363: <table cellpadding="1" cellspacing="1" border="0">
                    364: <tr><td valign="middle" align="left">[<a href="#SEC6" title="Previous section in reading order"> &lt; </a>]</td>
                    365: <td valign="middle" align="left">[<a href="#SEC8" title="Next section in reading order"> &gt; </a>]</td>
                    366: <td valign="middle" align="left"> &nbsp; </td>
                    367: <td valign="middle" align="left">[<a href="#SEC1" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    368: <td valign="middle" align="left">[<a href="#SEC1" title="Up section"> Up </a>]</td>
                    369: <td valign="middle" align="left">[<a href="#SEC9" title="Next chapter"> &gt;&gt; </a>]</td>
                    370: <td valign="middle" align="left"> &nbsp; </td>
                    371: <td valign="middle" align="left"> &nbsp; </td>
                    372: <td valign="middle" align="left"> &nbsp; </td>
                    373: <td valign="middle" align="left"> &nbsp; </td>
                    374: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    375: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    376: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    377: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    378: </tr></table>
                    379: <h2 class="section"> 1.6 Sparc32 and Sparc64 emulation </h2>
                    380: 
                    381: <ul class="toc">
                    382: <li> Full SPARC V8 emulation, including privileged
                    383: instructions, FPU and MMU. SPARC V9 emulation includes most privileged
                    384: and VIS instructions, FPU and I/D MMU. Alignment is fully enforced.
                    385: 
                    386: </li><li> Can run most 32-bit SPARC Linux binaries, SPARC32PLUS Linux binaries and
                    387: some 64-bit SPARC Linux binaries.
                    388: 
                    389: </li></ul>
                    390: 
                    391: <p>Current QEMU limitations:
                    392: </p>
                    393: <ul class="toc">
                    394: <li> IPC syscalls are missing.
                    395: 
                    396: </li><li> Floating point exception support is buggy.
                    397: 
                    398: </li><li> Atomic instructions are not correctly implemented.
                    399: 
                    400: </li><li> There are still some problems with Sparc64 emulators.
                    401: 
                    402: </li></ul>
                    403: 
                    404: <hr size="6">
                    405: <a name="intro_005fother_005femulation"></a>
                    406: <a name="SEC8"></a>
                    407: <table cellpadding="1" cellspacing="1" border="0">
                    408: <tr><td valign="middle" align="left">[<a href="#SEC7" title="Previous section in reading order"> &lt; </a>]</td>
                    409: <td valign="middle" align="left">[<a href="#SEC9" title="Next section in reading order"> &gt; </a>]</td>
                    410: <td valign="middle" align="left"> &nbsp; </td>
                    411: <td valign="middle" align="left">[<a href="#SEC1" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    412: <td valign="middle" align="left">[<a href="#SEC1" title="Up section"> Up </a>]</td>
                    413: <td valign="middle" align="left">[<a href="#SEC9" title="Next chapter"> &gt;&gt; </a>]</td>
                    414: <td valign="middle" align="left"> &nbsp; </td>
                    415: <td valign="middle" align="left"> &nbsp; </td>
                    416: <td valign="middle" align="left"> &nbsp; </td>
                    417: <td valign="middle" align="left"> &nbsp; </td>
                    418: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    419: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    420: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    421: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    422: </tr></table>
                    423: <h2 class="section"> 1.7 Other CPU emulation </h2>
                    424: 
                    425: <p>In addition to the above, QEMU supports emulation of other CPUs with
                    426: varying levels of success. These are:
                    427: </p>
                    428: <ul class="toc">
                    429: <li>
                    430: Alpha
                    431: </li><li>
                    432: CRIS
                    433: </li><li>
                    434: M68k
                    435: </li><li>
                    436: SH4
                    437: </li></ul>
                    438: 
                    439: <hr size="6">
                    440: <a name="QEMU-Internals"></a>
                    441: <a name="SEC9"></a>
                    442: <table cellpadding="1" cellspacing="1" border="0">
                    443: <tr><td valign="middle" align="left">[<a href="#SEC8" title="Previous section in reading order"> &lt; </a>]</td>
                    444: <td valign="middle" align="left">[<a href="#SEC10" title="Next section in reading order"> &gt; </a>]</td>
                    445: <td valign="middle" align="left"> &nbsp; </td>
                    446: <td valign="middle" align="left">[<a href="#SEC1" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    447: <td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
                    448: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    449: <td valign="middle" align="left"> &nbsp; </td>
                    450: <td valign="middle" align="left"> &nbsp; </td>
                    451: <td valign="middle" align="left"> &nbsp; </td>
                    452: <td valign="middle" align="left"> &nbsp; </td>
                    453: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    454: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    455: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    456: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    457: </tr></table>
                    458: <h1 class="chapter"> 2. QEMU Internals </h1>
                    459: 
                    460: <table class="menu" border="0" cellspacing="0">
                    461: <tr><td align="left" valign="top"><a href="#SEC10">2.1 QEMU compared to other emulators</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    462: </td></tr>
                    463: <tr><td align="left" valign="top"><a href="#SEC11">2.2 Portable dynamic translation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    464: </td></tr>
                    465: <tr><td align="left" valign="top"><a href="#SEC12">2.3 Condition code optimisations</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    466: </td></tr>
                    467: <tr><td align="left" valign="top"><a href="#SEC13">2.4 CPU state optimisations</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    468: </td></tr>
                    469: <tr><td align="left" valign="top"><a href="#SEC14">2.5 Translation cache</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    470: </td></tr>
                    471: <tr><td align="left" valign="top"><a href="#SEC15">2.6 Direct block chaining</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    472: </td></tr>
                    473: <tr><td align="left" valign="top"><a href="#SEC16">2.7 Self-modifying code and translated code invalidation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    474: </td></tr>
                    475: <tr><td align="left" valign="top"><a href="#SEC17">2.8 Exception support</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    476: </td></tr>
                    477: <tr><td align="left" valign="top"><a href="#SEC18">2.9 MMU emulation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    478: </td></tr>
                    479: <tr><td align="left" valign="top"><a href="#SEC19">2.10 Device emulation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    480: </td></tr>
                    481: <tr><td align="left" valign="top"><a href="#SEC20">2.11 Hardware interrupts</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    482: </td></tr>
                    483: <tr><td align="left" valign="top"><a href="#SEC21">2.12 User emulation specific details</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    484: </td></tr>
                    485: <tr><td align="left" valign="top"><a href="#SEC26">2.13 Bibliography</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                    486: </td></tr>
                    487: </table>
                    488: 
                    489: <hr size="6">
                    490: <a name="QEMU-compared-to-other-emulators"></a>
                    491: <a name="SEC10"></a>
                    492: <table cellpadding="1" cellspacing="1" border="0">
                    493: <tr><td valign="middle" align="left">[<a href="#SEC9" title="Previous section in reading order"> &lt; </a>]</td>
                    494: <td valign="middle" align="left">[<a href="#SEC11" title="Next section in reading order"> &gt; </a>]</td>
                    495: <td valign="middle" align="left"> &nbsp; </td>
                    496: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    497: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    498: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    499: <td valign="middle" align="left"> &nbsp; </td>
                    500: <td valign="middle" align="left"> &nbsp; </td>
                    501: <td valign="middle" align="left"> &nbsp; </td>
                    502: <td valign="middle" align="left"> &nbsp; </td>
                    503: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    504: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    505: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    506: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    507: </tr></table>
                    508: <h2 class="section"> 2.1 QEMU compared to other emulators </h2>
                    509: 
                    510: <p>Like bochs [3], QEMU emulates an x86 CPU. But QEMU is much faster than
                    511: bochs as it uses dynamic compilation. Bochs is closely tied to x86 PC
                    512: emulation while QEMU can emulate several processors.
                    513: </p>
                    514: <p>Like Valgrind [2], QEMU does user space emulation and dynamic
                    515: translation. Valgrind is mainly a memory debugger while QEMU has no
                    516: support for it (QEMU could be used to detect out of bound memory
                    517: accesses as Valgrind, but it has no support to track uninitialised data
                    518: as Valgrind does). The Valgrind dynamic translator generates better code
                    519: than QEMU (in particular it does register allocation) but it is closely
                    520: tied to an x86 host and target and has no support for precise exceptions
                    521: and system emulation.
                    522: </p>
                    523: <p>EM86 [4] is the closest project to user space QEMU (and QEMU still uses
                    524: some of its code, in particular the ELF file loader). EM86 was limited
                    525: to an alpha host and used a proprietary and slow interpreter (the
                    526: interpreter part of the FX!32 Digital Win32 code translator [5]).
                    527: </p>
                    528: <p>TWIN [6] is a Windows API emulator like Wine. It is less accurate than
                    529: Wine but includes a protected mode x86 interpreter to launch x86 Windows
                    530: executables. Such an approach has greater potential because most of the
                    531: Windows API is executed natively but it is far more difficult to develop
                    532: because all the data structures and function parameters exchanged
                    533: between the API and the x86 code must be converted.
                    534: </p>
                    535: <p>User mode Linux [7] was the only solution before QEMU to launch a
                    536: Linux kernel as a process while not needing any host kernel
                    537: patches. However, user mode Linux requires heavy kernel patches while
                    538: QEMU accepts unpatched Linux kernels. The price to pay is that QEMU is
                    539: slower.
                    540: </p>
                    541: <p>The Plex86 [8] PC virtualizer is done in the same spirit as the now
                    542: obsolete qemu-fast system emulator. It requires a patched Linux kernel
                    543: to work (you cannot launch the same kernel on your PC), but the
                    544: patches are really small. As it is a PC virtualizer (no emulation is
                    545: done except for some privileged instructions), it has the potential of
                    546: being faster than QEMU. The downside is that a complicated (and
                    547: potentially unsafe) host kernel patch is needed.
                    548: </p>
                    549: <p>The commercial PC Virtualizers (VMWare [9], VirtualPC [10], TwoOStwo
                    550: [11]) are faster than QEMU, but they all need specific, proprietary
                    551: and potentially unsafe host drivers. Moreover, they are unable to
                    552: provide cycle exact simulation as an emulator can.
                    553: </p>
                    554: <p>VirtualBox [12], Xen [13] and KVM [14] are based on QEMU. QEMU-SystemC
                    555: [15] uses QEMU to simulate a system where some hardware devices are
                    556: developed in SystemC.
                    557: </p>
                    558: <hr size="6">
                    559: <a name="Portable-dynamic-translation"></a>
                    560: <a name="SEC11"></a>
                    561: <table cellpadding="1" cellspacing="1" border="0">
                    562: <tr><td valign="middle" align="left">[<a href="#SEC10" title="Previous section in reading order"> &lt; </a>]</td>
                    563: <td valign="middle" align="left">[<a href="#SEC12" title="Next section in reading order"> &gt; </a>]</td>
                    564: <td valign="middle" align="left"> &nbsp; </td>
                    565: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    566: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    567: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    568: <td valign="middle" align="left"> &nbsp; </td>
                    569: <td valign="middle" align="left"> &nbsp; </td>
                    570: <td valign="middle" align="left"> &nbsp; </td>
                    571: <td valign="middle" align="left"> &nbsp; </td>
                    572: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    573: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    574: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    575: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    576: </tr></table>
                    577: <h2 class="section"> 2.2 Portable dynamic translation </h2>
                    578: 
                    579: <p>QEMU is a dynamic translator. When it first encounters a piece of code,
                    580: it converts it to the host instruction set. Usually dynamic translators
                    581: are very complicated and highly CPU dependent. QEMU uses some tricks
                    582: which make it relatively easily portable and simple while achieving good
                    583: performances.
                    584: </p>
                    585: <p>After the release of version 0.9.1, QEMU switched to a new method of
                    586: generating code, Tiny Code Generator or TCG. TCG relaxes the
                    587: dependency on the exact version of the compiler used. The basic idea
                    588: is to split every target instruction into a couple of RISC-like TCG
                    589: ops (see <code>target-i386/translate.c</code>). Some optimizations can be
                    590: performed at this stage, including liveness analysis and trivial
                    591: constant expression evaluation. TCG ops are then implemented in the
                    592: host CPU back end, also known as TCG target (see
                    593: <code>tcg/i386/tcg-target.c</code>). For more information, please take a
                    594: look at <code>tcg/README</code>.
                    595: </p>
                    596: <hr size="6">
                    597: <a name="Condition-code-optimisations"></a>
                    598: <a name="SEC12"></a>
                    599: <table cellpadding="1" cellspacing="1" border="0">
                    600: <tr><td valign="middle" align="left">[<a href="#SEC11" title="Previous section in reading order"> &lt; </a>]</td>
                    601: <td valign="middle" align="left">[<a href="#SEC13" title="Next section in reading order"> &gt; </a>]</td>
                    602: <td valign="middle" align="left"> &nbsp; </td>
                    603: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    604: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    605: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    606: <td valign="middle" align="left"> &nbsp; </td>
                    607: <td valign="middle" align="left"> &nbsp; </td>
                    608: <td valign="middle" align="left"> &nbsp; </td>
                    609: <td valign="middle" align="left"> &nbsp; </td>
                    610: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    611: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    612: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    613: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    614: </tr></table>
                    615: <h2 class="section"> 2.3 Condition code optimisations </h2>
                    616: 
                    617: <p>Lazy evaluation of CPU condition codes (<code>EFLAGS</code> register on x86)
                    618: is important for CPUs where every instruction sets the condition
                    619: codes. It tends to be less important on conventional RISC systems
                    620: where condition codes are only updated when explicitly requested.
                    621: </p>
                    622: <p>Instead of computing the condition codes after each x86 instruction,
                    623: QEMU just stores one operand (called <code>CC_SRC</code>), the result
                    624: (called <code>CC_DST</code>) and the type of operation (called
                    625: <code>CC_OP</code>). When the condition codes are needed, the condition
                    626: codes can be calculated using this information. In addition, an
                    627: optimized calculation can be performed for some instruction types like
                    628: conditional branches.
                    629: </p>
                    630: <p><code>CC_OP</code> is almost never explicitly set in the generated code
                    631: because it is known at translation time.
                    632: </p>
                    633: <p>The lazy condition code evaluation is used on x86, m68k and cris. ARM
                    634: uses a simplified variant for the N and Z flags.
                    635: </p>
                    636: <hr size="6">
                    637: <a name="CPU-state-optimisations"></a>
                    638: <a name="SEC13"></a>
                    639: <table cellpadding="1" cellspacing="1" border="0">
                    640: <tr><td valign="middle" align="left">[<a href="#SEC12" title="Previous section in reading order"> &lt; </a>]</td>
                    641: <td valign="middle" align="left">[<a href="#SEC14" title="Next section in reading order"> &gt; </a>]</td>
                    642: <td valign="middle" align="left"> &nbsp; </td>
                    643: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    644: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    645: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    646: <td valign="middle" align="left"> &nbsp; </td>
                    647: <td valign="middle" align="left"> &nbsp; </td>
                    648: <td valign="middle" align="left"> &nbsp; </td>
                    649: <td valign="middle" align="left"> &nbsp; </td>
                    650: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    651: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    652: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    653: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    654: </tr></table>
                    655: <h2 class="section"> 2.4 CPU state optimisations </h2>
                    656: 
                    657: <p>The target CPUs have many internal states which change the way it
                    658: evaluates instructions. In order to achieve a good speed, the
                    659: translation phase considers that some state information of the virtual
                    660: CPU cannot change in it. The state is recorded in the Translation
                    661: Block (TB). If the state changes (e.g. privilege level), a new TB will
                    662: be generated and the previous TB won't be used anymore until the state
                    663: matches the state recorded in the previous TB. For example, if the SS,
                    664: DS and ES segments have a zero base, then the translator does not even
                    665: generate an addition for the segment base.
                    666: </p>
                    667: <p>[The FPU stack pointer register is not handled that way yet].
                    668: </p>
                    669: <hr size="6">
                    670: <a name="Translation-cache"></a>
                    671: <a name="SEC14"></a>
                    672: <table cellpadding="1" cellspacing="1" border="0">
                    673: <tr><td valign="middle" align="left">[<a href="#SEC13" title="Previous section in reading order"> &lt; </a>]</td>
                    674: <td valign="middle" align="left">[<a href="#SEC15" title="Next section in reading order"> &gt; </a>]</td>
                    675: <td valign="middle" align="left"> &nbsp; </td>
                    676: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    677: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    678: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    679: <td valign="middle" align="left"> &nbsp; </td>
                    680: <td valign="middle" align="left"> &nbsp; </td>
                    681: <td valign="middle" align="left"> &nbsp; </td>
                    682: <td valign="middle" align="left"> &nbsp; </td>
                    683: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    684: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    685: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    686: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    687: </tr></table>
                    688: <h2 class="section"> 2.5 Translation cache </h2>
                    689: 
                    690: <p>A 16 MByte cache holds the most recently used translations. For
                    691: simplicity, it is completely flushed when it is full. A translation unit
                    692: contains just a single basic block (a block of x86 instructions
                    693: terminated by a jump or by a virtual CPU state change which the
                    694: translator cannot deduce statically).
                    695: </p>
                    696: <hr size="6">
                    697: <a name="Direct-block-chaining"></a>
                    698: <a name="SEC15"></a>
                    699: <table cellpadding="1" cellspacing="1" border="0">
                    700: <tr><td valign="middle" align="left">[<a href="#SEC14" title="Previous section in reading order"> &lt; </a>]</td>
                    701: <td valign="middle" align="left">[<a href="#SEC16" title="Next section in reading order"> &gt; </a>]</td>
                    702: <td valign="middle" align="left"> &nbsp; </td>
                    703: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    704: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    705: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    706: <td valign="middle" align="left"> &nbsp; </td>
                    707: <td valign="middle" align="left"> &nbsp; </td>
                    708: <td valign="middle" align="left"> &nbsp; </td>
                    709: <td valign="middle" align="left"> &nbsp; </td>
                    710: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    711: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    712: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    713: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    714: </tr></table>
                    715: <h2 class="section"> 2.6 Direct block chaining </h2>
                    716: 
                    717: <p>After each translated basic block is executed, QEMU uses the simulated
                    718: Program Counter (PC) and other cpu state informations (such as the CS
                    719: segment base value) to find the next basic block.
                    720: </p>
                    721: <p>In order to accelerate the most common cases where the new simulated PC
                    722: is known, QEMU can patch a basic block so that it jumps directly to the
                    723: next one.
                    724: </p>
                    725: <p>The most portable code uses an indirect jump. An indirect jump makes
                    726: it easier to make the jump target modification atomic. On some host
                    727: architectures (such as x86 or PowerPC), the <code>JUMP</code> opcode is
                    728: directly patched so that the block chaining has no overhead.
                    729: </p>
                    730: <hr size="6">
                    731: <a name="Self_002dmodifying-code-and-translated-code-invalidation"></a>
                    732: <a name="SEC16"></a>
                    733: <table cellpadding="1" cellspacing="1" border="0">
                    734: <tr><td valign="middle" align="left">[<a href="#SEC15" title="Previous section in reading order"> &lt; </a>]</td>
                    735: <td valign="middle" align="left">[<a href="#SEC17" title="Next section in reading order"> &gt; </a>]</td>
                    736: <td valign="middle" align="left"> &nbsp; </td>
                    737: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    738: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    739: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    740: <td valign="middle" align="left"> &nbsp; </td>
                    741: <td valign="middle" align="left"> &nbsp; </td>
                    742: <td valign="middle" align="left"> &nbsp; </td>
                    743: <td valign="middle" align="left"> &nbsp; </td>
                    744: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    745: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    746: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    747: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    748: </tr></table>
                    749: <h2 class="section"> 2.7 Self-modifying code and translated code invalidation </h2>
                    750: 
                    751: <p>Self-modifying code is a special challenge in x86 emulation because no
                    752: instruction cache invalidation is signaled by the application when code
                    753: is modified.
                    754: </p>
                    755: <p>When translated code is generated for a basic block, the corresponding
                    756: host page is write protected if it is not already read-only. Then, if
                    757: a write access is done to the page, Linux raises a SEGV signal. QEMU
                    758: then invalidates all the translated code in the page and enables write
                    759: accesses to the page.
                    760: </p>
                    761: <p>Correct translated code invalidation is done efficiently by maintaining
                    762: a linked list of every translated block contained in a given page. Other
                    763: linked lists are also maintained to undo direct block chaining.
                    764: </p>
                    765: <p>On RISC targets, correctly written software uses memory barriers and
                    766: cache flushes, so some of the protection above would not be
                    767: necessary. However, QEMU still requires that the generated code always
                    768: matches the target instructions in memory in order to handle
                    769: exceptions correctly.
                    770: </p>
                    771: <hr size="6">
                    772: <a name="Exception-support"></a>
                    773: <a name="SEC17"></a>
                    774: <table cellpadding="1" cellspacing="1" border="0">
                    775: <tr><td valign="middle" align="left">[<a href="#SEC16" title="Previous section in reading order"> &lt; </a>]</td>
                    776: <td valign="middle" align="left">[<a href="#SEC18" title="Next section in reading order"> &gt; </a>]</td>
                    777: <td valign="middle" align="left"> &nbsp; </td>
                    778: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    779: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    780: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    781: <td valign="middle" align="left"> &nbsp; </td>
                    782: <td valign="middle" align="left"> &nbsp; </td>
                    783: <td valign="middle" align="left"> &nbsp; </td>
                    784: <td valign="middle" align="left"> &nbsp; </td>
                    785: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    786: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    787: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    788: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    789: </tr></table>
                    790: <h2 class="section"> 2.8 Exception support </h2>
                    791: 
                    792: <p>longjmp() is used when an exception such as division by zero is
                    793: encountered.
                    794: </p>
                    795: <p>The host SIGSEGV and SIGBUS signal handlers are used to get invalid
                    796: memory accesses. The simulated program counter is found by
                    797: retranslating the corresponding basic block and by looking where the
                    798: host program counter was at the exception point.
                    799: </p>
                    800: <p>The virtual CPU cannot retrieve the exact <code>EFLAGS</code> register because
                    801: in some cases it is not computed because of condition code
                    802: optimisations. It is not a big concern because the emulated code can
                    803: still be restarted in any cases.
                    804: </p>
                    805: <hr size="6">
                    806: <a name="MMU-emulation"></a>
                    807: <a name="SEC18"></a>
                    808: <table cellpadding="1" cellspacing="1" border="0">
                    809: <tr><td valign="middle" align="left">[<a href="#SEC17" title="Previous section in reading order"> &lt; </a>]</td>
                    810: <td valign="middle" align="left">[<a href="#SEC19" title="Next section in reading order"> &gt; </a>]</td>
                    811: <td valign="middle" align="left"> &nbsp; </td>
                    812: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    813: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    814: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    815: <td valign="middle" align="left"> &nbsp; </td>
                    816: <td valign="middle" align="left"> &nbsp; </td>
                    817: <td valign="middle" align="left"> &nbsp; </td>
                    818: <td valign="middle" align="left"> &nbsp; </td>
                    819: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    820: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    821: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    822: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    823: </tr></table>
                    824: <h2 class="section"> 2.9 MMU emulation </h2>
                    825: 
                    826: <p>For system emulation QEMU supports a soft MMU. In that mode, the MMU
                    827: virtual to physical address translation is done at every memory
                    828: access. QEMU uses an address translation cache to speed up the
                    829: translation.
                    830: </p>
                    831: <p>In order to avoid flushing the translated code each time the MMU
                    832: mappings change, QEMU uses a physically indexed translation cache. It
                    833: means that each basic block is indexed with its physical address.
                    834: </p>
                    835: <p>When MMU mappings change, only the chaining of the basic blocks is
                    836: reset (i.e. a basic block can no longer jump directly to another one).
                    837: </p>
                    838: <hr size="6">
                    839: <a name="Device-emulation"></a>
                    840: <a name="SEC19"></a>
                    841: <table cellpadding="1" cellspacing="1" border="0">
                    842: <tr><td valign="middle" align="left">[<a href="#SEC18" title="Previous section in reading order"> &lt; </a>]</td>
                    843: <td valign="middle" align="left">[<a href="#SEC20" title="Next section in reading order"> &gt; </a>]</td>
                    844: <td valign="middle" align="left"> &nbsp; </td>
                    845: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    846: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    847: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    848: <td valign="middle" align="left"> &nbsp; </td>
                    849: <td valign="middle" align="left"> &nbsp; </td>
                    850: <td valign="middle" align="left"> &nbsp; </td>
                    851: <td valign="middle" align="left"> &nbsp; </td>
                    852: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    853: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    854: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    855: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    856: </tr></table>
                    857: <h2 class="section"> 2.10 Device emulation </h2>
                    858: 
                    859: <p>Systems emulated by QEMU are organized by boards. At initialization
                    860: phase, each board instantiates a number of CPUs, devices, RAM and
                    861: ROM. Each device in turn can assign I/O ports or memory areas (for
                    862: MMIO) to its handlers. When the emulation starts, an access to the
                    863: ports or MMIO memory areas assigned to the device causes the
                    864: corresponding handler to be called.
                    865: </p>
                    866: <p>RAM and ROM are handled more optimally, only the offset to the host
                    867: memory needs to be added to the guest address.
                    868: </p>
                    869: <p>The video RAM of VGA and other display cards is special: it can be
                    870: read or written directly like RAM, but write accesses cause the memory
                    871: to be marked with VGA_DIRTY flag as well.
                    872: </p>
                    873: <p>QEMU supports some device classes like serial and parallel ports, USB,
                    874: drives and network devices, by providing APIs for easier connection to
                    875: the generic, higher level implementations. The API hides the
                    876: implementation details from the devices, like native device use or
                    877: advanced block device formats like QCOW.
                    878: </p>
                    879: <p>Usually the devices implement a reset method and register support for
                    880: saving and loading of the device state. The devices can also use
                    881: timers, especially together with the use of bottom halves (BHs).
                    882: </p>
                    883: <hr size="6">
                    884: <a name="Hardware-interrupts"></a>
                    885: <a name="SEC20"></a>
                    886: <table cellpadding="1" cellspacing="1" border="0">
                    887: <tr><td valign="middle" align="left">[<a href="#SEC19" title="Previous section in reading order"> &lt; </a>]</td>
                    888: <td valign="middle" align="left">[<a href="#SEC21" title="Next section in reading order"> &gt; </a>]</td>
                    889: <td valign="middle" align="left"> &nbsp; </td>
                    890: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    891: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    892: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    893: <td valign="middle" align="left"> &nbsp; </td>
                    894: <td valign="middle" align="left"> &nbsp; </td>
                    895: <td valign="middle" align="left"> &nbsp; </td>
                    896: <td valign="middle" align="left"> &nbsp; </td>
                    897: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    898: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    899: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    900: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    901: </tr></table>
                    902: <h2 class="section"> 2.11 Hardware interrupts </h2>
                    903: 
                    904: <p>In order to be faster, QEMU does not check at every basic block if an
                    905: hardware interrupt is pending. Instead, the user must asynchrously
                    906: call a specific function to tell that an interrupt is pending. This
                    907: function resets the chaining of the currently executing basic
                    908: block. It ensures that the execution will return soon in the main loop
                    909: of the CPU emulator. Then the main loop can test if the interrupt is
                    910: pending and handle it.
                    911: </p>
                    912: <hr size="6">
                    913: <a name="User-emulation-specific-details"></a>
                    914: <a name="SEC21"></a>
                    915: <table cellpadding="1" cellspacing="1" border="0">
                    916: <tr><td valign="middle" align="left">[<a href="#SEC20" title="Previous section in reading order"> &lt; </a>]</td>
                    917: <td valign="middle" align="left">[<a href="#SEC22" title="Next section in reading order"> &gt; </a>]</td>
                    918: <td valign="middle" align="left"> &nbsp; </td>
                    919: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    920: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                    921: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    922: <td valign="middle" align="left"> &nbsp; </td>
                    923: <td valign="middle" align="left"> &nbsp; </td>
                    924: <td valign="middle" align="left"> &nbsp; </td>
                    925: <td valign="middle" align="left"> &nbsp; </td>
                    926: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    927: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    928: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    929: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    930: </tr></table>
                    931: <h2 class="section"> 2.12 User emulation specific details </h2>
                    932: 
                    933: <hr size="6">
                    934: <a name="SEC22"></a>
                    935: <table cellpadding="1" cellspacing="1" border="0">
                    936: <tr><td valign="middle" align="left">[<a href="#SEC21" title="Previous section in reading order"> &lt; </a>]</td>
                    937: <td valign="middle" align="left">[<a href="#SEC23" title="Next section in reading order"> &gt; </a>]</td>
                    938: <td valign="middle" align="left"> &nbsp; </td>
                    939: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    940: <td valign="middle" align="left">[<a href="#SEC21" title="Up section"> Up </a>]</td>
                    941: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    942: <td valign="middle" align="left"> &nbsp; </td>
                    943: <td valign="middle" align="left"> &nbsp; </td>
                    944: <td valign="middle" align="left"> &nbsp; </td>
                    945: <td valign="middle" align="left"> &nbsp; </td>
                    946: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    947: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    948: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    949: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    950: </tr></table>
                    951: <h3 class="subsection"> 2.12.1 Linux system call translation </h3>
                    952: 
                    953: <p>QEMU includes a generic system call translator for Linux. It means that
                    954: the parameters of the system calls can be converted to fix the
                    955: endianness and 32/64 bit issues. The IOCTLs are converted with a generic
                    956: type description system (see &lsquo;<tt>ioctls.h</tt>&rsquo; and &lsquo;<tt>thunk.c</tt>&rsquo;).
                    957: </p>
                    958: <p>QEMU supports host CPUs which have pages bigger than 4KB. It records all
                    959: the mappings the process does and try to emulated the <code>mmap()</code>
                    960: system calls in cases where the host <code>mmap()</code> call would fail
                    961: because of bad page alignment.
                    962: </p>
                    963: <hr size="6">
                    964: <a name="SEC23"></a>
                    965: <table cellpadding="1" cellspacing="1" border="0">
                    966: <tr><td valign="middle" align="left">[<a href="#SEC22" title="Previous section in reading order"> &lt; </a>]</td>
                    967: <td valign="middle" align="left">[<a href="#SEC24" title="Next section in reading order"> &gt; </a>]</td>
                    968: <td valign="middle" align="left"> &nbsp; </td>
                    969: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                    970: <td valign="middle" align="left">[<a href="#SEC21" title="Up section"> Up </a>]</td>
                    971: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                    972: <td valign="middle" align="left"> &nbsp; </td>
                    973: <td valign="middle" align="left"> &nbsp; </td>
                    974: <td valign="middle" align="left"> &nbsp; </td>
                    975: <td valign="middle" align="left"> &nbsp; </td>
                    976: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                    977: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                    978: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                    979: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                    980: </tr></table>
                    981: <h3 class="subsection"> 2.12.2 Linux signals </h3>
                    982: 
                    983: <p>Normal and real-time signals are queued along with their information
                    984: (<code>siginfo_t</code>) as it is done in the Linux kernel. Then an interrupt
                    985: request is done to the virtual CPU. When it is interrupted, one queued
                    986: signal is handled by generating a stack frame in the virtual CPU as the
                    987: Linux kernel does. The <code>sigreturn()</code> system call is emulated to return
                    988: from the virtual signal handler.
                    989: </p>
                    990: <p>Some signals (such as SIGALRM) directly come from the host. Other
                    991: signals are synthetized from the virtual CPU exceptions such as SIGFPE
                    992: when a division by zero is done (see <code>main.c:cpu_loop()</code>).
                    993: </p>
                    994: <p>The blocked signal mask is still handled by the host Linux kernel so
                    995: that most signal system calls can be redirected directly to the host
                    996: Linux kernel. Only the <code>sigaction()</code> and <code>sigreturn()</code> system
                    997: calls need to be fully emulated (see &lsquo;<tt>signal.c</tt>&rsquo;).
                    998: </p>
                    999: <hr size="6">
                   1000: <a name="SEC24"></a>
                   1001: <table cellpadding="1" cellspacing="1" border="0">
                   1002: <tr><td valign="middle" align="left">[<a href="#SEC23" title="Previous section in reading order"> &lt; </a>]</td>
                   1003: <td valign="middle" align="left">[<a href="#SEC25" title="Next section in reading order"> &gt; </a>]</td>
                   1004: <td valign="middle" align="left"> &nbsp; </td>
                   1005: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                   1006: <td valign="middle" align="left">[<a href="#SEC21" title="Up section"> Up </a>]</td>
                   1007: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                   1008: <td valign="middle" align="left"> &nbsp; </td>
                   1009: <td valign="middle" align="left"> &nbsp; </td>
                   1010: <td valign="middle" align="left"> &nbsp; </td>
                   1011: <td valign="middle" align="left"> &nbsp; </td>
                   1012: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                   1013: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                   1014: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                   1015: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                   1016: </tr></table>
                   1017: <h3 class="subsection"> 2.12.3 clone() system call and threads </h3>
                   1018: 
                   1019: <p>The Linux clone() system call is usually used to create a thread. QEMU
                   1020: uses the host clone() system call so that real host threads are created
                   1021: for each emulated thread. One virtual CPU instance is created for each
                   1022: thread.
                   1023: </p>
                   1024: <p>The virtual x86 CPU atomic operations are emulated with a global lock so
                   1025: that their semantic is preserved.
                   1026: </p>
                   1027: <p>Note that currently there are still some locking issues in QEMU. In
                   1028: particular, the translated cache flush is not protected yet against
                   1029: reentrancy.
                   1030: </p>
                   1031: <hr size="6">
                   1032: <a name="SEC25"></a>
                   1033: <table cellpadding="1" cellspacing="1" border="0">
                   1034: <tr><td valign="middle" align="left">[<a href="#SEC24" title="Previous section in reading order"> &lt; </a>]</td>
                   1035: <td valign="middle" align="left">[<a href="#SEC26" title="Next section in reading order"> &gt; </a>]</td>
                   1036: <td valign="middle" align="left"> &nbsp; </td>
                   1037: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                   1038: <td valign="middle" align="left">[<a href="#SEC21" title="Up section"> Up </a>]</td>
                   1039: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                   1040: <td valign="middle" align="left"> &nbsp; </td>
                   1041: <td valign="middle" align="left"> &nbsp; </td>
                   1042: <td valign="middle" align="left"> &nbsp; </td>
                   1043: <td valign="middle" align="left"> &nbsp; </td>
                   1044: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                   1045: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                   1046: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                   1047: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                   1048: </tr></table>
                   1049: <h3 class="subsection"> 2.12.4 Self-virtualization </h3>
                   1050: 
                   1051: <p>QEMU was conceived so that ultimately it can emulate itself. Although
                   1052: it is not very useful, it is an important test to show the power of the
                   1053: emulator.
                   1054: </p>
                   1055: <p>Achieving self-virtualization is not easy because there may be address
                   1056: space conflicts. QEMU user emulators solve this problem by being an
                   1057: executable ELF shared object as the ld-linux.so ELF interpreter. That
                   1058: way, it can be relocated at load time.
                   1059: </p>
                   1060: <hr size="6">
                   1061: <a name="Bibliography"></a>
                   1062: <a name="SEC26"></a>
                   1063: <table cellpadding="1" cellspacing="1" border="0">
                   1064: <tr><td valign="middle" align="left">[<a href="#SEC25" title="Previous section in reading order"> &lt; </a>]</td>
                   1065: <td valign="middle" align="left">[<a href="#SEC27" title="Next section in reading order"> &gt; </a>]</td>
                   1066: <td valign="middle" align="left"> &nbsp; </td>
                   1067: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                   1068: <td valign="middle" align="left">[<a href="#SEC9" title="Up section"> Up </a>]</td>
                   1069: <td valign="middle" align="left">[<a href="#SEC27" title="Next chapter"> &gt;&gt; </a>]</td>
                   1070: <td valign="middle" align="left"> &nbsp; </td>
                   1071: <td valign="middle" align="left"> &nbsp; </td>
                   1072: <td valign="middle" align="left"> &nbsp; </td>
                   1073: <td valign="middle" align="left"> &nbsp; </td>
                   1074: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                   1075: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                   1076: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                   1077: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                   1078: </tr></table>
                   1079: <h2 class="section"> 2.13 Bibliography </h2>
                   1080: 
                   1081: <dl compact="compact">
                   1082: <dt> [1]</dt>
                   1083: <dd><p><a href="http://citeseer.nj.nec.com/piumarta98optimizing.html">http://citeseer.nj.nec.com/piumarta98optimizing.html</a>, Optimizing
                   1084: direct threaded code by selective inlining (1998) by Ian Piumarta, Fabio
                   1085: Riccardi.
                   1086: </p>
                   1087: </dd>
                   1088: <dt> [2]</dt>
                   1089: <dd><p><a href="http://developer.kde.org/~sewardj/">http://developer.kde.org/~sewardj/</a>, Valgrind, an open-source
                   1090: memory debugger for x86-GNU/Linux, by Julian Seward.
                   1091: </p>
                   1092: </dd>
                   1093: <dt> [3]</dt>
                   1094: <dd><p><a href="http://bochs.sourceforge.net/">http://bochs.sourceforge.net/</a>, the Bochs IA-32 Emulator Project,
                   1095: by Kevin Lawton et al.
                   1096: </p>
                   1097: </dd>
                   1098: <dt> [4]</dt>
                   1099: <dd><p><a href="http://www.cs.rose-hulman.edu/~donaldlf/em86/index.html">http://www.cs.rose-hulman.edu/~donaldlf/em86/index.html</a>, the EM86
                   1100: x86 emulator on Alpha-Linux.
                   1101: </p>
                   1102: </dd>
                   1103: <dt> [5]</dt>
                   1104: <dd><p><a href="http://www.usenix.org/publications/library/proceedings/usenix-nt97/full_papers/chernoff/chernoff.pdf">http://www.usenix.org/publications/library/proceedings/usenix-nt97/full_papers/chernoff/chernoff.pdf</a>,
                   1105: DIGITAL FX!32: Running 32-Bit x86 Applications on Alpha NT, by Anton
                   1106: Chernoff and Ray Hookway.
                   1107: </p>
                   1108: </dd>
                   1109: <dt> [6]</dt>
                   1110: <dd><p><a href="http://www.willows.com/">http://www.willows.com/</a>, Windows API library emulation from
                   1111: Willows Software.
                   1112: </p>
                   1113: </dd>
                   1114: <dt> [7]</dt>
                   1115: <dd><p><a href="http://user-mode-linux.sourceforge.net/">http://user-mode-linux.sourceforge.net/</a>,
                   1116: The User-mode Linux Kernel.
                   1117: </p>
                   1118: </dd>
                   1119: <dt> [8]</dt>
                   1120: <dd><p><a href="http://www.plex86.org/">http://www.plex86.org/</a>,
                   1121: The new Plex86 project.
                   1122: </p>
                   1123: </dd>
                   1124: <dt> [9]</dt>
                   1125: <dd><p><a href="http://www.vmware.com/">http://www.vmware.com/</a>,
                   1126: The VMWare PC virtualizer.
                   1127: </p>
                   1128: </dd>
                   1129: <dt> [10]</dt>
                   1130: <dd><p><a href="http://www.microsoft.com/windowsxp/virtualpc/">http://www.microsoft.com/windowsxp/virtualpc/</a>,
                   1131: The VirtualPC PC virtualizer.
                   1132: </p>
                   1133: </dd>
                   1134: <dt> [11]</dt>
                   1135: <dd><p><a href="http://www.twoostwo.org/">http://www.twoostwo.org/</a>,
                   1136: The TwoOStwo PC virtualizer.
                   1137: </p>
                   1138: </dd>
                   1139: <dt> [12]</dt>
                   1140: <dd><p><a href="http://virtualbox.org/">http://virtualbox.org/</a>,
                   1141: The VirtualBox PC virtualizer.
                   1142: </p>
                   1143: </dd>
                   1144: <dt> [13]</dt>
                   1145: <dd><p><a href="http://www.xen.org/">http://www.xen.org/</a>,
                   1146: The Xen hypervisor.
                   1147: </p>
                   1148: </dd>
                   1149: <dt> [14]</dt>
                   1150: <dd><p><a href="http://kvm.qumranet.com/kvmwiki/Front_Page">http://kvm.qumranet.com/kvmwiki/Front_Page</a>,
                   1151: Kernel Based Virtual Machine (KVM).
                   1152: </p>
                   1153: </dd>
                   1154: <dt> [15]</dt>
                   1155: <dd><p><a href="http://www.greensocs.com/projects/QEMUSystemC">http://www.greensocs.com/projects/QEMUSystemC</a>,
                   1156: QEMU-SystemC, a hardware co-simulator.
                   1157: </p>
                   1158: </dd>
                   1159: </dl>
                   1160: 
                   1161: <hr size="6">
                   1162: <a name="Regression-Tests"></a>
                   1163: <a name="SEC27"></a>
                   1164: <table cellpadding="1" cellspacing="1" border="0">
                   1165: <tr><td valign="middle" align="left">[<a href="#SEC26" title="Previous section in reading order"> &lt; </a>]</td>
                   1166: <td valign="middle" align="left">[<a href="#SEC28" title="Next section in reading order"> &gt; </a>]</td>
                   1167: <td valign="middle" align="left"> &nbsp; </td>
                   1168: <td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                   1169: <td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
                   1170: <td valign="middle" align="left">[<a href="#SEC31" title="Next chapter"> &gt;&gt; </a>]</td>
                   1171: <td valign="middle" align="left"> &nbsp; </td>
                   1172: <td valign="middle" align="left"> &nbsp; </td>
                   1173: <td valign="middle" align="left"> &nbsp; </td>
                   1174: <td valign="middle" align="left"> &nbsp; </td>
                   1175: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                   1176: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                   1177: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                   1178: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                   1179: </tr></table>
                   1180: <h1 class="chapter"> 3. Regression Tests </h1>
                   1181: 
                   1182: <p>In the directory &lsquo;<tt>tests/</tt>&rsquo;, various interesting testing programs
                   1183: are available. They are used for regression testing.
                   1184: </p>
                   1185: <table class="menu" border="0" cellspacing="0">
                   1186: <tr><td align="left" valign="top"><a href="#SEC28">3.1 &lsquo;<tt>test-i386</tt>&rsquo;</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                   1187: </td></tr>
                   1188: <tr><td align="left" valign="top"><a href="#SEC29">3.2 &lsquo;<tt>linux-test</tt>&rsquo;</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                   1189: </td></tr>
                   1190: <tr><td align="left" valign="top"><a href="#SEC30">3.3 &lsquo;<tt>qruncom.c</tt>&rsquo;</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                   1191: </td></tr>
                   1192: </table>
                   1193: 
                   1194: <hr size="6">
                   1195: <a name="test_002di386"></a>
                   1196: <a name="SEC28"></a>
                   1197: <table cellpadding="1" cellspacing="1" border="0">
                   1198: <tr><td valign="middle" align="left">[<a href="#SEC27" title="Previous section in reading order"> &lt; </a>]</td>
                   1199: <td valign="middle" align="left">[<a href="#SEC29" title="Next section in reading order"> &gt; </a>]</td>
                   1200: <td valign="middle" align="left"> &nbsp; </td>
                   1201: <td valign="middle" align="left">[<a href="#SEC27" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                   1202: <td valign="middle" align="left">[<a href="#SEC27" title="Up section"> Up </a>]</td>
                   1203: <td valign="middle" align="left">[<a href="#SEC31" title="Next chapter"> &gt;&gt; </a>]</td>
                   1204: <td valign="middle" align="left"> &nbsp; </td>
                   1205: <td valign="middle" align="left"> &nbsp; </td>
                   1206: <td valign="middle" align="left"> &nbsp; </td>
                   1207: <td valign="middle" align="left"> &nbsp; </td>
                   1208: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                   1209: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                   1210: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                   1211: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                   1212: </tr></table>
                   1213: <h2 class="section"> 3.1 &lsquo;<tt>test-i386</tt>&rsquo; </h2>
                   1214: 
                   1215: <p>This program executes most of the 16 bit and 32 bit x86 instructions and
                   1216: generates a text output. It can be compared with the output obtained with
                   1217: a real CPU or another emulator. The target <code>make test</code> runs this
                   1218: program and a <code>diff</code> on the generated output.
                   1219: </p>
                   1220: <p>The Linux system call <code>modify_ldt()</code> is used to create x86 selectors
                   1221: to test some 16 bit addressing and 32 bit with segmentation cases.
                   1222: </p>
                   1223: <p>The Linux system call <code>vm86()</code> is used to test vm86 emulation.
                   1224: </p>
                   1225: <p>Various exceptions are raised to test most of the x86 user space
                   1226: exception reporting.
                   1227: </p>
                   1228: <hr size="6">
                   1229: <a name="linux_002dtest"></a>
                   1230: <a name="SEC29"></a>
                   1231: <table cellpadding="1" cellspacing="1" border="0">
                   1232: <tr><td valign="middle" align="left">[<a href="#SEC28" title="Previous section in reading order"> &lt; </a>]</td>
                   1233: <td valign="middle" align="left">[<a href="#SEC30" title="Next section in reading order"> &gt; </a>]</td>
                   1234: <td valign="middle" align="left"> &nbsp; </td>
                   1235: <td valign="middle" align="left">[<a href="#SEC27" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                   1236: <td valign="middle" align="left">[<a href="#SEC27" title="Up section"> Up </a>]</td>
                   1237: <td valign="middle" align="left">[<a href="#SEC31" title="Next chapter"> &gt;&gt; </a>]</td>
                   1238: <td valign="middle" align="left"> &nbsp; </td>
                   1239: <td valign="middle" align="left"> &nbsp; </td>
                   1240: <td valign="middle" align="left"> &nbsp; </td>
                   1241: <td valign="middle" align="left"> &nbsp; </td>
                   1242: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                   1243: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                   1244: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                   1245: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                   1246: </tr></table>
                   1247: <h2 class="section"> 3.2 &lsquo;<tt>linux-test</tt>&rsquo; </h2>
                   1248: 
                   1249: <p>This program tests various Linux system calls. It is used to verify
                   1250: that the system call parameters are correctly converted between target
                   1251: and host CPUs.
                   1252: </p>
                   1253: <hr size="6">
                   1254: <a name="qruncom_002ec"></a>
                   1255: <a name="SEC30"></a>
                   1256: <table cellpadding="1" cellspacing="1" border="0">
                   1257: <tr><td valign="middle" align="left">[<a href="#SEC29" title="Previous section in reading order"> &lt; </a>]</td>
                   1258: <td valign="middle" align="left">[<a href="#SEC31" title="Next section in reading order"> &gt; </a>]</td>
                   1259: <td valign="middle" align="left"> &nbsp; </td>
                   1260: <td valign="middle" align="left">[<a href="#SEC27" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                   1261: <td valign="middle" align="left">[<a href="#SEC27" title="Up section"> Up </a>]</td>
                   1262: <td valign="middle" align="left">[<a href="#SEC31" title="Next chapter"> &gt;&gt; </a>]</td>
                   1263: <td valign="middle" align="left"> &nbsp; </td>
                   1264: <td valign="middle" align="left"> &nbsp; </td>
                   1265: <td valign="middle" align="left"> &nbsp; </td>
                   1266: <td valign="middle" align="left"> &nbsp; </td>
                   1267: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                   1268: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                   1269: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                   1270: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                   1271: </tr></table>
                   1272: <h2 class="section"> 3.3 &lsquo;<tt>qruncom.c</tt>&rsquo; </h2>
                   1273: 
                   1274: <p>Example of usage of <code>libqemu</code> to emulate a user mode i386 CPU.
                   1275: </p>
                   1276: <hr size="6">
                   1277: <a name="Index"></a>
                   1278: <a name="SEC31"></a>
                   1279: <table cellpadding="1" cellspacing="1" border="0">
                   1280: <tr><td valign="middle" align="left">[<a href="#SEC30" title="Previous section in reading order"> &lt; </a>]</td>
                   1281: <td valign="middle" align="left">[ &gt; ]</td>
                   1282: <td valign="middle" align="left"> &nbsp; </td>
                   1283: <td valign="middle" align="left">[<a href="#SEC27" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
                   1284: <td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
                   1285: <td valign="middle" align="left">[ &gt;&gt; ]</td>
                   1286: <td valign="middle" align="left"> &nbsp; </td>
                   1287: <td valign="middle" align="left"> &nbsp; </td>
                   1288: <td valign="middle" align="left"> &nbsp; </td>
                   1289: <td valign="middle" align="left"> &nbsp; </td>
                   1290: <td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                   1291: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                   1292: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                   1293: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                   1294: </tr></table>
                   1295: <h1 class="chapter"> 4. Index </h1>
                   1296: 
                   1297: <hr size="6">
                   1298: <a name="SEC_Contents"></a>
                   1299: <table cellpadding="1" cellspacing="1" border="0">
                   1300: <tr><td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                   1301: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                   1302: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                   1303: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                   1304: </tr></table>
                   1305: <h1>Table of Contents</h1>
                   1306: <div class="contents">
                   1307: 
                   1308: <ul class="toc">
                   1309:   <li><a name="TOC1" href="#SEC1">1. Introduction</a>
                   1310:   <ul class="toc">
                   1311:     <li><a name="TOC2" href="#SEC2">1.1 Features</a></li>
                   1312:     <li><a name="TOC3" href="#SEC3">1.2 x86 and x86-64 emulation</a></li>
                   1313:     <li><a name="TOC4" href="#SEC4">1.3 ARM emulation</a></li>
                   1314:     <li><a name="TOC5" href="#SEC5">1.4 MIPS emulation</a></li>
                   1315:     <li><a name="TOC6" href="#SEC6">1.5 PowerPC emulation</a></li>
                   1316:     <li><a name="TOC7" href="#SEC7">1.6 Sparc32 and Sparc64 emulation</a></li>
                   1317:     <li><a name="TOC8" href="#SEC8">1.7 Other CPU emulation</a></li>
                   1318:   </ul></li>
                   1319:   <li><a name="TOC9" href="#SEC9">2. QEMU Internals</a>
                   1320:   <ul class="toc">
                   1321:     <li><a name="TOC10" href="#SEC10">2.1 QEMU compared to other emulators</a></li>
                   1322:     <li><a name="TOC11" href="#SEC11">2.2 Portable dynamic translation</a></li>
                   1323:     <li><a name="TOC12" href="#SEC12">2.3 Condition code optimisations</a></li>
                   1324:     <li><a name="TOC13" href="#SEC13">2.4 CPU state optimisations</a></li>
                   1325:     <li><a name="TOC14" href="#SEC14">2.5 Translation cache</a></li>
                   1326:     <li><a name="TOC15" href="#SEC15">2.6 Direct block chaining</a></li>
                   1327:     <li><a name="TOC16" href="#SEC16">2.7 Self-modifying code and translated code invalidation</a></li>
                   1328:     <li><a name="TOC17" href="#SEC17">2.8 Exception support</a></li>
                   1329:     <li><a name="TOC18" href="#SEC18">2.9 MMU emulation</a></li>
                   1330:     <li><a name="TOC19" href="#SEC19">2.10 Device emulation</a></li>
                   1331:     <li><a name="TOC20" href="#SEC20">2.11 Hardware interrupts</a></li>
                   1332:     <li><a name="TOC21" href="#SEC21">2.12 User emulation specific details</a>
                   1333:     <ul class="toc">
                   1334:       <li><a name="TOC22" href="#SEC22">2.12.1 Linux system call translation</a></li>
                   1335:       <li><a name="TOC23" href="#SEC23">2.12.2 Linux signals</a></li>
                   1336:       <li><a name="TOC24" href="#SEC24">2.12.3 clone() system call and threads</a></li>
                   1337:       <li><a name="TOC25" href="#SEC25">2.12.4 Self-virtualization</a></li>
                   1338:     </ul></li>
                   1339:     <li><a name="TOC26" href="#SEC26">2.13 Bibliography</a></li>
                   1340:   </ul></li>
                   1341:   <li><a name="TOC27" href="#SEC27">3. Regression Tests</a>
                   1342:   <ul class="toc">
                   1343:     <li><a name="TOC28" href="#SEC28">3.1 &lsquo;<tt>test-i386</tt>&rsquo;</a></li>
                   1344:     <li><a name="TOC29" href="#SEC29">3.2 &lsquo;<tt>linux-test</tt>&rsquo;</a></li>
                   1345:     <li><a name="TOC30" href="#SEC30">3.3 &lsquo;<tt>qruncom.c</tt>&rsquo;</a></li>
                   1346:   </ul></li>
                   1347:   <li><a name="TOC31" href="#SEC31">4. Index</a></li>
                   1348: </ul>
                   1349: </div>
                   1350: <hr size="1">
                   1351: <a name="SEC_About"></a>
                   1352: <table cellpadding="1" cellspacing="1" border="0">
                   1353: <tr><td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
                   1354: <td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
                   1355: <td valign="middle" align="left">[<a href="#SEC31" title="Index">Index</a>]</td>
                   1356: <td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
                   1357: </tr></table>
                   1358: <h1>About This Document</h1>
                   1359: <p>
                   1360:   This document was generated by <em>Anthony Liguori</em> on <em>May, 1 2009</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.78</em></a>.
                   1361: </p>
                   1362: <p>
                   1363:   The buttons in the navigation panels have the following meaning:
                   1364: </p>
                   1365: <table border="1">
                   1366:   <tr>
                   1367:     <th> Button </th>
                   1368:     <th> Name </th>
                   1369:     <th> Go to </th>
                   1370:     <th> From 1.2.3 go to</th>
                   1371:   </tr>
                   1372:   <tr>
                   1373:     <td align="center"> [ &lt; ] </td>
                   1374:     <td align="center">Back</td>
                   1375:     <td>Previous section in reading order</td>
                   1376:     <td>1.2.2</td>
                   1377:   </tr>
                   1378:   <tr>
                   1379:     <td align="center"> [ &gt; ] </td>
                   1380:     <td align="center">Forward</td>
                   1381:     <td>Next section in reading order</td>
                   1382:     <td>1.2.4</td>
                   1383:   </tr>
                   1384:   <tr>
                   1385:     <td align="center"> [ &lt;&lt; ] </td>
                   1386:     <td align="center">FastBack</td>
                   1387:     <td>Beginning of this chapter or previous chapter</td>
                   1388:     <td>1</td>
                   1389:   </tr>
                   1390:   <tr>
                   1391:     <td align="center"> [ Up ] </td>
                   1392:     <td align="center">Up</td>
                   1393:     <td>Up section</td>
                   1394:     <td>1.2</td>
                   1395:   </tr>
                   1396:   <tr>
                   1397:     <td align="center"> [ &gt;&gt; ] </td>
                   1398:     <td align="center">FastForward</td>
                   1399:     <td>Next chapter</td>
                   1400:     <td>2</td>
                   1401:   </tr>
                   1402:   <tr>
                   1403:     <td align="center"> [Top] </td>
                   1404:     <td align="center">Top</td>
                   1405:     <td>Cover (top) of document</td>
                   1406:     <td> &nbsp; </td>
                   1407:   </tr>
                   1408:   <tr>
                   1409:     <td align="center"> [Contents] </td>
                   1410:     <td align="center">Contents</td>
                   1411:     <td>Table of contents</td>
                   1412:     <td> &nbsp; </td>
                   1413:   </tr>
                   1414:   <tr>
                   1415:     <td align="center"> [Index] </td>
                   1416:     <td align="center">Index</td>
                   1417:     <td>Index</td>
                   1418:     <td> &nbsp; </td>
                   1419:   </tr>
                   1420:   <tr>
                   1421:     <td align="center"> [ ? ] </td>
                   1422:     <td align="center">About</td>
                   1423:     <td>About (help)</td>
                   1424:     <td> &nbsp; </td>
                   1425:   </tr>
                   1426: </table>
                   1427: 
                   1428: <p>
                   1429:   where the <strong> Example </strong> assumes that the current position is at <strong> Subsubsection One-Two-Three </strong> of a document of the following structure:
                   1430: </p>
                   1431: 
                   1432: <ul>
                   1433:   <li> 1. Section One
                   1434:     <ul>
                   1435:       <li>1.1 Subsection One-One
                   1436:         <ul>
                   1437:           <li>...</li>
                   1438:         </ul>
                   1439:       </li>
                   1440:       <li>1.2 Subsection One-Two
                   1441:         <ul>
                   1442:           <li>1.2.1 Subsubsection One-Two-One</li>
                   1443:           <li>1.2.2 Subsubsection One-Two-Two</li>
                   1444:           <li>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp;
                   1445:             <strong>&lt;== Current Position </strong></li>
                   1446:           <li>1.2.4 Subsubsection One-Two-Four</li>
                   1447:         </ul>
                   1448:       </li>
                   1449:       <li>1.3 Subsection One-Three
                   1450:         <ul>
                   1451:           <li>...</li>
                   1452:         </ul>
                   1453:       </li>
                   1454:       <li>1.4 Subsection One-Four</li>
                   1455:     </ul>
                   1456:   </li>
                   1457: </ul>
                   1458: 
                   1459: <hr size="1">
                   1460: <p>
                   1461:  <font size="-1">
                   1462:   This document was generated by <em>Anthony Liguori</em> on <em>May, 1 2009</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.78</em></a>.
                   1463:  </font>
                   1464:  <br>
                   1465: 
                   1466: </p>
                   1467: </body>
                   1468: </html>

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.