Skip to contentSkip to conversation

x86 emulator: Add decode entries for 0x05 opcode

PATCH Applied Guillaume Thouvenin 2 participants 9 messages Oct 20, 2008 – Oct 22, 2008

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 x86 emulator: Add decode entries for 0x05 opcode

Add decode entries for 0x05 (ADD) opcode, execution is already implemented.

---
 x86_emulate.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kvm/x86_emulate.c +1 -1
index a391e21..8425aa9 100644
@@ -80,7 +80,7 @@ static u16 opcode_table[256] = {
 	/* 0x00 - 0x07 */
 	ByteOp | DstMem | SrcReg | ModRM, DstMem | SrcReg | ModRM,
 	ByteOp | DstReg | SrcMem | ModRM, DstReg | SrcMem | ModRM,
-	0, 0, 0, 0,
+	0, SrcImm | DstAcc, 0, 0,
 	/* 0x08 - 0x0F */
 	ByteOp | DstMem | SrcReg | ModRM, DstMem | SrcReg | ModRM,
 	ByteOp | DstReg | SrcMem | ModRM, DstReg | SrcMem | ModRM,
#1 lore raw
Quoted 4 lines · Guillaume Thouvenin

Add decode entries for 0x05 (ADD) opcode, execution is already implemented.

Please send a unit test entry.

Also, why not implement opcode 4 (add al, imm8) at the same time?

Signature · 2 lines
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.
#2 lore raw
Quoted 3 lines · On Mon, 20 Oct 2008 09:21:20 +0200 Avi Kivity <[email protected]> wrote:

Please send a unit test entry.

Also, why not implement opcode 4 (add al, imm8) at the same time?

You're right, I'm doing it.

#3 lore raw
In reply to Avi Kivity
Quoted 7 lines · On Mon, 20 Oct 2008 09:21:20 +0200 Avi Kivity <[email protected]> wrote:
Quoted 4 lines · Guillaume Thouvenin

Add decode entries for 0x05 (ADD) opcode, execution is already implemented.

Please send a unit test entry.

I added an "add imm" test case in user/test/x86/emulator.c but kvmctl doesn't start the test. I use the following command:

# ./user/kvmctl ./user/test/x86/emulator.flat

It seems that file emulator.flat is loaded in kvm machine. In the main procedure kvm_run() is called but after nothing happens. There is no message in dmesg. It happens with the last kvm-userspace tree.

I observe the same behaviour with simple.flat but it works with realmode.flat. I tried to run simple.flat in protected mode but it didn't change anything.

Any clues?

Regards,
Guillaume

#4 lore raw
Quoted 6 lines · Guillaume Thouvenin

I added an "add imm" test case in user/test/x86/emulator.c but kvmctl doesn't start the test. I use the following command:

# ./user/kvmctl ./user/test/x86/emulator.flat

For 64-bit tests you need the bootstrap code:

./user/kvmctl ./user/test/x86/bootstrap ./user/test/x86/emulator.flat

but emulator.c is only able to test instructions that access memory. For add acc, imm you need realmode.c.

Signature · 2 lines
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.
#5 lore raw
Quoted 11 lines · On Mon, 20 Oct 2008 10:47:07 +0200 Avi Kivity <[email protected]> wrote:
Quoted 6 lines · Guillaume Thouvenin

I added an "add imm" test case in user/test/x86/emulator.c but kvmctl doesn't start the test. I use the following command:

# ./user/kvmctl ./user/test/x86/emulator.flat

For 64-bit tests you need the bootstrap code:

./user/kvmctl ./user/test/x86/bootstrap ./user/test/x86/emulator.flat

Yes right, I've tested that too and it produced an error:

kvm_run: failed entry, reason 7
rax 0000000000004000 rbx 0000000000000000 rcx 0000000000000080 rdx 0000000000000600 rsi 0000000000000000 rdi 0000000000000000 rsp 000000000000fffe rbp 0000000000000000 r8 0000000000000000 r9 0000000000000000 r10 0000000000000000 r11 0000000000000000 r12 0000000000000000 r13 0000000000000000 r14 0000000000000000 r15 0000000000000000 rip 000000000001002a rflags 00033046
cs f000 (000f0000/0000ffff p 1 dpl 3 db 0 s 1 type 3 l 0 g 0 avl 0)
ds 0000 (00000000/0000ffff p 1 dpl 3 db 0 s 1 type 3 l 0 g 0 avl 0)
es 0000 (00000000/0000ffff p 1 dpl 3 db 0 s 1 type 3 l 0 g 0 avl 0)
ss 0000 (00000000/0000ffff p 1 dpl 3 db 0 s 1 type 3 l 0 g 0 avl 0)
fs 0000 (00000000/0000ffff p 1 dpl 3 db 0 s 1 type 3 l 0 g 0 avl 0)
gs 0000 (00000000/0000ffff p 1 dpl 3 db 0 s 1 type 3 l 0 g 0 avl 0)
tr 0000 (fffbd000/00002088 p 1 dpl 0 db 0 s 0 type b l 0 g 0 avl 0) ldt 0000 (00000000/0000ffff p 1 dpl 0 db 0 s 0 type 2 l 0 g 0 avl 0) gdt 0/0
idt 0/ffff
cr0 60000010 cr2 0 cr3 4000 cr4 20 cr8 0 efer 0

And I got the following message:

kvm: 15727: cpu0 unhandled rdmsr: 0x80

Quoted 2 lines

but emulator.c is only able to test instructions that access memory. For add acc, imm you need realmode.c.

Thanks for your help,

Regards,
Guillaume

#6 lore raw
Quoted 13 lines · Guillaume Thouvenin
Quoted 9 lines · On Mon, 20 Oct 2008 10:47:07 +0200 Avi Kivity <[email protected]> wrote:
Quoted 7 lines · Guillaume Thouvenin

I added an "add imm" test case in user/test/x86/emulator.c but kvmctl doesn't start the test. I use the following command:

# ./user/kvmctl ./user/test/x86/emulator.flat
Quoted 8 lines
Quoted 4 lines

For 64-bit tests you need the bootstrap code:

./user/kvmctl ./user/test/x86/bootstrap ./user/test/x86/emulator.flat

Yes right, I've tested that too and it produced an error:

You should probably disable invalid state emulation for this (though eventually it should work there too).

Signature · 2 lines
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.
#7 lore raw

Re: [PATCH] x86 emulator: Add decode entries for 0x04 and 0x05 opcodes

In reply to Avi Kivity

Add decode entries for 0x04 and 0x05 (ADD) opcodes, execution is already implemented.

---
 x86_emulate.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kvm/x86_emulate.c +1 -1
index a391e21..57d7cc4 100644
@@ -80,7 +80,7 @@ static u16 opcode_table[256] = {
 	/* 0x00 - 0x07 */
 	ByteOp | DstMem | SrcReg | ModRM, DstMem | SrcReg | ModRM,
 	ByteOp | DstReg | SrcMem | ModRM, DstReg | SrcMem | ModRM,
-	0, 0, 0, 0,
+	ByteOp | DstAcc | SrcImm, DstAcc | SrcImm, 0, 0,
 	/* 0x08 - 0x0F */
 	ByteOp | DstMem | SrcReg | ModRM, DstMem | SrcReg | ModRM,
 	ByteOp | DstReg | SrcMem | ModRM, DstReg | SrcMem | ModRM,
Applied
#8 lore raw

Re: [PATCH] x86 emulator: Add decode entries for 0x04 and 0x05 opcodes

Quoted 3 lines · Guillaume Thouvenin

Add decode entries for 0x04 and 0x05 (ADD) opcodes, execution is already implemented.

Applied, thanks.

Signature · 1 line
error compiling committee.c: too many arguments to function