Step over the current breakpoint when restarting with "run".

This commit is contained in:
Daniel Beer 2010-07-27 16:53:44 +12:00
parent 3f6d8f91ad
commit 383013b37e
1 changed files with 24 additions and 1 deletions

View File

@ -184,9 +184,32 @@ static int cmd_run(cproc_t cp, char **arg)
{ {
device_t dev = cproc_device(cp); device_t dev = cproc_device(cp);
device_status_t status; device_status_t status;
uint16_t regs[DEVICE_NUM_REGS];
if (dev->ctl(dev, DEVICE_CTL_RUN) < 0) if (dev->getregs(dev, regs) < 0) {
fprintf(stderr, "warning: device: can't fetch registers\n");
} else {
int i;
for (i = 0; i < dev->max_breakpoints; i++) {
struct device_breakpoint *bp = &dev->breakpoints[i];
if ((bp->flags & DEVICE_BP_ENABLED) &&
bp->addr == regs[0])
break;
}
if (i < dev->max_breakpoints) {
printf("Stepping over breakpoint #%d at 0x%04x\n",
i, regs[0]);
dev->ctl(dev, DEVICE_CTL_STEP);
}
}
if (dev->ctl(dev, DEVICE_CTL_RUN) < 0) {
fprintf(stderr, "run: failed to start CPU\n");
return -1; return -1;
}
printf("Running. Press Ctrl+C to interrupt...\n"); printf("Running. Press Ctrl+C to interrupt...\n");