* [Patch] (big) real mode emulation - jmp rel
@ 2007-08-10 22:32 Nitin A Kamble
[not found] ` <1186785157.6097.19.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>
0 siblings, 1 reply; 9+ messages in thread
From: Nitin A Kamble @ 2007-08-10 22:32 UTC (permalink / raw)
To: Avi Kivity; +Cc: kvm-devel, Yu, Wilfred
[-- Attachment #1.1.1.1: Type: text/plain, Size: 294 bytes --]
Hi Avi,
The patch to implement "jmp rel" emulation is attached.
Thanks & Regards,
Nitin
Open Source Technology Center, Intel Corporation.
-------------------------------------------------------------------------
The mind is like a parachute; it works much better when it's open.
[-- Attachment #1.1.1.2: Type: text/html, Size: 934 bytes --]
[-- Attachment #1.1.2: jmprel.patch --]
[-- Type: text/x-patch, Size: 1537 bytes --]
commit 1d77b7ad2bcb20858dd66d9653952a8d1cc0a153
Author: Nitin A Kamble <nitin.a.kamble@intel.com>
Date: Fri Aug 10 18:36:12 2007 -0700
Implement instruction "jmp rel" opcode 0xe9
Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
index b4f439c..40fb6ee 100644
--- a/drivers/kvm/x86_emulate.c
+++ b/drivers/kvm/x86_emulate.c
@@ -145,8 +145,10 @@ static u8 opcode_table[256] = {
0, 0, 0, 0,
/* 0xD8 - 0xDF */
0, 0, 0, 0, 0, 0, 0, 0,
- /* 0xE0 - 0xEF */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* 0xE0 - 0xE7 */
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ /* 0xE8 - 0xEF */
+ 0, SrcImm|ImplicitOps, 0, 0, 0, 0, 0, 0,
/* 0xF0 - 0xF7 */
0, 0, 0, 0,
ImplicitOps, 0,
@@ -447,6 +449,12 @@ struct operand {
(((reg) + _inc) & ((1UL << (ad_bytes << 3)) - 1)); \
} while (0)
+#define jmp_rel(rel) \
+do { \
+ _eip += (int)(rel); \
+ _eip = ((op_bytes == 2) ? (uint16_t)_eip : (uint32_t)_eip); \
+} while (0)
+
/*
* Given the 'reg' portion of a ModRM byte, and a register block, return a
* pointer into the block that addresses the relevant register.
@@ -1200,6 +1208,10 @@ special_insn:
case 0xae ... 0xaf: /* scas */
DPRINTF("Urk! I don't handle SCAS.\n");
goto cannot_emulate;
+ case 0xe9: /* jmp rel */
+ jmp_rel(src.val);
+ no_wb = 1; /* Disable writeback. */
+ break;
case 0xf4: /* hlt */
ctxt->vcpu->halt_request = 1;
goto done;
[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
[-- Attachment #2: Type: text/plain, Size: 315 bytes --]
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
[-- Attachment #3: Type: text/plain, Size: 186 bytes --]
_______________________________________________
kvm-devel mailing list
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/kvm-devel
^ permalink raw reply related [flat|nested] 9+ messages in thread[parent not found: <1186785157.6097.19.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>]
* Re: [Patch] (big) real mode emulation - jmp rel [not found] ` <1186785157.6097.19.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org> @ 2007-08-13 8:49 ` Avi Kivity [not found] ` <46C01B0E.7080304-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Avi Kivity @ 2007-08-13 8:49 UTC (permalink / raw) To: nitin.a.kamble-ral2JQCrhuEAvxtiuMwx3w; +Cc: kvm-devel, Yu, Wilfred Nitin A Kamble wrote: > Hi Avi, > The patch to implement "jmp rel" emulation is attached. > > +#define jmp_rel(rel) \ > +do { \ > + _eip += (int)(rel); \ > + _eip = ((op_bytes == 2) ? (uint16_t)_eip : (uint32_t)_eip); \ > +} while (0) > + Please use an inline function instead of a macro. That will help when we later make large scale changes (for example, splitting the emulator into a decoder and executor). (and, when defining the macro, indent the contents) -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <46C01B0E.7080304-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [Patch] (big) real mode emulation - jmp rel [not found] ` <46C01B0E.7080304-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2007-08-16 1:15 ` Nitin A Kamble [not found] ` <1187226935.24576.5.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Nitin A Kamble @ 2007-08-16 1:15 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel, Yu, Wilfred [-- Attachment #1.1.1: Type: text/plain, Size: 764 bytes --] Hi Avi, I modified the patch as per your suggestions. Attached is the update patch for the "jmp rel" instruction. Also the "jmp rel short" patch would go on top of it. Thanks & Regards, Nitin Open Source Technology Center, Intel Corporation ----------------------------------------------------------------- The mind is like a parachute; it works much better when it's open. On Mon, 2007-08-13 at 01:49 -0700, Avi Kivity wrote: > Please use an inline function instead of a macro. That will help when > we later make large scale changes (for example, splitting the emulator > into a decoder and executor). > > (and, when defining the macro, indent the contents) > > -- > error compiling committee.c: too many arguments to function > > [-- Attachment #1.1.2: jmprel.patch --] [-- Type: text/x-patch, Size: 1517 bytes --] commit dd675f122c14adac40c9ac1eb5864de60330cc8c Author: Nitin A Kamble <nitin.a.kamble@intel.com> Date: Wed Aug 15 20:52:41 2007 -0700 Implement instruction "jmp rel" opcode 0xe9 Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com> diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c index b4f439c..9130fd5 100644 --- a/drivers/kvm/x86_emulate.c +++ b/drivers/kvm/x86_emulate.c @@ -145,8 +145,10 @@ static u8 opcode_table[256] = { 0, 0, 0, 0, /* 0xD8 - 0xDF */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xE0 - 0xEF */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xE0 - 0xE7 */ + 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xE8 - 0xEF */ + 0, SrcImm|ImplicitOps, 0, 0, 0, 0, 0, 0, /* 0xF0 - 0xF7 */ 0, 0, 0, 0, ImplicitOps, 0, @@ -504,6 +506,12 @@ x86_emulate_memop(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops) unsigned long _eip = ctxt->vcpu->rip, _eflags = ctxt->eflags; unsigned long modrm_val = 0; + inline void jmp_rel(int rel) + { + _eip += (int)(rel); + _eip = ((op_bytes == 2) ? (uint16_t)_eip : (uint32_t)_eip); + }; + memcpy(_regs, ctxt->vcpu->regs, sizeof _regs); switch (mode) { @@ -1200,6 +1208,10 @@ special_insn: case 0xae ... 0xaf: /* scas */ DPRINTF("Urk! I don't handle SCAS.\n"); goto cannot_emulate; + case 0xe9: /* jmp rel */ + jmp_rel(src.val); + no_wb = 1; /* Disable writeback. */ + break; case 0xf4: /* hlt */ ctxt->vcpu->halt_request = 1; goto done; [-- Attachment #1.1.3: jmp_rel_short.patch --] [-- Type: text/x-patch, Size: 971 bytes --] commit 38f7db6830c862cd0470aaa07cabe616ff741d69 Author: Nitin A Kamble <nitin.a.kamble@intel.com> Date: Fri Aug 10 18:48:05 2007 -0700 Implement "jmp rel short" opcode: 0xeb Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com> diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c index 40fb6ee..16ea385 100644 --- a/drivers/kvm/x86_emulate.c +++ b/drivers/kvm/x86_emulate.c @@ -148,7 +148,7 @@ static u8 opcode_table[256] = { /* 0xE0 - 0xE7 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE8 - 0xEF */ - 0, SrcImm|ImplicitOps, 0, 0, 0, 0, 0, 0, + 0, SrcImm|ImplicitOps, 0, SrcImmByte|ImplicitOps, 0, 0, 0, 0, /* 0xF0 - 0xF7 */ 0, 0, 0, 0, ImplicitOps, 0, @@ -1208,6 +1208,7 @@ special_insn: case 0xae ... 0xaf: /* scas */ DPRINTF("Urk! I don't handle SCAS.\n"); goto cannot_emulate; + case 0xeb: /* jmp rel short */ case 0xe9: /* jmp rel */ jmp_rel(src.val); no_wb = 1; /* Disable writeback. */ [-- Attachment #1.2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply related [flat|nested] 9+ messages in thread
[parent not found: <1187226935.24576.5.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>]
* Re: [Patch] (big) real mode emulation - jmp rel [not found] ` <1187226935.24576.5.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org> @ 2007-08-16 10:25 ` Avi Kivity [not found] ` <46C42610.8020707-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Avi Kivity @ 2007-08-16 10:25 UTC (permalink / raw) To: nitin.a.kamble-ral2JQCrhuEAvxtiuMwx3w; +Cc: kvm-devel, Yu, Wilfred Nitin A Kamble wrote: > Hi Avi, > I modified the patch as per your suggestions. Attached is the update > patch for the "jmp rel" instruction. Also the "jmp rel short" patch > would go on top of it. > > > + inline void jmp_rel(int rel) > + { > + _eip += (int)(rel); > + _eip = ((op_bytes == 2) ? (uint16_t)_eip : (uint32_t)_eip); > + }; > + This is a nested function which we don't use (in the kernel or userspace). It needs to be a file-scope function (static, too). -- Do not meddle in the internals of kernels, for they are subtle and quick to panic. ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <46C42610.8020707-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [Patch] (big) real mode emulation - jmp rel [not found] ` <46C42610.8020707-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2007-08-16 20:34 ` Nitin A Kamble [not found] ` <1187296469.5500.7.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Nitin A Kamble @ 2007-08-16 20:34 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel, Yu, Wilfred [-- Attachment #1.1: Type: text/plain, Size: 769 bytes --] Avi, In my opinion converting this small function to file-scope function, would make code look ugly. I think the earlier Macro definition was better. On Thu, 2007-08-16 at 03:25 -0700, Avi Kivity wrote: > > + inline void jmp_rel(int rel) > > + { > > + _eip += (int)(rel); > > + _eip = ((op_bytes == 2) ? (uint16_t)_eip : > (uint32_t)_eip); > > + }; > > + > > This is a nested function which we don't use (in the kernel or > userspace). > > It needs to be a file-scope function (static, too). -- Thanks & Regards, Nitin Open Source Technology Center, Intel Corporation ----------------------------------------------------------------- The mind is like a parachute; it works much better when it's open [-- Attachment #1.2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <1187296469.5500.7.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>]
* Re: [Patch] (big) real mode emulation - jmp rel [not found] ` <1187296469.5500.7.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org> @ 2007-08-16 23:54 ` Nitin A Kamble 2007-08-17 12:24 ` Avi Kivity 1 sibling, 0 replies; 9+ messages in thread From: Nitin A Kamble @ 2007-08-16 23:54 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel [-- Attachment #1.1.1: Type: text/plain, Size: 574 bytes --] Hi Avi, If you are fine with macro then attached are the updated patches for "jmp rel" & "jmp rel short" instruction emulation. On Thu, 2007-08-16 at 13:34 -0700, Nitin A Kamble wrote: > Avi, > In my opinion converting this small function to file-scope function, > would make code look ugly. I think the earlier Macro definition was > better. -- Thanks & Regards, Nitin Open Source Technology Center, Intel Corporation ----------------------------------------------------------------- The mind is like a parachute; it works much better when it's open [-- Attachment #1.1.2: jmprel_2.patch --] [-- Type: text/x-patch, Size: 1540 bytes --] commit 38177680ad53b330d0f8b4fcec20953a7a7dfa2d Author: Nitin A Kamble <nitin.a.kamble@intel.com> Date: Thu Aug 16 19:10:14 2007 -0700 Implement instruction "jmp rel" opcode 0xe9 Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com> diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c index b4f439c..6519cf9 100644 --- a/drivers/kvm/x86_emulate.c +++ b/drivers/kvm/x86_emulate.c @@ -145,8 +145,10 @@ static u8 opcode_table[256] = { 0, 0, 0, 0, /* 0xD8 - 0xDF */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xE0 - 0xEF */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xE0 - 0xE7 */ + 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xE8 - 0xEF */ + 0, SrcImm|ImplicitOps, 0, 0, 0, 0, 0, 0, /* 0xF0 - 0xF7 */ 0, 0, 0, 0, ImplicitOps, 0, @@ -447,6 +449,12 @@ struct operand { (((reg) + _inc) & ((1UL << (ad_bytes << 3)) - 1)); \ } while (0) +#define jmp_rel(rel) \ + do { \ + _eip += (int)(rel); \ + _eip = ((op_bytes == 2) ? (uint16_t)_eip : (uint32_t)_eip); \ + } while (0) + /* * Given the 'reg' portion of a ModRM byte, and a register block, return a * pointer into the block that addresses the relevant register. @@ -1200,6 +1208,10 @@ special_insn: case 0xae ... 0xaf: /* scas */ DPRINTF("Urk! I don't handle SCAS.\n"); goto cannot_emulate; + case 0xe9: /* jmp rel */ + jmp_rel(src.val); + no_wb = 1; /* Disable writeback. */ + break; case 0xf4: /* hlt */ ctxt->vcpu->halt_request = 1; goto done; [-- Attachment #1.1.3: jmp_rel_short.patch --] [-- Type: text/x-patch, Size: 971 bytes --] commit 38f7db6830c862cd0470aaa07cabe616ff741d69 Author: Nitin A Kamble <nitin.a.kamble@intel.com> Date: Fri Aug 10 18:48:05 2007 -0700 Implement "jmp rel short" opcode: 0xeb Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com> diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c index 40fb6ee..16ea385 100644 --- a/drivers/kvm/x86_emulate.c +++ b/drivers/kvm/x86_emulate.c @@ -148,7 +148,7 @@ static u8 opcode_table[256] = { /* 0xE0 - 0xE7 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE8 - 0xEF */ - 0, SrcImm|ImplicitOps, 0, 0, 0, 0, 0, 0, + 0, SrcImm|ImplicitOps, 0, SrcImmByte|ImplicitOps, 0, 0, 0, 0, /* 0xF0 - 0xF7 */ 0, 0, 0, 0, ImplicitOps, 0, @@ -1208,6 +1208,7 @@ special_insn: case 0xae ... 0xaf: /* scas */ DPRINTF("Urk! I don't handle SCAS.\n"); goto cannot_emulate; + case 0xeb: /* jmp rel short */ case 0xe9: /* jmp rel */ jmp_rel(src.val); no_wb = 1; /* Disable writeback. */ [-- Attachment #1.2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Patch] (big) real mode emulation - jmp rel [not found] ` <1187296469.5500.7.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org> 2007-08-16 23:54 ` Nitin A Kamble @ 2007-08-17 12:24 ` Avi Kivity [not found] ` <46C59385.6060108-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 1 sibling, 1 reply; 9+ messages in thread From: Avi Kivity @ 2007-08-17 12:24 UTC (permalink / raw) To: nitin.a.kamble-ral2JQCrhuEAvxtiuMwx3w; +Cc: kvm-devel, Yu, Wilfred Nitin A Kamble wrote: > Avi, > In my opinion converting this small function to file-scope function, > would make code look ugly. I think the earlier Macro definition was > better. > > A file scope function would indeed be uglier. But the macro has more serious problems; it's impossible to understand how variables are affected since nobody expects function local variables whose address is not taken to change after something that looks like a macro is called. At the very least, it needs to be in uppercase so that people know something funny is going on. But it's really better as a function. (and yes, the rest of the file uses macros. and yes, the rest of the file is an unmaintainable mess) > On Thu, 2007-08-16 at 03:25 -0700, Avi Kivity wrote: > >>> + inline void jmp_rel(int rel) >>> + { >>> + _eip += (int)(rel); >>> + _eip = ((op_bytes == 2) ? (uint16_t)_eip : >>> >> (uint32_t)_eip); >> >>> + }; >>> + >>> >> This is a nested function which we don't use (in the kernel or >> userspace). >> >> It needs to be a file-scope function (static, too). >> > > -- Do not meddle in the internals of kernels, for they are subtle and quick to panic. ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <46C59385.6060108-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [Patch] (big) real mode emulation - jmp rel [not found] ` <46C59385.6060108-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2007-08-17 22:24 ` Nitin A Kamble [not found] ` <1187389499.9011.14.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Nitin A Kamble @ 2007-08-17 22:24 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel [-- Attachment #1.1.1: Type: text/plain, Size: 999 bytes --] On Fri, 2007-08-17 at 05:24 -0700, Avi Kivity wrote: > A file scope function would indeed be uglier. But the macro has more > serious problems; it's impossible to understand how variables are > affected since nobody expects function local variables whose address > is > not taken to change after something that looks like a macro is called. > > At the very least, it needs to be in uppercase so that people know > something funny is going on. But it's really better as a function. > > (and yes, the rest of the file uses macros. and yes, the rest of the > file is an unmaintainable mess) Hi Avi, I tried either ways, and to me the macro looks cleaner. Now I have upper-cased it for your satisfaction. :) Also attached the "jmp rel short" emulation patch. -- Thanks & Regards, Nitin Open Source Technology Center, Intel Corporation ----------------------------------------------------------------- The mind is like a parachute; it works much better when it's open [-- Attachment #1.1.2: jmp_rel_short_4.patch --] [-- Type: text/x-patch, Size: 971 bytes --] commit 47259a989606e37e5ba24f6722a8258368e6d0a2 Author: Nitin A Kamble <nitin.a.kamble@intel.com> Date: Fri Aug 17 18:39:29 2007 -0700 Implementing emulation of instruction jmp rel short imm8 opcode: 0xeb Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com> diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c index 393dfb6..fed0b2a 100644 --- a/drivers/kvm/x86_emulate.c +++ b/drivers/kvm/x86_emulate.c @@ -148,7 +148,7 @@ static u8 opcode_table[256] = { /* 0xE0 - 0xE7 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE8 - 0xEF */ - 0, SrcImm|ImplicitOps, 0, 0, 0, 0, 0, 0, + 0, SrcImm|ImplicitOps, 0, SrcImmByte|ImplicitOps, 0, 0, 0, 0, /* 0xF0 - 0xF7 */ 0, 0, 0, 0, ImplicitOps, 0, @@ -1029,6 +1029,7 @@ grp2: /* Grp2 */ src.val = _regs[VCPU_REGS_RCX]; goto grp2; case 0xe9: /* jmp rel */ + case 0xeb: /* jmp rel short */ JMP_REL(src.val); no_wb = 1; /* Disable writeback. */ break; [-- Attachment #1.1.3: jmprel_4.patch --] [-- Type: text/x-patch, Size: 1541 bytes --] commit 17994104bef0da3d182d2b8736fbd1cf8d4a77f0 Author: Nitin A Kamble <nitin.a.kamble@intel.com> Date: Fri Aug 17 18:33:07 2007 -0700 Implement emulation of instruction "jmp rel" opcode 0xe9 Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com> diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c index b196d25..393dfb6 100644 --- a/drivers/kvm/x86_emulate.c +++ b/drivers/kvm/x86_emulate.c @@ -145,8 +145,10 @@ static u8 opcode_table[256] = { 0, 0, 0, 0, /* 0xD8 - 0xDF */ 0, 0, 0, 0, 0, 0, 0, 0, - /* 0xE0 - 0xEF */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xE0 - 0xE7 */ + 0, 0, 0, 0, 0, 0, 0, 0, + /* 0xE8 - 0xEF */ + 0, SrcImm|ImplicitOps, 0, 0, 0, 0, 0, 0, /* 0xF0 - 0xF7 */ 0, 0, 0, 0, ImplicitOps, 0, @@ -447,6 +449,12 @@ struct operand { (((reg) + _inc) & ((1UL << (ad_bytes << 3)) - 1)); \ } while (0) +#define JMP_REL(rel) \ + do { \ + _eip += (int)(rel); \ + _eip = ((op_bytes == 2) ? (uint16_t)_eip : (uint32_t)_eip); \ + } while (0) + /* * Given the 'reg' portion of a ModRM byte, and a register block, return a * pointer into the block that addresses the relevant register. @@ -1020,6 +1028,10 @@ grp2: /* Grp2 */ case 0xd2 ... 0xd3: /* Grp2 */ src.val = _regs[VCPU_REGS_RCX]; goto grp2; + case 0xe9: /* jmp rel */ + JMP_REL(src.val); + no_wb = 1; /* Disable writeback. */ + break; case 0xf6 ... 0xf7: /* Grp3 */ switch (modrm_reg) { case 0 ... 1: /* test */ [-- Attachment #1.2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 315 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply related [flat|nested] 9+ messages in thread
[parent not found: <1187389499.9011.14.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>]
* Re: [Patch] (big) real mode emulation - jmp rel [not found] ` <1187389499.9011.14.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org> @ 2007-08-19 8:03 ` Avi Kivity 0 siblings, 0 replies; 9+ messages in thread From: Avi Kivity @ 2007-08-19 8:03 UTC (permalink / raw) To: nitin.a.kamble-ral2JQCrhuEAvxtiuMwx3w; +Cc: kvm-devel Nitin A Kamble wrote: > On Fri, 2007-08-17 at 05:24 -0700, Avi Kivity wrote: > >> A file scope function would indeed be uglier. But the macro has more >> serious problems; it's impossible to understand how variables are >> affected since nobody expects function local variables whose address >> is >> not taken to change after something that looks like a macro is called. >> >> At the very least, it needs to be in uppercase so that people know >> something funny is going on. But it's really better as a function. >> >> (and yes, the rest of the file uses macros. and yes, the rest of the >> file is an unmaintainable mess) >> > > Hi Avi, > I tried either ways, and to me the macro looks cleaner. Now I have > upper-cased it for your satisfaction. :) > Also attached the "jmp rel short" emulation patch. > > Okay, applied both -- thanks. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2007-08-19 8:03 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-10 22:32 [Patch] (big) real mode emulation - jmp rel Nitin A Kamble
[not found] ` <1186785157.6097.19.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>
2007-08-13 8:49 ` Avi Kivity
[not found] ` <46C01B0E.7080304-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-16 1:15 ` Nitin A Kamble
[not found] ` <1187226935.24576.5.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>
2007-08-16 10:25 ` Avi Kivity
[not found] ` <46C42610.8020707-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-16 20:34 ` Nitin A Kamble
[not found] ` <1187296469.5500.7.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>
2007-08-16 23:54 ` Nitin A Kamble
2007-08-17 12:24 ` Avi Kivity
[not found] ` <46C59385.6060108-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-17 22:24 ` Nitin A Kamble
[not found] ` <1187389499.9011.14.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>
2007-08-19 8:03 ` Avi Kivity
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox