免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: mingyanguo

使用GDB与QEMU调试内核时的问题分析 [复制链接]

论坛徽章:
0
发表于 2006-02-23 21:45 |显示全部楼层
下面是在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]);
     }

论坛徽章:
0
发表于 2006-02-24 09:52 |显示全部楼层
原帖由 mingyanguo 于 2006-2-23 21:45 发表
下面是在Linux上的修改,我用的是Gentoo,kernel2.6.11
XXXXXXXX==========================================================XXXXXXX
--- vl.c.orig   2006-02-23 21:25:25.000000000 +0800
+++ vl.c         ...

先谢谢兄弟! 能否diff 一个path-0.8.0.bz2以附件的方式发上来?

论坛徽章:
0
发表于 2006-02-24 10:05 |显示全部楼层
原帖由 albcamus 于 2006-2-24 09:52 发表

先谢谢兄弟! 能否diff 一个path-0.8.0.bz2以附件的方式发上来?

我刚刚看了一下0。8。0的代码,感觉很没信心,这个版本开始加入了SMP的支持,代码改动颇多,我不知道这样改还行不行。等我再看看吧。
另外,我去订邮件列表却没什么反应,发过去的mail似乎也没收到,很奇怪。

论坛徽章:
0
发表于 2006-03-01 10:20 |显示全部楼层

回复 8楼 mingyanguo 的帖子

请问楼主搞Linux多久了,玩的这么熟

论坛徽章:
0
发表于 2006-03-01 15:19 |显示全部楼层
原帖由 mslk 于 2006-3-1 10:20 发表
请问楼主搞Linux多久了,玩的这么熟

接近两年了吧。其实只是看上去很熟的样子~~~

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
发表于 2006-03-03 13:18 |显示全部楼层
原帖由 mingyanguo 于 2006-3-1 15:19 发表

接近两年了吧。其实只是看上去很熟的样子~~~


抱歉这两天忙得焦头烂额。 qemu-devel邮件列表我已经加入了, 你再试试看, 现在应该没问题了。
你的补丁程序到现在还没时间看,抱歉

论坛徽章:
0
发表于 2006-03-03 17:41 |显示全部楼层
原帖由 帅绝人寰 于 2006-3-3 13:18 发表


抱歉这两天忙得焦头烂额。 qemu-devel邮件列表我已经加入了, 你再试试看, 现在应该没问题了。
你的补丁程序到现在还没时间看,抱歉

补丁已经提交好几天了,等待回音呢。

论坛徽章:
0
发表于 2006-03-10 19:41 |显示全部楼层
很是抱歉,最近几天我在调试内核的时候发现,这个补丁虽然在FreeBSD很有效,但是在Linux下并不总是有效。有时仍然进入中断。具体原因没找出来。抱歉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP