From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH][RESEND] x86_emulator: Emulate cld and std instruction Date: Thu, 31 Jul 2008 12:57:00 +0300 Message-ID: <48918C6C.1000408@qumranet.com> References: <20080730212727.GA7708@mohd-laptop> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, riel@surriel.com To: Mohammed Gamal Return-path: Received: from il.qumranet.com ([212.179.150.194]:28326 "EHLO il.qumranet.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752181AbYGaJ5F (ORCPT ); Thu, 31 Jul 2008 05:57:05 -0400 In-Reply-To: <20080730212727.GA7708@mohd-laptop> Sender: kvm-owner@vger.kernel.org List-ID: Mohammed Gamal wrote: > This patch adds 'cld' and 'std' instructions to the emulator > > I presume for big real mode? Which guest wants it? > @@ -1755,6 +1755,14 @@ special_insn: > ctxt->eflags |= X86_EFLAGS_IF; > c->dst.type = OP_NONE; /* Disable writeback. */ > break; > + case 0xfc: /* cld */ > + ctxt->eflags &= ~EFLG_DF; > + c->dst.type = OP_NONE; /* Disable writeback. */ > + break; > + case 0xfd: /* std */ > + ctxt->eflags |= EFLG_DF; > + c->dst.type = OP_NONE; /* Disable writeback. */ > + break; > You need to add non-zero entries in opcode_table[] for this to work. Also, why disable writeback? If there is not DstSomething in opcode_table[], c->dst.type will be OP_NONE anyway. I would like to see test cases for emulator changes. See users/test/x86/emulator.c. Of course, right now it is impossible to cause cld and std to execute in the emulator. But with the proposed invalid_guest_state() change, it should be easy to to cause this state and force emulation. So how about adding optional invalid_guest_state() support (controlled by a module parameter), then start adding instructions and test cases, then removing the module parameter when everything works? -- error compiling committee.c: too many arguments to function