[hellogcc] Fwd: hellogcc: chenwj@xxxxxxxxxxxxxxxxx post needs approval

  • From: Mingjie Xing <mingjie.xing@xxxxxxxxx>
  • To: hellogcc-repost@xxxxxxxxxxxxx
  • Date: Sat, 1 Oct 2011 15:12:18 +0800

---------- Forwarded message ----------
From: FreeLists Mailing List Manager <ecartis@xxxxxxxxxxxxx>
Date: 2011/10/1
Subject: hellogcc: chenwj@xxxxxxxxxxxxxxxxx post needs approval
To: hellogcc-moderators@xxxxxxxxxxxxx


This message was received for a list you are a moderator on, and
was marked for moderation due to the following reason:
Non-member submission to closed-post list.

To approve this message and have it go out on the list, forward this to
hellogcc-repost@xxxxxxxxxxxxx

If you wish to decline the post, change the 'apppost' below to 'delpost'.
If you wish to edit the post, change it to 'modpost' and edit the message
as needed - not all mail programs will work with modpost.

DO NOT DELETE THE FOLLOWING LINE.  Ecartis needs it.
// apppost 4E868C3F:13B0.1:uryybtpp

From chenwj@xxxxxxxxxxxxxx  Fri Sep 30 23:42:55 2011
Return-Path: <chenwj@xxxxxxxxxxxxxx>
X-Original-To: hellogcc@xxxxxxxxxxxxx
Delivered-To: hellogcc@xxxxxxxxxxxxx
Received: from localhost (localhost [127.0.0.1])
       by turing.freelists.org (Avenir Technologies Mail Multiplex)
with ESMTP id 0C2DFE47C61
       for <hellogcc@xxxxxxxxxxxxx>; Fri, 30 Sep 2011 23:42:55 -0400 (EDT)
Authentication-Results: turing.freelists.org; dkim=pass (1024-bit key)
header.i=@xxxxxxxxxxxxxx
X-Virus-Scanned: Debian amavisd-new at localhost.localdomain
Received: from turing.freelists.org ([127.0.0.1])
       by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024)
       with ESMTP id GmeddHR8j6yf for <hellogcc@xxxxxxxxxxxxx>;
       Fri, 30 Sep 2011 23:42:54 -0400 (EDT)
Received: from csmailer.cs.nctu.edu.tw (csmailer.cs.nctu.edu.tw
[140.113.235.130])
       by turing.freelists.org (Avenir Technologies Mail Multiplex)
with ESMTP id 8BFABE454B9
       for <hellogcc@xxxxxxxxxxxxx>; Fri, 30 Sep 2011 23:39:19 -0400 (EDT)
Received: from csmailer.cs.nctu.edu.tw (localhost [127.0.0.1])
       by csmailer.cs.nctu.edu.tw (Postfix) with ESMTP id 6A27A5FB
       for <hellogcc@xxxxxxxxxxxxx>; Sat,  1 Oct 2011 11:37:55 +0800 (CST)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=cs.nctu.edu.tw; h=date
       :from:to:subject:message-id:mime-version:content-type
       :content-transfer-encoding; s=rsa1024; bh=4QQssIMvQDka0SfIIoNuNu
       uvjaQ=; b=XfViuBs1ax1VTYM9XkYyoDIfWcTcWQHhlgKxTWbooVhvU6GZMudMJe
       1IUV9gCTSlIVKGUVwEsC3hOTqW6w/jZbJWc1CjZ9Se9P3EEQlUmhdyjGsgY8kNdk
       2y58vecvOGQLX1e4+pQlGgv1hrNL4xJ98Q6FhhlEdOpkFvilKO3+0=
Received: from alumni.cs.nctu.edu.tw (alumni.cs.nctu.edu.tw [140.113.235.116])
       by csmailer.cs.nctu.edu.tw (Postfix) with ESMTP id 6137E5FA
       for <hellogcc@xxxxxxxxxxxxx>; Sat,  1 Oct 2011 11:37:55 +0800 (CST)
Received: (from chenwj@localhost)
       by alumni.cs.nctu.edu.tw (8.14.4/8.14.4/Submit) id p913d8nU087645
       for hellogcc@xxxxxxxxxxxxx; Sat, 1 Oct 2011 11:39:08 +0800 (CST)
       (envelope-from chenwj)
Date: Sat, 1 Oct 2011 11:39:08 +0800
From: =?utf-8?B?6Zmz6Z+L5Lu7?= <chenwj@xxxxxxxxxxxxxxxxx>
To: hellogcc@xxxxxxxxxxxxx
Subject: QEMU Internal - Tiny Code Generator (TCG)
Message-ID: <20111001033908.GA86776@xxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
User-Agent: Mutt/1.5.21 (2010-09-15)
Content-Transfer-Encoding: quoted-printable

                Copyright (c) 2011 =E9=99=B3=E9=9F=8B=E4=BB=BB (Chen Wen=
-Ren)

                                  =E5=89=8D=E8=A8=80
 =E5=9B=A0=E7=82=BA=E5=B7=A5=E4=BD=9C=E4=B8=8A=E7=9A=84=E9=97=9C=E4=BF=82=
=EF=BC=8C=E5=BF=85=E9=A0=88=E6=8E=A5=E8=A7=B8 QEMU=E3=80=82=E9=9B=96=E7=84=
=B6=E7=B6=B2=E8=B7=AF=E4=B8=8A=E6=9C=89=E4=B8=8D=E5=B0=91=E6=96=87=E4=BB=B6=
=EF=BC=8C=E4=BD=86=E7=B8=BD=E8=A6=BA=E5=BE=97=E8=AC=9B=E5=BE=97=E4=B8=8D=E5=
=A4=A0=E6=B7=B1=E5=85=A5=E3=80=82
QEMU =E6=98=AF=E4=B8=80=E5=80=8B=E4=BB=BF=E7=9C=9F=E5=99=A8 (emulator)=EF=
=BC=8C=E5=8F=AF=E4=BB=A5 process mode =E6=88=96=E6=98=AF system mode =E9=81=
=8B=E8=A1=8C=E3=80=82process
mode =E5=8F=AF=E4=BB=A5=E9=81=8B=E8=A1=8C=E4=B8=8D=E5=90=8C ISA =E5=90=8C=
=E4=B8=80 OS =E7=9A=84 binary; system mode =E5=8F=AF=E4=BB=A5=E5=9C=A8=E7=
=95=B6=E5=89=8D=E4=BD=9C=E6=A5=AD=E7=B3=BB=E7=B5=B1=E4=B8=8A=E9=81=8B=E8=A1=
=8C
=E5=8F=A6=E5=A4=96=E4=B8=80=E5=80=8B OS=E3=80=82=E6=88=91=E5=9C=A8=E6=94=B6=
=E9=9B=86=E5=90=84=E6=96=B9=E8=B3=87=E6=96=99=EF=BC=8C=E9=96=B1=E8=AE=80=E4=
=BB=A3=E7=A2=BC=E5=92=8C=E5=9C=A8=E9=83=B5=E4=BB=B6=E5=88=97=E8=A1=A8=E4=B8=
=8A=E7=99=BC=E5=95=8F=E4=B9=8B=E5=BE=8C=EF=BC=8C=E8=A6=BA=E5=BE=97=E7=95=A5=
=E6=9C=89=E5=BF=83=E5=BE=97=E3=80=82
=E5=9C=A8=E6=AD=A4=E5=B0=8D QEMU internal =E4=BD=9C=E4=B8=80=E5=80=8B=E8=BC=
=83=E7=82=BA=E6=B7=B1=E5=85=A5=E7=9A=84=E4=BB=8B=E7=B4=B9=E3=80=82=E6=86=91=
=E6=88=91=E5=80=8B=E4=BA=BA=E4=B9=8B=E5=8A=9B=EF=BC=8C=E9=9B=A3=E5=85=8D=E6=
=9C=89=E7=96=8F=E6=BC=8F=E6=88=96=E6=98=AF=E9=8C=AF=E8=AA=A4=E3=80=82
=E6=AC=8A=E4=B8=94=E7=95=B6=E4=BD=9C=E6=8B=8B=E7=A3=9A=E5=BC=95=E7=8E=89=E5=
=90=A7=E3=80=82=E5=B8=8C=E6=9C=9B=E5=90=84=E4=BD=8D=E4=B8=8D=E5=90=9D=E6=8C=
=87=E6=95=99=E3=80=82

0. =E8=A1=93=E8=AA=9E=E3=80=81=E7=B7=9A=E4=B8=8A=E8=B3=87=E6=BA=90=E5=92=8C=
=E6=8A=80=E5=B7=A7

 =E5=B0=8D QEMU =E8=80=8C=E8=A8=80=EF=BC=8C=E8=A2=AB=E4=BB=BF=E7=9C=9F=E7=
=9A=84=E5=B9=B3=E5=8F=B0=E8=A2=AB=E7=A8=B1=E7=82=BA guest=EF=BC=8C=E5=8F=88=
=E7=A8=B1 target; =E9=81=8B=E8=A1=8C QEMU =E7=9A=84=E5=B9=B3=E5=8F=B0=E7=A8=
=B1=E7=82=BA host
=E3=80=82QEMU =E6=98=AF=E5=88=A9=E7=94=A8=E5=8B=95=E6=85=8B=E7=BF=BB=E8=AD=
=AF (dynamic translation) =E7=9A=84=E6=8A=80=E8=A1=93=E5=B0=87 guest bina=
ry =E5=8B=95=E6=85=8B=E7=BF=BB=E8=AD=AF=E6=88=90 host
binary=EF=BC=8C=E4=B8=A6=E4=BA=A4=E7=94=B1 host =E9=81=8B=E8=A1=8C=E7=BF=BB=
=E8=AD=AF=E6=89=80=E5=BE=97=E7=9A=84 host binary=E3=80=82Tiny Code Genera=
tor (TCG) =E6=98=AF QEMU
=E4=B8=AD=E8=B2=A0=E8=B2=AC=E5=8B=95=E6=85=8B=E7=BF=BB=E8=AD=AF=E7=9A=84=E7=
=B5=84=E4=BB=B6=E3=80=82=E5=B0=8D TCG =E8=80=8C=E8=A8=80=EF=BC=8Ctarget =E6=
=9C=89=E4=B8=8D=E5=90=8C=E7=9A=84=E5=90=AB=E6=84=8F=EF=BC=8C=E5=AE=83=E4=BB=
=A3=E8=A1=A8 TCG =E6=98=AF=E9=87=9D=E5=B0=8D=E5=93=AA=E4=B8=80=E5=80=8B
host =E7=94=9F=E6=88=90 host binary=E3=80=82

 =E7=B6=B2=E8=B7=AF=E4=B8=8A=E5=B0=8D QEMU =E6=9C=89=E8=BC=83=E7=82=BA=E5=
=AE=8C=E6=95=B4=E6=8F=8F=E8=BF=B0=E7=9A=84=E6=96=87=E4=BB=B6=E7=82=BA:

 - QEMU, a Fast and Portable Dynamic Translator
 - Porting QEMU to Plan 9: QEMU Internals and Port Strategy

=E7=84=B6=E8=80=8C=E9=9C=80=E8=A6=81=E6=B3=A8=E6=84=8F=E7=9A=84=E6=98=AF=EF=
=BC=8C=E4=B8=8A=E8=BF=B0=E6=96=87=E4=BB=B6=E5=9C=A8=E5=8B=95=E6=85=8B=E7=BF=
=BB=E8=AD=AF=E7=9A=84=E9=83=A8=E5=88=86=E5=9D=87=E6=98=AF=E9=87=9D=E5=B0=8D=
 QEMU 0.9 =E7=89=88=E3=80=82QEMU 0.9 =E7=89=88=E4=BB=A5=E5=89=8D=E6=98=AF
=E4=BD=BF=E7=94=A8 dyngen =E6=8A=80=E8=A1=93; QEMU 0.10 =E7=89=88=E4=BB=A5=
=E5=BE=8C=E6=8E=A1=E7=94=A8 TCG=E3=80=82=E9=9B=96=E8=AA=AA=E5=A6=82=E6=AD=
=A4=EF=BC=8C=E4=BD=86=E5=9C=A8 QEMU =E7=9A=84=E5=85=B6=E5=AE=83=E9=83=A8=E5=
=88=86=E5=B7=AE=E7=95=B0=E4=B8=8D=E5=A4=A7
=EF=BC=8C=E4=B8=8A=E8=BF=B0=E6=96=87=E4=BB=B6=E4=BB=8D=E5=8F=AF=E4=BE=9B=E5=
=8F=83=E8=80=83=E3=80=82http://qemu.sourcearchive.com/ =E6=94=B6=E9=9B=86=
=E4=BA=86=E8=87=AA QEMU 0.6.1 =E7=89=88=E8=87=B3=E4=BB=8A=E7=9A=84
=E6=89=80=E6=9C=89 QEMU =E6=BA=90=E4=BB=A3=E7=A2=BC=E3=80=82=E5=90=84=E4=BD=
=8D=E5=8F=AF=E4=BB=A5=E9=82=8A=E7=9C=8B=E6=96=87=E4=BB=B6=E9=82=8A=E7=9C=8B=
=E6=BA=90=E4=BB=A3=E7=A2=BC=E3=80=82

 QEMU =E6=A5=B5=E7=82=BA=E4=BE=9D=E8=B3=B4 macro=EF=BC=8C=E9=80=99=E4=BD=
=BF=E5=BE=97=E7=9B=B4=E6=8E=A5=E9=96=B1=E8=AE=80=E6=BA=90=E4=BB=A3=E7=A2=BC=
=E9=80=9A=E5=B8=B8=E7=84=A1=E6=B3=95=E7=A2=BA=E5=AE=9A=E5=85=B6=E5=87=BD=E6=
=95=B8=E5=91=BC=E5=8F=AB=EF=BC=8C=E6=88=96=E6=98=AF=E5=9F=B7=E8=A1=8C=E6=B5=
=81=E7=A8=8B=E5=80=92=E5=BA=95
=E7=82=BA=E4=BD=95=E3=80=82=E8=AB=8B=E5=9C=A8=E7=B7=A8=E8=AD=AF QEMU =E7=9A=
=84=E6=99=82=E5=80=99=E5=8A=A0=E4=B8=8A "--extra-cflags=3D"-save-temps""=EF=
=BC=8C=E5=A6=82=E6=AD=A4=E5=8F=AF=E5=BE=97=E5=B1=95=E9=96=8B marco
=E7=9A=84 *.i =E6=AA=94=E3=80=82

 =E5=85=B6=E9=A4=98=E9=83=A8=E5=88=86=E8=AB=8B=E8=A6=8B:

 - http://wiki.qemu.org/Documentation/GettingStartedDevelopers
 - QEMU =E7=9B=AE=E9=8C=84=E4=B8=8B=E7=9A=84 HACKING=E3=80=81CODING_STYL=
E=E3=80=81tcg/README =E5=92=8C doc/*
 - ISA reference manual=E3=80=82

1. TCG

 TCG =E6=98=AF QEMU =E7=9A=84=E6=A0=B8=E5=BF=83=E3=80=82=E5=85=B6=E5=9F=BA=
=E6=9C=AC=E6=B5=81=E7=A8=8B=E5=A6=82=E4=B8=8B:

   guest binary -> TCG IR -> host binary

1.1 TCG IR

 TCG =E5=AE=9A=E7=BE=A9=E4=BA=86=E4=B8=80=E7=B5=84 IR (intermediate repr=
esentation)=EF=BC=8C=E7=86=9F=E6=82=89 GCC =E7=9A=84=E5=90=84=E4=BD=8D=E5=
=B0=8D=E6=AD=A4=E6=87=89=E8=A9=B2=E4=B8=8D=E9=99=8C=E7=94=9F=E3=80=82
TCG IR =E5=A4=A7=E8=87=B4=E5=88=86=E6=88=90=E4=BB=A5=E4=B8=8B=E5=B9=BE=E9=
=A1=9E:

 - Move Operation: mov, movi, ...
 - Logic Operation: and, or, xor, shl, shr, ...
 - Arithmetic Operation: add, sub, mul, div, ...
 - Branch Operation: jmp, br, brcond
 - Fuction call: call
 - Memory Operation: ld, st
 - QEMU specific Operation: tb_exit, goto_tb, qemu_ld/qemu_st

=E8=AB=8B=E8=A6=8B tcg/*=EF=BC=8C=E7=89=B9=E5=88=A5=E6=98=AF tcg.i=EF=BC=8C=
=E5=8F=AF=E4=BB=A5=E7=9C=8B=E5=88=B0 TCGOpcode=E3=80=82tcg/README =E4=B9=9F=
=E5=88=A5=E5=BF=98=E4=BA=86=E3=80=82TCG =E5=9C=A8=E7=BF=BB=E8=AD=AF guest
binary =E7=9A=84=E6=99=82=E5=80=99=E6=98=AF=E4=BB=A5=E4=B8=80=E5=80=8B tr=
anslation block (tb) =E7=82=BA=E5=96=AE=E4=BD=8D=EF=BC=8C=E5=85=B6=E7=B5=90=
=E5=B0=BE=E9=80=9A=E5=B8=B8=E6=98=AF=E5=88=86=E6=94=AF=E6=8C=87=E4=BB=A4=E3=
=80=82

target-ARCH/* =E5=AE=9A=E7=BE=A9=E4=BA=86=E5=A6=82=E4=BD=95=E5=B0=87 ARCH=
 binary =E5=8F=8D=E5=8C=AF=E7=B7=A8=E6=88=90 TCG IR=E3=80=82tcg/ARCH =E5=AE=
=9A=E7=BE=A9=E4=BA=86=E5=A6=82=E4=BD=95=E5=B0=87
TCG IR =E7=BF=BB=E8=AD=AF=E6=88=90 ARCH binary=E3=80=82

1.2 TCG Flow

 =E5=85=88=E4=BB=8B=E7=B4=B9=E4=B8=80=E4=BA=9B=E8=B3=87=E6=96=99=E7=B5=90=
=E6=A7=8B:

 - gen_opc_buf =E5=92=8C gen_opparam_buf (translate-all.c) =E5=88=86=E5=88=
=A5=E6=94=BE=E7=BD=AE TCG Opcode =E5=92=8C Operand=E3=80=82

 - =E5=A6=82=E6=9E=9C=E4=BD=BF=E7=94=A8=E9=9D=9C=E6=85=8B=E9=85=8D=E7=BD=
=AE=E7=9A=84=E7=B7=A9=E8=A1=9D=E5=8D=80=EF=BC=8Cstatic_code_gen_buffer (e=
xec.c) =E5=8D=B3=E7=82=BA code cache=EF=BC=8C=E6=94=BE=E7=BD=AE
   host binary=E3=80=82

 - =E5=9C=A8=E8=B7=B3=E5=85=A5/=E5=87=BA code cache =E5=9F=B7=E8=A1=8C=E4=
=B9=8B=E5=89=8D/=E5=BE=8C=EF=BC=8C=E8=A6=81=E5=9F=B7=E8=A1=8C prologue/ep=
ilogue=EF=BC=8C=E8=AB=8B=E8=A6=8B code_gen_prologue
   (exec.c)=E3=80=82=E9=80=99=E9=82=8A=E7=9A=84 prologue/epilogue =E5=B0=
=B1=E6=98=AF=E6=8C=87 function prologue/epilogue=E3=80=82QEMU =E5=B0=87=E8=
=B7=B3=E8=87=B3
   code cache (host binary) =E5=9F=B7=E8=A1=8C=E7=9A=84=E9=81=8E=E7=A8=8B=
=E7=9C=8B=E6=88=90=E6=98=AF=E5=87=BD=E5=BC=8F=E5=91=BC=E5=8F=AB=EF=BC=8C=E6=
=95=85=E6=9C=89=E6=AD=A4 prologue/epilogue=E3=80=82

=E4=BB=A5 qemu-i386 =E7=82=BA=E4=BE=8B=EF=BC=8C=E6=B5=81=E7=A8=8B=E5=A4=A7=
=E8=87=B4=E5=A6=82=E4=B8=8B:

 main (linux-user/main.c) -> cpu_exec_init_all (exec.c)
   -> cpu_init/cpu_x86_init (target-i386/helper.c)
     -> tcg_prologue_init (tcg/tcg.c) -> cpu_loop (linux-user/main.c)=20

=E5=87=BD=E5=BC=8F=E5=90=8D=E4=B9=8B=E6=89=80=E4=BB=A5=E6=9C=83=E5=87=BA=E7=
=8F=BE cpu_init/cpu_x86_init=EF=BC=8C=E6=98=AF=E5=9B=A0=E7=82=BA QEMU =E7=
=B6=93=E5=B8=B8=E4=BD=BF=E7=94=A8 #define =E6=9B=BF=E6=8F=9B=E5=87=BD=E5=BC=
=8F=E5=90=8D=E3=80=82
cpu_init =E6=98=AF main =E8=A3=A1=E5=91=BC=E5=8F=AB=E7=9A=84=E5=87=BD=E5=BC=
=8F=EF=BC=8C=E7=B6=93 #define =E6=9B=BF=E6=8F=9B=E5=BE=8C=EF=BC=8C=E5=AF=A6=
=E9=9A=9B=E4=B8=8A=E6=98=AF cpu_x86_init
(target-i386/helper.c)=E3=80=82GDB =E4=B8=8B=E6=96=B7=E9=BB=9E=E6=99=82=E8=
=AB=8B=E6=B3=A8=E6=84=8F=E6=AD=A4=E7=A8=AE=E6=83=85=E6=B3=81=E3=80=82

=E9=80=99=E9=82=8A=E5=8F=AA=E4=BB=8B=E7=B4=B9 tcg_prologue_init (tcg/tcg.=
c) -> cpu_loop (linux-user/main.c) =E9=80=99=E4=B8=80=E6=AE=B5=EF=BC=8C=E5=
=9B=A0=E7=82=BA
=E9=80=99=E4=B8=80=E6=AE=B5=E8=B7=9F TCG =E8=BC=83=E7=82=BA=E7=9B=B8=E9=97=
=9C=E3=80=82=E5=AE=B9=E6=88=91=E5=85=88=E8=AC=9B cpu_loop (linux-user/mai=
n.c)=E3=80=82

 - cpu_loop (linux-user/main.c) -> cpu_x86_exec/cpu_exec (cpu-exec.c)
   cpu_exec =E6=98=AF=E4=B8=BB=E8=A6=81=E5=9F=B7=E8=A1=8C=E8=BF=B4=E5=9C=
=88=EF=BC=8C=E5=85=B6=E7=B5=90=E6=A7=8B=E5=A4=A7=E8=87=B4=E5=A6=82=E4=B8=8B=
:

   /* prepare setjmp context for exception handling */
   for(;;) {
       if (setjmp(env->jmp_env) =3D=3D 0) { // =E4=BE=8B=E5=A4=96=E8=99=95=
=E7=90=86=E3=80=82
       }

       next_tb =3D 0; /* force lookup of first TB */
       for(;;) {
         // =E5=88=A4=E6=96=B7=E6=98=AF=E5=90=A6=E6=9C=89=E4=B8=AD=E6=96=
=B7=E3=80=82=E8=8B=A5=E6=9C=89=EF=BC=8C=E8=B7=B3=E5=9B=9E=E4=BE=8B=E5=A4=96=
=E8=99=95=E7=90=86=E3=80=82

         next_tb =3D tcg_qemu_tb_exec(tc_ptr); // =E8=B7=B3=E8=87=B3 cod=
e cache =E5=9F=B7=E8=A1=8C=E3=80=82

       }=20
   }

 - tcg_prologue_init (tcg/tcg.c) -> tcg_target_qemu_prologue (tcg/i386/t=
cg-target.c)
   =E5=A6=82=E5=89=8D=E6=89=80=E8=BF=B0=EF=BC=8CQEMU =E5=B0=87=E8=B7=B3=E8=
=87=B3 code cache (host binary) =E5=9F=B7=E8=A1=8C=E7=9A=84=E9=81=8E=E7=A8=
=8B=E7=9C=8B=E6=88=90=E6=98=AF=E5=87=BD=E5=BC=8F=E5=91=BC=E5=8F=AB=E3=80=82=
=E4=B8=8D=E5=90=8C=E5=B9=B3=E5=8F=B0
   =E7=9A=84 calling convention =E5=90=84=E6=9C=89=E4=B8=8D=E5=90=8C=EF=BC=
=8Ctcg_prologue_init =E5=B0=87=E7=94=A2=E7=94=9F prologue/epilogue =E7=9A=
=84=E5=B7=A5=E4=BD=9C
   =E8=BD=89=E4=BA=A4 tcg_target_qemu_prologue=E3=80=82

static void tcg_target_qemu_prologue(TCGContext *s)
{
 /* QEMU (cpu_exec) -> =E5=85=A5=E6=A3=A7 */

 // OPC_GRP5 (0xff) =E7=82=BA call=EF=BC=8CEXT5_JMPN_Ev =E6=98=AF=E5=85=B6=
 opcode extension=E3=80=82
 // tcg_target_call_iarg_regs =E6=98=AF=E5=87=BD=E5=BC=8F=E5=91=BC=E5=8F=
=AB=E8=B2=A0=E8=B2=AC=E5=82=B3=E9=81=9E=E5=8F=83=E6=95=B8=E7=9A=84=E6=9A=AB=
=E5=AD=98=E5=99=A8=E3=80=82
 tcg_out_modrm(s, OPC_GRP5, EXT5_JMPN_Ev, tcg_target_call_iarg_regs[0]);=
 // =E8=B7=B3=E8=87=B3 code cache =E5=9F=B7=E8=A1=8C

 // =E6=AD=A4=E6=99=82=EF=BC=8Cs->code_ptr =E6=8C=87=E5=90=91 code_gen_p=
rologue =E4=B8=AD prologue =E5=92=8C jmp to code cache =E4=B9=8B=E5=BE=8C=
=E7=9A=84=E4=BD=8D=E5=9D=80=E3=80=82
 // tb_ret_addr =E6=98=AF=E7=B4=80=E9=8C=84 code cache =E8=B7=B3=E5=9B=9E=
 code_gen_prologue =E7=9A=84=E5=93=AA=E5=80=8B=E5=9C=B0=E6=96=B9=E3=80=82
 tb_ret_addr =3D s->code_ptr;
=20
 /* =E5=87=BA=E6=A3=A7 -> =E8=BF=94=E5=9B=9E QEMU (cpu_exec)=EF=BC=8C=E7=
=A2=BA=E5=88=87=E7=9A=84=E8=AC=9B=E6=98=AF=E8=BF=94=E5=9B=9E tcg_qemu_tb_=
exec */
}

  =E9=80=99=E9=82=8A=E5=B0=8F=E7=B5=90=E4=B8=80=E4=B8=8B QEMU -> prologu=
e -> code cache -> epilogue -> QEMU=E3=80=82tb_ret_addr =E5=B0=B1=E6=98=AF=
=E7=94=A8=E4=BE=86=E7=94=B1
code cache =E8=BF=94=E5=9B=9E=E8=87=B3 code_gen_prologue=EF=BC=8C=E5=9F=B7=
=E8=A1=8C epilogue=EF=BC=8C=E5=86=8D=E8=BF=94=E5=9B=9E QEMU=E3=80=82

 =E5=9C=A8=E4=BB=8B=E7=B4=B9 cpu_exec =E4=B9=8B=E5=89=8D=EF=BC=8C=E6=88=91=
=E5=85=88=E4=BB=8B=E7=B4=B9=E5=B9=BE=E5=80=8B QEMU =E8=B3=87=E6=96=99=E7=B5=
=90=E6=A7=8B=EF=BC=8C=E8=AB=8B=E5=96=84=E7=94=A8 http://qemu.sourcearchiv=
e.com/ =E3=80=82
=E6=88=91=E5=80=91=E8=A6=81=E7=9F=A5=E9=81=93=E6=89=80=E8=AC=82=E4=BB=BF=E7=
=9C=9F=E6=88=96=E6=98=AF=E8=99=9B=E6=93=AC=E5=8C=96=E4=B8=80=E5=80=8B CPU=
 (ISA)=EF=BC=8C=E7=B0=A1=E5=96=AE=E4=BE=86=E8=AA=AA=E5=B0=B1=E6=98=AF=E7=94=
=A8=E4=B8=80=E5=80=8B=E8=B3=87=E6=96=99=E7=B5=90=E6=A7=8B (struct) =E5=84=
=B2=E5=AD=98=E8=A9=B2
CPU =E7=9A=84=E7=8B=80=E6=85=8B=E3=80=82=E5=9F=B7=E8=A1=8C=E8=A9=B2=E8=99=
=9B=E6=93=AC CPU=EF=BC=8C=E5=B0=B1=E6=98=AF=E5=BE=9E=E5=85=A7=E5=AD=98=E4=
=B8=AD=E8=AE=80=E5=8F=96=E8=A9=B2=E8=99=9B=E6=93=AC CPU =E7=9A=84=E8=B3=87=
=E6=96=99=E7=B5=90=E6=A7=8B=EF=BC=8C=E9=81=8B=E7=AE=97=E5=BE=8C=E5=86=8D=E5=
=AD=98=E5=9B=9E=E5=8E=BB=E3=80=82

 - CPUX86State: =E4=BF=9D=E5=AD=98 x86 register=EF=BC=8Ceflags=EF=BC=8Ce=
ip=EF=BC=8Ccs=EF=BC=8C...=E3=80=82=E4=B8=8D=E5=90=8C ISA =E4=B9=8B=E9=96=93=
=E9=80=9A=E7=94=A8=E7=9A=84=E8=B3=87=E6=96=99=E7=B5=90=E6=A7=8B=E8=A2=AB
   QEMU #define =E6=88=90 CPU_COMMON=E3=80=82=E4=B8=80=E8=88=AC=E7=A8=B1=
=E6=AD=A4=E8=B3=87=E6=96=99=E7=B5=90=E6=A7=8B=E7=82=BA CPUState=E3=80=82=E4=
=B8=8B=E6=96=87=E6=89=80=E6=8F=90 env =E5=8D=B3=E7=82=BA CPUState=E3=80=82
   QEMU =E9=81=8B=E8=A1=8C=E8=99=9B=E6=93=AC CPU =E9=83=BD=E6=9C=83=E5=88=
=A9=E7=94=A8 env =E9=80=99=E5=80=8B=E8=AE=8A=E6=95=B8=E3=80=82

 - TranslationBlock: =E4=B9=8B=E5=89=8D=E8=AA=AA=E9=81=8E=EF=BC=8CQEMU =E6=
=98=AF=E4=BB=A5=E4=B8=80=E5=80=8B translation block =E7=82=BA=E5=96=AE=E4=
=BD=8D=E9=80=B2=E8=A1=8C=E7=BF=BB=E8=AD=AF=E3=80=82=E5=85=B6=E4=B8=AD=E4=BF=
=9D=E5=AD=98
   =E6=AD=A4 translation block =E5=B0=8D=E6=87=89 guest binary =E7=9A=84=
 pc, cs_base, eflags=E3=80=82=E5=8F=A6=E5=A4=96=EF=BC=8Ctc_ptr =E6=8C=87=E5=
=90=91 code
   cache (host binary)=E3=80=82=E5=85=B6=E5=AE=83=E6=AC=84=E4=BD=8D=E5=BE=
=85=E4=BB=A5=E5=BE=8C=E5=86=8D=E8=AB=87=E3=80=82

                                           code cache (host binary)
   struct TranslationBlock's tb_ptr ->             tb


   =E4=B8=8A=E9=9D=A2=E6=98=AF=E7=A4=BA=E6=84=8F=E5=9C=96=E3=80=82=E6=B3=
=A8=E6=84=8F! =E4=BE=9D=E7=85=A7=E4=B8=8A=E4=B8=8B=E6=96=87=E7=9A=84=E4=B8=
=8D=E5=90=8C=EF=BC=8CTB (tb) =E5=8F=AF=E8=83=BD=E6=98=AF=E6=8C=87 struct =
TranslationBlock=EF=BC=8C=E4=B9=9F=E6=9C=89
   =E5=8F=AF=E8=83=BD=E6=98=AF=E6=8C=87 code cache (host binary) =E4=B8=AD=
 TranslationBlock =E6=89=80=E6=8C=87=E5=90=91=E7=9A=84 tb=E3=80=82=20

 - PageDesc: =E4=B8=BB=E8=A6=81=E4=BF=9D=E5=AD=98 guest page =E4=B8=AD=E7=
=9A=84=E7=AC=AC=E4=B8=80=E5=80=8B tb (TranslationBlock *)=E3=80=82=E9=80=99=
=E8=B7=9F QEMU =E5=85=A7=E9=83=A8=E9=81=8B=E4=BD=9C
   =E6=A9=9F=E5=88=B6=E6=9C=89=E9=97=9C=E3=80=82=E6=9F=90=E4=BA=9B=E6=83=
=85=E6=B3=81=E4=B8=8B=EF=BC=8Cguest page (guest binary) =E5=8F=AF=E8=83=BD=
=E8=A2=AB=E6=9B=BF=E6=8F=9B=E6=88=96=E6=98=AF=E8=A2=AB=E5=AF=AB=E3=80=82=E9=
=80=99=E5=80=8B=E6=99=82=E5=80=99=EF=BC=8CQEMU
   =E6=9C=83=E4=BB=A5 guest page (guest binary) =E7=82=BA=E5=96=AE=E4=BD=
=8D=EF=BC=8C=E6=B8=85=E7=A9=BA=E8=88=87=E5=AE=83=E7=9B=B8=E9=97=9C=E8=81=AF=
=E7=9A=84 TB (code cache)=E3=80=82=E9=80=99=E6=99=82=E5=86=8D=E5=9B=9E=E4=
=BE=86=E8=AC=9B
   TranslationBlock=E3=80=82TranslationBlock =E6=9C=89=E5=BA=95=E4=B8=8B=
=E5=85=A9=E5=80=8B=E6=AC=84=E4=BD=8D:

   - page_addr[2]: =E5=AD=98=E6=94=BE TranslationBlock =E5=B0=8D=E6=87=89=
 guest binary =E6=89=80=E5=9C=A8=E7=9A=84 guest page=E3=80=82=E6=B3=A8=E6=
=84=8F! guest
     binary =E6=9C=89=E5=8F=AF=E8=83=BD=E8=B7=A8 guest page=EF=BC=8C=E6=95=
=85=E9=80=99=E8=A3=A1=E6=9C=89=E5=85=A9=E5=80=8B=E6=AC=84=E4=BD=8D=E3=80=82=
=20

   - page_next[2]: =E7=95=B6=E9=80=8F=E9=81=8E PageDesc->first_tb =E6=89=
=BE=E5=88=B0=E8=A9=B2 guest page =E7=9A=84=E7=AC=AC=E4=B8=80=E5=80=8B tb=EF=
=BC=8Ctb->page_next
     =E5=B0=B1=E8=A2=AB=E7=94=A8=E4=BE=86=E6=89=BE=E5=B0=8B=E8=A9=B2 gue=
st page =E7=9A=84=E4=B8=8B=E4=B8=80=E5=80=8B tb=E3=80=82

   =E5=86=8D=E5=9B=9E=E4=BE=86=E8=AC=9B PageDesc=E3=80=82QEMU =E6=9B=BF =
PageDesc =E7=B6=AD=E8=AD=B7=E4=BA=86=E4=B8=80=E5=80=8B=E4=BA=8C=E7=B4=9A=E9=
=A0=81=E8=A1=A8 l1_map=E3=80=82page_find =E9=80=99=E5=80=8B=E5=87=BD=E5=BC=
=8F=E6=A0=B9=E6=93=9A
   =E8=BC=B8=E5=85=A5=E7=9A=84 address =E6=90=9C=E5=B0=8B l1_map=EF=BC=8C=
=E8=BF=94=E5=9B=9E PageDesc=E3=80=82=E9=80=99=E5=9C=A8=E4=BB=A5 guest pag=
e (guest binary) =E7=82=BA=E5=96=AE=E4=BD=8D=EF=BC=8C
   =E6=B8=85=E7=A9=BA=E8=88=87=E5=AE=83=E7=9B=B8=E9=97=9C=E8=81=AF=E7=9A=
=84 TB (code cache) =E7=9A=84=E6=99=82=E5=80=99=E6=9C=83=E7=94=A8=E5=88=B0=
=E3=80=82

   =E6=9C=89=E4=B8=80=E5=80=8B=E5=90=8D=E5=AD=97=E5=BE=88=E5=83=8F=E7=9A=
=84=E8=B3=87=E6=96=99=E7=B5=90=E6=A7=8B=E5=8F=AB PhysPageDesc=EF=BC=8CQEM=
U =E4=B9=9F=E6=9B=BF=E5=AE=83=E7=B6=AD=E8=AD=B7=E4=B8=80=E5=80=8B=E4=BA=8C=
=E7=B4=9A=E9=A0=81=E8=A1=A8 l1_phys_map=E3=80=82=E9=80=99=E6=98=AF
   =E5=9C=A8 system mode =E5=81=9A=E5=9C=B0=E5=9D=80=E8=BD=89=E6=8F=9B=E4=
=B9=8B=E7=94=A8=EF=BC=8C=E9=80=99=E9=82=8A=E4=B8=8D=E8=AB=87=E3=80=82=20

 - TCGContext: =E7=94=9F=E6=88=90 TCG IR =E6=99=82=E6=9C=83=E7=94=A8=E5=88=
=B0=E3=80=82

 - DisasContext: =E5=8F=8D=E5=8C=AF=E7=B7=A8 guest binary =E6=99=82=E6=9C=
=83=E7=94=A8=E5=88=B0=E3=80=82 =20


--=20
Wei-Ren Chen (=E9=99=B3=E9=9F=8B=E4=BB=BB)
Computer Systems Lab, Institute of Information Science,
Academia Sinica, Taiwan (R.O.C.)
Tel:886-2-2788-3799 #1667
// eompost 4E868C3F:13B0.1:uryybtpp

Other related posts:

  • » [hellogcc] Fwd: hellogcc: chenwj@xxxxxxxxxxxxxxxxx post needs approval - Mingjie Xing