| 
         
xen-devel
[Xen-devel] Re: [RFC, PATCH 5/24] i386 Vmi code patching
 
| 
To:  | 
Zachary Amsden <zach@xxxxxxxxxx> | 
 
| 
Subject:  | 
[Xen-devel] Re: [RFC, PATCH 5/24] i386 Vmi code patching | 
 
| 
From:  | 
Chris Wright <chrisw@xxxxxxxxxxxx> | 
 
| 
Date:  | 
Wed, 15 Mar 2006 02:02:10 -0800 | 
 
| 
Cc:  | 
Andrew Morton <akpm@xxxxxxxx>, Joshua LeVasseur <jtl@xxxxxxxxxx>,	Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>,	Pratap Subrahmanyam <pratap@xxxxxxxxxx>,	Wim Coekaerts <wim.coekaerts@xxxxxxxxxx>,	Chris Wright <chrisw@xxxxxxxx>, Jack Lo <jlo@xxxxxxxxxx>,	Dan Hecht <dhecht@xxxxxxxxxx>,	Linux Kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>,	Jan Beulich <jbeulich@xxxxxxxxxx>, Christopher Li <chrisl@xxxxxxxxxx>,	Virtualization Mailing List <virtualization@xxxxxxxxxxxxxx>,	Linus Torvalds <torvalds@xxxxxxxx>,	Anne Holler <anne@xxxxxxxxxx>, Jyothy Reddy <jreddy@xxxxxxxxxx>,	Kip Macy <kmacy@xxxxxxxxxxx>, Ky Srinivasan <ksrinivasan@xxxxxxxxxx>,	Leendert van Doorn <leendert@xxxxxxxxxxxxxx>, Dan Arai <arai@xxxxxxxxxx> | 
 
| 
Delivery-date:  | 
Wed, 15 Mar 2006 10:28:04 +0000 | 
 
| 
Envelope-to:  | 
www-data@xxxxxxxxxxxxxxxxxxx | 
 
| 
In-reply-to:  | 
<200603131802.k2DI2nv8005665@xxxxxxxxxxxxxxxxxxx> | 
 
| 
List-help:  | 
<mailto:xen-devel-request@lists.xensource.com?subject=help> | 
 
| 
List-id:  | 
Xen developer discussion <xen-devel.lists.xensource.com> | 
 
| 
List-post:  | 
<mailto:xen-devel@lists.xensource.com> | 
 
| 
List-subscribe:  | 
<http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>,	<mailto:xen-devel-request@lists.xensource.com?subject=subscribe> | 
 
| 
List-unsubscribe:  | 
<http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>,	<mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe> | 
 
| 
References:  | 
<200603131802.k2DI2nv8005665@xxxxxxxxxxxxxxxxxxx> | 
 
| 
Sender:  | 
xen-devel-bounces@xxxxxxxxxxxxxxxxxxx | 
 
| 
User-agent:  | 
Mutt/1.4.2.1i | 
 
 
 
* Zachary Amsden (zach@xxxxxxxxxx) wrote:
> +static void fixup_translation(struct vmi_annotation *a)
> +{
> +     unsigned char *c, *start, *end;
> +     int left;
> +
> +     memcpy(a->nativeEIP, a->translationEIP, a->translation_size);
> +     start = a->nativeEIP;
> +     end = a->nativeEIP + a->translation_size;
> +
> +     for (c = start; c < end;) {
> +             switch(*c) {
> +                     case MNEM_CALL_NEAR:
> +                             patch_call_site(a, c);
> +                             c+=5;
> +                             break;
> +
> +                     case MNEM_PUSH_I:
> +                             c+=5;
> +                             break;
> +
> +                     case MNEM_PUSH_IB:
> +                             c+=2;
> +                             break;
> +
> +                     case MNEM_PUSH_EAX:
> +                     case MNEM_PUSH_ECX:
> +                     case MNEM_PUSH_EDX:
> +                     case MNEM_PUSH_EBX:
> +                     case MNEM_PUSH_EBP:
> +                     case MNEM_PUSH_ESI:
> +                     case MNEM_PUSH_EDI: 
> +                             c+=1;
> +                             break;
> +
> +                     case MNEM_LEA:
> +                             BUG_ON(*(c+1) != 0x64);  /* [--][--]+disp8, 
> %esp */
> +                             BUG_ON(*(c+2) != 0x24);  /* none + %esp */
> +                             c+=4;
> +                             break;
> +
> +                     default:
> +                             /*
> +                              * Don't printk - it may acquire spinlocks with
> +                              * partially completed VMI translations, causing
> +                              * nuclear meltdown of the core.
> +                              */
> +                             BUG();
> +                             return;
> +             }
Why these restrictions?  How do you do int $0x82, for example?
thanks,
-chris
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 |   
 
 | 
    |