diff options
author | aiju <devnull@localhost> | 2017-06-20 15:15:53 +0000 |
---|---|---|
committer | aiju <devnull@localhost> | 2017-06-20 15:15:53 +0000 |
commit | 164588e3e2aca1f6deac1dd4bcf962a0867a26fc (patch) | |
tree | 3d7c6acba798aebaf83223c95c21bf3c792ad5ed /sys/src/cmd/vmx/exith.c | |
parent | becb89bae53e01785bfd843478737eeb77a9419f (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.c | 14 |
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])); |