[hellogcc] Re: [hellogcc] Re: [hellogcc] Re: 从launchpad PPA取得最新版本GDB

  • From: Dongdong Deng <libfetion@xxxxxxxxx>
  • To: Li Yu <raise.sail@xxxxxxxxx>
  • Date: Wed, 15 Jun 2011 15:18:32 +0800

印象中是在2.6.38以后的版本中是没这个问题,其中有些稳定版内核(2.6.32/35)也打上了那个patch.

LiYu 可以检查下你的内核是否有这个patch.


Dongdong



我给个2.6.27内核的patch:

2.6.27.59-stable review patch.  If anyone has any objections, please
let us know.

------------------

From: Jason Wessel <jason.wessel@xxxxxxxxxxxxx>

commit fb82c0ff27b2c40c6f7a3d1a94cafb154591fa80 upstream.

The gdbserial protocol handler should return an empty packet instead
of an error string when ever it responds to a command it does not
implement.

The problem cases come from a debugger client sending
qTBuffer, qTStatus, qSearch, qSupported.

The incorrect response from the gdbstub leads the debugger clients to
not function correctly.  Recent versions of gdb will not detach
correctly as a result of this behavior.

Backport-request-by: Frank Pan <frankpzh@xxxxxxxxx>
Signed-off-by: Jason Wessel <jason.wessel@xxxxxxxxxxxxx>
Signed-off-by: Dongdong Deng <dongdong.deng@xxxxxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>


---
 kernel/kgdb.c |    9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

--- a/kernel/kgdb.c
+++ b/kernel/kgdb.c
@@ -1001,10 +1001,8 @@ static void gdb_cmd_query(struct kgdb_st
       switch (remcom_in_buffer[1]) {
       case 's':
       case 'f':
-               if (memcmp(remcom_in_buffer + 2, "ThreadInfo", 10)) {
-                       error_packet(remcom_out_buffer, -EINVAL);
+               if (memcmp(remcom_in_buffer + 2, "ThreadInfo", 10))
                       break;
-               }

               i = 0;
               remcom_out_buffer[0] = 'm';
@@ -1045,10 +1043,9 @@ static void gdb_cmd_query(struct kgdb_st
               pack_threadid(remcom_out_buffer + 2, thref);
               break;
       case 'T':
-               if (memcmp(remcom_in_buffer + 1, "ThreadExtraInfo,", 16)) {
-                       error_packet(remcom_out_buffer, -EINVAL);
+               if (memcmp(remcom_in_buffer + 1, "ThreadExtraInfo,", 16))
                       break;
-               }
+
               ks->threadid = 0;
               ptr = remcom_in_buffer + 17;
               kgdb_hex2long(&ptr, &ks->threadid);



2011/6/15 Li Yu <raise.sail@xxxxxxxxx>:
>
> 呵呵,谢谢~
>
> 2.6.32-131.2.1.x86_64
>
> Yu
>
> 于 2011年06月15日 14:10, Hui Zhu 写道:
>> 貌似是个互相不兼容造成的诡异BUG KGDB在遇到自己不支持的包的时候 没有按照标准回空啊
>>
>> 能不能告诉一下我 "uname  -r" 后的版本号
>>
>> Dongdong, 能帮我看下kgdb是否现在还有这个问题么?
>>
>> 不过不管是哪边的问题,回头我会专门为这个问题发的PATCH并且集成到PPA里。多谢汇报。
>>
>> Hui
>>
>> 2011/6/15 Li Yu <raise.sail@xxxxxxxxx>:
>>> $ sudo gdb-7.3 vmlinux
>>> GNU gdb (GDB) 7.2.90.20110607-cvs-ubuntu
>>> Copyright (C) 2011 Free Software Foundation, Inc.
>>> License GPLv3+: GNU GPL version 3 or later 
>>> <http://gnu.org/licenses/gpl.html>
>>> This is free software: you are free to change and redistribute it.
>>> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
>>> and "show warranty" for details.
>>> This GDB was configured as "x86_64-linux-gnu".
>>> For bug reporting instructions, please see:
>>> <http://www.gnu.org/software/gdb/bugs/>...
>>> Reading symbols from 
>>> /tmp/1/home/sailor/src/linux-2.6.32-131.2.1.el6.x86_64.orig/vmlinux...done.
>>> (gdb) set remotebaud 115200
>>> (gdb) set debug remote 1
>>> (gdb) target remote /dev/ttyUSB0
>>> Remote debugging using /dev/ttyUSB0
>>> Sending packet: $qSupported:xmlRegisters=i386;qRelocInsn+#25...Ack
>>> Packet received:
>>> Packet qSupported (supported-packets) is NOT supported
>>> Sending packet: $Hg0#df...Ack
>>> Packet received: OK
>>> Sending packet: $?#3f...Ack
>>> Packet received: S05
>>> Sending packet: $Hc-1#09...Ack
>>> Packet received: OK
>>> Sending packet: $qC#b4...Ack
>>> Packet received: QC0000000000002309
>>> Sending packet: $qAttached#8f...Ack
>>> Packet received:
>>> Packet qAttached (query-attached) is NOT supported
>>> Sending packet: $qOffsets#4b...Ack
>>> Packet received:
>>> Sending packet: $g#67...Ack
>>> Packet received: 
>>> 2300000000000000e08e7381ffffffff0353000000000000000000000000000046000000000000004600000000000000585e9c6b0088ffff585e9c6b0088ffff0000000000000000c0e98881ffffffff000000000000000001000000000000000000000000000000670000000000000000000000000000000600000000000000f7cc0c81ffffffff960000001000000018000000
>>> Sending packet: $mffffffff810cccf7,1#59...Ack
>>> Packet received: 0f
>>> Sending packet: $mffffffff810cccf7,1#59...Ack
>>> Packet received: 0f
>>> kgdb_breakpoint () at kernel/kgdb.c:1721
>>> 1721            wmb(); /* Sync point after breakpoint */
>>> Sending packet: $qSymbol::#5b...Ack
>>> Packet received:
>>> Packet qSymbol (symbol-lookup) is NOT supported
>>> Sending packet: $qTStatus#49...Ack
>>> Packet received: E22
>>> trace API error 0x2.
>>> (gdb) bt
>>> No stack.
>>> (gdb)
>>>
>>> 内核是RHEL6u1的内核(可以从redhat的FTP下载到源码包),在RHEL5u4上编译的,加了一些补丁,但这些补丁没有改内核的核心部分,多是一些驱动的,都与kgdb无关。
>>>
>>> Yu
>>>
>>> 于 2011年06月15日 13:20, Hui Zhu 写道:
>>>> 能贴出点详细信息么
>>>>
>>>> 比如你用什么kernel
>>>>
>>>> 在连以前 先用一下 set debug remote 1
>>>>
>>>> 然后再连一下 把输出的信息贴一下 多谢
>>>>
>>>> 2011/6/15 Li Yu <raise.sail@xxxxxxxxx>:
>>>>>
>>>>> 应该是没有的,它只是一个gdbserver in kernel吧,我看代码里也没有什么处理tracepoint的地方。
>>>>> 我用target remote /dev/ttyUSB0,之后就出了这么个提示,这时gdb并没有attach上remote target。
>>>>>
>>>>> 但ubuntu 10.04自己带的gdb是OK的。
>>>>>
>>>>> Yu
>>>>>
>>>>> 于 2011年06月15日 11:44, Hui Zhu 写道:
>>>>>> KGDB有trace功能?
>>>>>>
>>>>>> 2011/6/15 Li Yu <raise.sail@xxxxxxxxx>:
>>>>>>>
>>>>>>> 试了试用gdb-7.3/ubuntu-10.04,对RHEL6u1的内核做KGDB,不工作。。。。。。
>>>>>>>
>>>>>>> 提示:trace API error 0x2.
>>>>>>>
>>>>>>> Yu
>>>>>>>
>>>>>>> 于 2011年06月05日 07:04, Hui Zhu 写道:
>>>>>>>> 我倒是不介意同样也弄个fc的 不过不知道FC有没有类似ubuntu ppa这种东西
>>>>>>>>
>>>>>>>> 2011/6/4 PcX <xunxun1982@xxxxxxxxx>:
>>>>>>>>> 于 2011/6/4 22:35, Hui Zhu 写道:
>>>>>>>>>
>>>>>>>>> GDB和UBUNTU用户们你们好,
>>>>>>>>>
>>>>>>>>> 也许你还在用7.2或者更老版本的GDB,这里面BUG成堆压根没人管了,或者很好用的GDB新功能你也用不上.
>>>>>>>>> 或者你要同时在好几个体系结构上工作例如ARM和MIPS,而你要针对每个体系结构编译一个GDB.
>>>>>>>>>
>>>>>>>>> 我开始在launchpad PPA上发布UBUNTU 10.04, 10.10, 11.04,
>>>>>>>>> 11.10(8.04还有点问题)可用的最新版本的GDB(7.3 和 7.3.5).
>>>>>>>>> 这些GDB的特点是:
>>>>>>>>> 1. GDB maintainer天天更新他们,他们有最新的功能和更快的BUG修复速度.
>>>>>>>>> 2. 他们都用"--enable-targets=all
>>>>>>>>> --enable-64-bit-bfd"选项编译,所以他们支持GDB支持的所有体系结构,你可以本地调试也可以随时用他们调试远程的其他体系结构的程序.
>>>>>>>>> 3. 包名是"gdb-7.3" 和 "gdb-trunk"而 GDB程序的名称是"gdb-7.3"和 "gdb-7.3.5".
>>>>>>>>> 所以其不会影响你原来安装的GDB, 如果你在使用新版GDB的时候出现问题,随时可以换回老版本的GDB.
>>>>>>>>>
>>>>>>>>> 取得他们请访问下面的URL:
>>>>>>>>> https://launchpad.net/~teawater/+archive/gdb-10.04
>>>>>>>>> https://launchpad.net/~teawater/+archive/gdb-10.10
>>>>>>>>> https://launchpad.net/~teawater/+archive/gdb-11.04
>>>>>>>>> https://launchpad.net/~teawater/+archive/gdb-11.10
>>>>>>>>>
>>>>>>>>> 谢谢,
>>>>>>>>> teawater
>>>>>>>>>
>>>>>>>>> 支持
>>>>>>>>> 可惜我在用Fedora......
>>>>>>>>>
>>>>>>>
>>>>>
>>>
>

Other related posts: