- 论坛徽章:
- 0
|
下面是在Linux上的修改,我用的是Gentoo,kernel2.6.11
XXXXXXXX==========================================================XXXXXXX
--- vl.c.orig 2006-02-23 21:25:25.000000000 +0800
+++ vl.c 2006-02-23 21:27:26.000000000 +0800
@@ -860,9 +860,12 @@
last_clock = ti;
}
#endif
- if (qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
- qemu_get_clock(vm_clock)) ||
- qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
+ if ((qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
+ qemu_get_clock(vm_clock))
+#ifdef CONFIG_GDBSTUB
+ &&(gdbstep == 0)
+#endif
+ )||qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
qemu_get_clock(rt_clock))) {
/* stop the cpu because a timer occured */
cpu_interrupt(global_env, CPU_INTERRUPT_EXIT);
@@ -2730,6 +2733,9 @@
#endif
if (vm_running) {
+#ifdef CONFIG_GDBSTUB
+ if(gdbstep == 0)
+#endif
qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
qemu_get_clock(vm_clock));
/* run dma transfers, if any */
XXXXX================================================================XXXX
--- gdbstub.h.orig 2006-02-23 21:25:15.000000000 +0800
+++ gdbstub.h 2006-02-23 21:29:56.000000000 +0800
@@ -8,5 +8,6 @@
void gdb_exit(CPUState *, int);
#endif
int gdbserver_start(int);
+extern int gdbstep;
#endif
XXXXXX===========================================================XXXXXXXX
--- gdbstub.c.orig 2006-02-23 21:25:09.000000000 +0800
+++ gdbstub.c 2006-02-23 21:29:34.000000000 +0800
@@ -45,6 +45,7 @@
};
/* XXX: This is not thread safe. Do we care? */
static int gdbserver_fd = -1;
+int gdbstep;
typedef struct GDBState {
enum RSState state; /* parsing state */
@@ -451,6 +452,7 @@
/* TODO: Make this return the correct value for user-mode. */
snprintf(buf, sizeof(buf), "S%02x", SIGTRAP);
put_packet(s, buf);
+ gdbstep = 0;
break;
case 'c':
if (*p != '\0') {
@@ -468,6 +470,7 @@
s->running_state = 1;
#else
vm_start();
+ gdbstep = 0;
#endif
return RS_IDLE;
case 's':
@@ -561,6 +564,7 @@
/* put empty packet */
buf[0] = '\0';
put_packet(s, buf);
+ gdbstep = 0;
break;
}
return RS_IDLE;
@@ -719,7 +723,9 @@
qemu_del_fd_read_handler(s->fd);
qemu_free(s);
vm_start();
+ gdbstep = 0;
} else {
+ gdbstep = 1;
for(i = 0; i < size; i++)
gdb_read_byte(s, cpu_single_env, buf[i]);
} |
|