mirror of
https://github.com/ringtailsoftware/uvm32.git
synced 2026-06-06 06:53:39 +00:00
Resume after hang (with warning)
This commit is contained in:
parent
41a94d0629
commit
de689bdeaf
1 changed files with 13 additions and 4 deletions
17
host/host.c
17
host/host.c
|
|
@ -133,16 +133,21 @@ void hexdump(const uint8_t *p, int len) {
|
|||
|
||||
int main(int argc, char *argv[]) {
|
||||
uvm32_state_t vmst;
|
||||
uint32_t max_instrs_per_run = 500000;
|
||||
clock_t start_time = clock() / (CLOCKS_PER_SEC / 1000);
|
||||
|
||||
argc--;
|
||||
argv++;
|
||||
|
||||
if (argc < 1) {
|
||||
printf("<romfile>\n");
|
||||
printf("<romfile> [max_instrs_per_run]\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (argc > 1) {
|
||||
max_instrs_per_run = strtoll(argv[1], NULL, 10);
|
||||
}
|
||||
|
||||
int romlen = 0;
|
||||
uint8_t *rom = read_file(argv[0], &romlen);
|
||||
if (NULL == rom) {
|
||||
|
|
@ -165,7 +170,7 @@ int main(int argc, char *argv[]) {
|
|||
enableRawMode();
|
||||
|
||||
while(isrunning) {
|
||||
total_instrs += uvm32_run(&vmst, &evt, 1000000); // num instructions before vm considered hung
|
||||
total_instrs += uvm32_run(&vmst, &evt, max_instrs_per_run); // num instructions before vm considered hung
|
||||
num_syscalls++;
|
||||
|
||||
switch(evt.typ) {
|
||||
|
|
@ -179,7 +184,11 @@ int main(int argc, char *argv[]) {
|
|||
break;
|
||||
case UVM32_EVT_ERR:
|
||||
printf("UVM32_EVT_ERR '%s' (%d)\n", evt.data.err.errstr, (int)evt.data.err.errcode);
|
||||
isrunning = false;
|
||||
if (evt.data.err.errcode == UVM32_ERR_HUNG) {
|
||||
printf("VM may have hung, increase max_instrs_per_run\n");
|
||||
} else {
|
||||
isrunning = false;
|
||||
}
|
||||
break;
|
||||
case UVM32_EVT_SYSCALL:
|
||||
switch((f_code_t)evt.data.syscall.code) {
|
||||
|
|
@ -190,7 +199,7 @@ int main(int argc, char *argv[]) {
|
|||
printf("%.*s\n", evt.data.syscall.val.buf.len, evt.data.syscall.val.buf.ptr);
|
||||
break;
|
||||
case F_PRINTDEC:
|
||||
printf("%d\n", evt.data.syscall.val.u32);
|
||||
printf("%d", evt.data.syscall.val.u32);
|
||||
break;
|
||||
case F_PUTC:
|
||||
printf("%c", evt.data.syscall.val.u32);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue