Revision 1b530a6d
b/bsd-user/main.c | ||
---|---|---|
33 | 33 |
|
34 | 34 |
#define DEBUG_LOGFILE "/tmp/qemu.log" |
35 | 35 |
|
36 |
int singlestep; |
|
37 |
|
|
36 | 38 |
static const char *interp_prefix = CONFIG_QEMU_PREFIX; |
37 | 39 |
const char *qemu_uname_release = CONFIG_UNAME_RELEASE; |
38 | 40 |
extern char **environ; |
... | ... | |
378 | 380 |
"Debug options:\n" |
379 | 381 |
"-d options activate log (logfile=%s)\n" |
380 | 382 |
"-p pagesize set the host page size to 'pagesize'\n" |
383 |
"-singlestep always run in singlestep mode\n" |
|
381 | 384 |
"-strace log system calls\n" |
382 | 385 |
"\n" |
383 | 386 |
"Environment variables:\n" |
... | ... | |
500 | 503 |
usage(); |
501 | 504 |
} |
502 | 505 |
optind++; |
506 |
} else if (!strcmp(r, "singlestep")) { |
|
507 |
singlestep = 1; |
|
503 | 508 |
} else if (!strcmp(r, "strace")) { |
504 | 509 |
do_strace = 1; |
505 | 510 |
} else |
b/darwin-user/main.c | ||
---|---|---|
41 | 41 |
#include <mach/mach_init.h> |
42 | 42 |
#include <mach/vm_map.h> |
43 | 43 |
|
44 |
int singlestep; |
|
45 |
|
|
44 | 46 |
const char *interp_prefix = ""; |
45 | 47 |
|
46 | 48 |
asm(".zerofill __STD_PROG_ZONE, __STD_PROG_ZONE, __std_prog_zone, 0x0dfff000"); |
... | ... | |
751 | 753 |
"-d options activate log (logfile='%s')\n" |
752 | 754 |
"-g wait for gdb on port 1234\n" |
753 | 755 |
"-p pagesize set the host page size to 'pagesize'\n", |
756 |
"-singlestep always run in singlestep mode\n" |
|
754 | 757 |
TARGET_ARCH, |
755 | 758 |
TARGET_ARCH, |
756 | 759 |
interp_prefix, |
... | ... | |
842 | 845 |
#endif |
843 | 846 |
exit(1); |
844 | 847 |
} |
848 |
} else if (!strcmp(r, "singlestep")) { |
|
849 |
singlestep = 1; |
|
845 | 850 |
} else |
846 | 851 |
{ |
847 | 852 |
usage(); |
b/exec-all.h | ||
---|---|---|
384 | 384 |
typedef void (CPUDebugExcpHandler)(CPUState *env); |
385 | 385 |
|
386 | 386 |
CPUDebugExcpHandler *cpu_set_debug_excp_handler(CPUDebugExcpHandler *handler); |
387 |
|
|
388 |
/* vl.c */ |
|
389 |
extern int singlestep; |
|
390 |
|
|
387 | 391 |
#endif |
b/linux-user/main.c | ||
---|---|---|
39 | 39 |
|
40 | 40 |
char *exec_path; |
41 | 41 |
|
42 |
int singlestep; |
|
43 |
|
|
42 | 44 |
static const char *interp_prefix = CONFIG_QEMU_PREFIX; |
43 | 45 |
const char *qemu_uname_release = CONFIG_UNAME_RELEASE; |
44 | 46 |
|
... | ... | |
2217 | 2219 |
"Debug options:\n" |
2218 | 2220 |
"-d options activate log (logfile=%s)\n" |
2219 | 2221 |
"-p pagesize set the host page size to 'pagesize'\n" |
2222 |
"-singlestep always run in singlestep mode\n" |
|
2220 | 2223 |
"-strace log system calls\n" |
2221 | 2224 |
"\n" |
2222 | 2225 |
"Environment variables:\n" |
... | ... | |
2359 | 2362 |
} |
2360 | 2363 |
} else if (!strcmp(r, "drop-ld-preload")) { |
2361 | 2364 |
(void) envlist_unsetenv(envlist, "LD_PRELOAD"); |
2365 |
} else if (!strcmp(r, "singlestep")) { |
|
2366 |
singlestep = 1; |
|
2362 | 2367 |
} else if (!strcmp(r, "strace")) { |
2363 | 2368 |
do_strace = 1; |
2364 | 2369 |
} else |
b/monitor.c | ||
---|---|---|
527 | 527 |
cpu_set_log(mask); |
528 | 528 |
} |
529 | 529 |
|
530 |
static void do_singlestep(Monitor *mon, const char *option) |
|
531 |
{ |
|
532 |
if (!option || !strcmp(option, "on")) { |
|
533 |
singlestep = 1; |
|
534 |
} else if (!strcmp(option, "off")) { |
|
535 |
singlestep = 0; |
|
536 |
} else { |
|
537 |
monitor_printf(mon, "unexpected option %s\n", option); |
|
538 |
} |
|
539 |
} |
|
540 |
|
|
530 | 541 |
static void do_stop(Monitor *mon) |
531 | 542 |
{ |
532 | 543 |
vm_stop(EXCP_INTERRUPT); |
... | ... | |
1511 | 1522 |
|
1512 | 1523 |
static void do_info_status(Monitor *mon) |
1513 | 1524 |
{ |
1514 |
if (vm_running) |
|
1515 |
monitor_printf(mon, "VM status: running\n"); |
|
1516 |
else |
|
1525 |
if (vm_running) { |
|
1526 |
if (singlestep) { |
|
1527 |
monitor_printf(mon, "VM status: running (single step mode)\n"); |
|
1528 |
} else { |
|
1529 |
monitor_printf(mon, "VM status: running\n"); |
|
1530 |
} |
|
1531 |
} else |
|
1517 | 1532 |
monitor_printf(mon, "VM status: paused\n"); |
1518 | 1533 |
} |
1519 | 1534 |
|
... | ... | |
1644 | 1659 |
"tag|id", "restore a VM snapshot from its tag or id" }, |
1645 | 1660 |
{ "delvm", "s", do_delvm, |
1646 | 1661 |
"tag|id", "delete a VM snapshot from its tag or id" }, |
1662 |
{ "singlestep", "s?", do_singlestep, |
|
1663 |
"[on|off]", "run emulation in singlestep mode or switch to normal mode", }, |
|
1647 | 1664 |
{ "stop", "", do_stop, |
1648 | 1665 |
"", "stop emulation", }, |
1649 | 1666 |
{ "c|cont", "", do_cont, |
b/qemu-doc.texi | ||
---|---|---|
490 | 490 |
@item delvm @var{tag}|@var{id} |
491 | 491 |
Delete the snapshot identified by @var{tag} or @var{id}. |
492 | 492 |
|
493 |
@item singlestep [off] |
|
494 |
Run the emulation in single step mode. |
|
495 |
If called with option off, the emulation returns to normal mode. |
|
496 |
|
|
493 | 497 |
@item stop |
494 | 498 |
Stop emulation. |
495 | 499 |
|
... | ... | |
2370 | 2374 |
Act as if the host page size was 'pagesize' bytes |
2371 | 2375 |
@item -g port |
2372 | 2376 |
Wait gdb connection to port |
2377 |
@item -singlestep |
|
2378 |
Run the emulation in single step mode. |
|
2373 | 2379 |
@end table |
2374 | 2380 |
|
2375 | 2381 |
Environment variables: |
... | ... | |
2488 | 2494 |
Activate log (logfile=/tmp/qemu.log) |
2489 | 2495 |
@item -p pagesize |
2490 | 2496 |
Act as if the host page size was 'pagesize' bytes |
2497 |
@item -singlestep |
|
2498 |
Run the emulation in single step mode. |
|
2491 | 2499 |
@end table |
2492 | 2500 |
|
2493 | 2501 |
@node BSD User space emulator |
... | ... | |
2550 | 2558 |
Activate log (logfile=/tmp/qemu.log) |
2551 | 2559 |
@item -p pagesize |
2552 | 2560 |
Act as if the host page size was 'pagesize' bytes |
2561 |
@item -singlestep |
|
2562 |
Run the emulation in single step mode. |
|
2553 | 2563 |
@end table |
2554 | 2564 |
|
2555 | 2565 |
@node compilation |
b/qemu-options.hx | ||
---|---|---|
1209 | 1209 |
from a script. |
1210 | 1210 |
ETEXI |
1211 | 1211 |
|
1212 |
DEF("singlestep", 0, QEMU_OPTION_singlestep, \ |
|
1213 |
"-singlestep always run in singlestep mode\n") |
|
1214 |
STEXI |
|
1215 |
@item -singlestep |
|
1216 |
Run the emulation in single step mode. |
|
1217 |
ETEXI |
|
1218 |
|
|
1212 | 1219 |
DEF("S", 0, QEMU_OPTION_S, \ |
1213 | 1220 |
"-S freeze CPU at startup (use 'c' to start execution)\n") |
1214 | 1221 |
STEXI |
b/target-alpha/translate.c | ||
---|---|---|
2412 | 2412 |
if (env->singlestep_enabled) { |
2413 | 2413 |
gen_excp(&ctx, EXCP_DEBUG, 0); |
2414 | 2414 |
break; |
2415 |
}
|
|
2415 |
}
|
|
2416 | 2416 |
|
2417 |
#if defined (DO_SINGLE_STEP)
|
|
2418 |
break; |
|
2419 |
#endif
|
|
2417 |
if (singlestep) {
|
|
2418 |
break;
|
|
2419 |
}
|
|
2420 | 2420 |
} |
2421 | 2421 |
if (ret != 1 && ret != 3) { |
2422 | 2422 |
tcg_gen_movi_i64(cpu_pc, ctx.pc); |
b/target-arm/translate.c | ||
---|---|---|
8791 | 8791 |
num_insns ++; |
8792 | 8792 |
} while (!dc->is_jmp && gen_opc_ptr < gen_opc_end && |
8793 | 8793 |
!env->singlestep_enabled && |
8794 |
!singlestep && |
|
8794 | 8795 |
dc->pc < next_page_start && |
8795 | 8796 |
num_insns < max_insns); |
8796 | 8797 |
|
b/target-cris/translate.c | ||
---|---|---|
3272 | 3272 |
break; |
3273 | 3273 |
} while (!dc->is_jmp && !dc->cpustate_changed |
3274 | 3274 |
&& gen_opc_ptr < gen_opc_end |
3275 |
&& !singlestep |
|
3275 | 3276 |
&& (dc->pc < next_page_start) |
3276 | 3277 |
&& num_insns < max_insns); |
3277 | 3278 |
|
b/target-i386/translate.c | ||
---|---|---|
7733 | 7733 |
gen_eob(dc); |
7734 | 7734 |
break; |
7735 | 7735 |
} |
7736 |
if (singlestep) { |
|
7737 |
gen_jmp_im(pc_ptr - dc->cs_base); |
|
7738 |
gen_eob(dc); |
|
7739 |
break; |
|
7740 |
} |
|
7736 | 7741 |
} |
7737 | 7742 |
if (tb->cflags & CF_LAST_IO) |
7738 | 7743 |
gen_io_end(); |
b/target-m68k/translate.c | ||
---|---|---|
3031 | 3031 |
num_insns++; |
3032 | 3032 |
} while (!dc->is_jmp && gen_opc_ptr < gen_opc_end && |
3033 | 3033 |
!env->singlestep_enabled && |
3034 |
!singlestep && |
|
3034 | 3035 |
(pc_offset) < (TARGET_PAGE_SIZE - 32) && |
3035 | 3036 |
num_insns < max_insns); |
3036 | 3037 |
|
b/target-mips/translate.c | ||
---|---|---|
38 | 38 |
|
39 | 39 |
//#define MIPS_DEBUG_DISAS |
40 | 40 |
//#define MIPS_DEBUG_SIGN_EXTENSIONS |
41 |
//#define MIPS_SINGLE_STEP |
|
42 | 41 |
|
43 | 42 |
/* MIPS major opcodes */ |
44 | 43 |
#define MASK_OP_MAJOR(op) (op & (0x3F << 26)) |
... | ... | |
8140 | 8139 |
|
8141 | 8140 |
if (num_insns >= max_insns) |
8142 | 8141 |
break; |
8143 |
#if defined (MIPS_SINGLE_STEP) |
|
8144 |
break;
|
|
8145 |
#endif
|
|
8142 |
|
|
8143 |
if (singlestep)
|
|
8144 |
break;
|
|
8146 | 8145 |
} |
8147 | 8146 |
if (tb->cflags & CF_LAST_IO) |
8148 | 8147 |
gen_io_end(); |
b/target-ppc/translate.c | ||
---|---|---|
39 | 39 |
#define GDBSTUB_SINGLE_STEP 0x4 |
40 | 40 |
|
41 | 41 |
/* Include definitions for instructions classes and implementations flags */ |
42 |
//#define DO_SINGLE_STEP |
|
43 | 42 |
//#define PPC_DEBUG_DISAS |
44 | 43 |
//#define DO_PPC_STATISTICS |
45 | 44 |
|
... | ... | |
8288 | 8287 |
gen_exception(ctxp, POWERPC_EXCP_TRACE); |
8289 | 8288 |
} else if (unlikely(((ctx.nip & (TARGET_PAGE_SIZE - 1)) == 0) || |
8290 | 8289 |
(env->singlestep_enabled) || |
8290 |
singlestep || |
|
8291 | 8291 |
num_insns >= max_insns)) { |
8292 | 8292 |
/* if we reach a page boundary or are single stepping, stop |
8293 | 8293 |
* generation |
8294 | 8294 |
*/ |
8295 | 8295 |
break; |
8296 | 8296 |
} |
8297 |
#if defined (DO_SINGLE_STEP) |
|
8298 |
break; |
|
8299 |
#endif |
|
8300 | 8297 |
} |
8301 | 8298 |
if (tb->cflags & CF_LAST_IO) |
8302 | 8299 |
gen_io_end(); |
b/target-sh4/translate.c | ||
---|---|---|
1967 | 1967 |
break; |
1968 | 1968 |
if (num_insns >= max_insns) |
1969 | 1969 |
break; |
1970 |
#ifdef SH4_SINGLE_STEP |
|
1971 |
break; |
|
1972 |
#endif |
|
1970 |
if (singlestep) |
|
1971 |
break; |
|
1973 | 1972 |
} |
1974 | 1973 |
if (tb->cflags & CF_LAST_IO) |
1975 | 1974 |
gen_io_end(); |
b/target-sparc/translate.c | ||
---|---|---|
4838 | 4838 |
break; |
4839 | 4839 |
/* if single step mode, we generate only one instruction and |
4840 | 4840 |
generate an exception */ |
4841 |
if (env->singlestep_enabled) { |
|
4841 |
if (env->singlestep_enabled || singlestep) {
|
|
4842 | 4842 |
tcg_gen_movi_tl(cpu_pc, dc->pc); |
4843 | 4843 |
tcg_gen_exit_tb(0); |
4844 | 4844 |
break; |
b/vl.c | ||
---|---|---|
236 | 236 |
int rtc_td_hack = 0; |
237 | 237 |
#endif |
238 | 238 |
int usb_enabled = 0; |
239 |
int singlestep = 0; |
|
239 | 240 |
int smp_cpus = 1; |
240 | 241 |
const char *vnc_display; |
241 | 242 |
int acpi_enabled = 1; |
... | ... | |
4660 | 4661 |
case QEMU_OPTION_bios: |
4661 | 4662 |
bios_name = optarg; |
4662 | 4663 |
break; |
4664 |
case QEMU_OPTION_singlestep: |
|
4665 |
singlestep = 1; |
|
4666 |
break; |
|
4663 | 4667 |
case QEMU_OPTION_S: |
4664 | 4668 |
autostart = 0; |
4665 | 4669 |
break; |
Also available in: Unified diff