summaryrefslogtreecommitdiff
path: root/sys/src/cmd/vmx/exith.c
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2017-06-20 15:15:53 +0000
committeraiju <devnull@localhost>2017-06-20 15:15:53 +0000
commit164588e3e2aca1f6deac1dd4bcf962a0867a26fc (patch)
tree3d7c6acba798aebaf83223c95c21bf3c792ad5ed /sys/src/cmd/vmx/exith.c
parentbecb89bae53e01785bfd843478737eeb77a9419f (diff)
vmx(1): clean up region handling code; changes to support amd64
Diffstat (limited to 'sys/src/cmd/vmx/exith.c')
-rw-r--r--sys/src/cmd/vmx/exith.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/sys/src/cmd/vmx/exith.c b/sys/src/cmd/vmx/exith.c
index 0c27bc9bd..939763dcd 100644
--- a/sys/src/cmd/vmx/exith.c
+++ b/sys/src/cmd/vmx/exith.c
@@ -33,7 +33,7 @@ stepmmio(uvlong pa, uvlong *val, int size, ExitInfo *ei)
extern uchar *tmp;
extern uvlong tmpoff;
void *targ;
- uvlong pc, si;
+ uvlong pc;
char buf[ERRMAX];
extern int getexit;
@@ -46,7 +46,6 @@ stepmmio(uvlong pa, uvlong *val, int size, ExitInfo *ei)
case 8: *(u64int*)targ = *val; break;
}
pc = rget(RPC);
- si = rget("si");
rcflush(0);
if(ctl("step -map %#ullx vm %#ullx", pa & ~0xfff, tmpoff) < 0){
rerrstr(buf, sizeof(buf));
@@ -262,7 +261,10 @@ cpuid(ExitInfo *ei)
ax = cp->ax;
bx = 0;
cx = cp->cx & 0x121;
- dx = cp->dx & 0x04100000;
+ if(sizeof(uintptr) == 8)
+ dx = cp->dx & 0x24100800;
+ else
+ dx = cp->dx & 0x04100000;
break;
case 0x80000002: goto literal; /* brand string */
case 0x80000003: goto literal; /* brand string */
@@ -308,10 +310,6 @@ rdwrmsr(ExitInfo *ei)
if(rd) val = rget("pat");
else rset("pat", val);
break;
- case 0xC0000080:
- if(rd) val = rget("efer");
- else rset("efer", val);
- break;
case 0x8B: val = 0; break; /* microcode update */
default:
if(rd){
@@ -376,7 +374,7 @@ movcr(ExitInfo *ei)
}
break;
case 4:
- switch(ei->qual >> 4 & 3){
+ switch(q >> 4 & 3){
case 0:
vmdebug("illegal CR4 write, value %#ux", rget(x86reg[q >> 8 & 15]));
rset("cr4real", rget(x86reg[q >> 8 & 15]));