diff options
author | aiju <devnull@localhost> | 2017-06-21 22:19:14 +0000 |
---|---|---|
committer | aiju <devnull@localhost> | 2017-06-21 22:19:14 +0000 |
commit | cabfa4e9160d0fbaec57eab5e9d264dc555e0275 (patch) | |
tree | 34ce22ee9be18e0ca2c97ca8e17b0bdcd83f4f11 /sys/src/9/pc/devvmx.c | |
parent | 5c0bff4ba204cfad7aedb8c1c20f1c29265dcb01 (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.c | 26 |
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); } |