summaryrefslogtreecommitdiff
path: root/sys/src/9/pc/devvmx.c
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2017-06-21 22:19:14 +0000
committeraiju <devnull@localhost>2017-06-21 22:19:14 +0000
commitcabfa4e9160d0fbaec57eab5e9d264dc555e0275 (patch)
tree34ce22ee9be18e0ca2c97ca8e17b0bdcd83f4f11 /sys/src/9/pc/devvmx.c
parent5c0bff4ba204cfad7aedb8c1c20f1c29265dcb01 (diff)
devvmx: add support for extrap command to configure halting on exceptions
Diffstat (limited to 'sys/src/9/pc/devvmx.c')
-rw-r--r--sys/src/9/pc/devvmx.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/sys/src/9/pc/devvmx.c b/sys/src/9/pc/devvmx.c
index 6b86f861f..4e6e7412d 100644
--- a/sys/src/9/pc/devvmx.c
+++ b/sys/src/9/pc/devvmx.c
@@ -1445,6 +1445,18 @@ cmdirq(VmCmd *, va_list va)
return 0;
}
+static int
+cmdextrap(VmCmd *, va_list va)
+{
+ char *p, *q;
+ u32int v;
+
+ p = va_arg(va, char *);
+ v = strtoul(p, &q, 0);
+ if(q == p || *q != 0) error(Ebadarg);
+ vmcswrite(EXC_BITMAP, v);
+ return 0;
+}
static int
gotcmd(void *)
@@ -1669,6 +1681,7 @@ enum {
CMstep,
CMexc,
CMirq,
+ CMextrap,
};
static Cmdtab vmxctlmsg[] = {
@@ -1679,6 +1692,7 @@ static Cmdtab vmxctlmsg[] = {
CMstep, "step", 0,
CMexc, "exc", 2,
CMirq, "irq", 0,
+ CMextrap, "extrap", 2,
};
static int
@@ -1921,6 +1935,18 @@ vmxwrite(Chan* c, void* a, long n, vlong off)
poperror();
free(s);
break;
+ case CMextrap:
+ s = nil;
+ kstrdup(&s, cb->f[1]);
+ if(waserror()){
+ free(s);
+ nexterror();
+ }
+ vmxcmd(cmdextrap, s);
+ poperror();
+ free(s);
+ break;
+
default:
error(Egreg);
}