---------- 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