Re: Linux Kernel GDB tracepoint module 2010-8-30 release

Hui Zhu
2010-09-04T07:48:16Z

On Sat, Sep 4, 2010 at 11:41, Hui Zhu <teawater@gmail.com> wrote:
> Hi Steven,
>
> On Fri, Sep 3, 2010 at 17:06, Steven <mqyoung@gmail.com> wrote:
>> Dear Hui,
>>
>> I encountered two issue when I use your GTP.
>>
>> 1) Following your HOWTO, I collect the two variables jiffies_64(global),
>> *file(argument), the result are as following, where you may see
>> jiffies_64 = 4298520928, that's OK, but the members of *file are all 0.
>> What's the problem? Thank you very much!
>>        -------------------------------------------------------------------
>>        (gdb) trace vfs_readdir
>>        Tracepoint 3 at 0xc1175690: file fs/readdir.c, line 23.
>>        (gdb) actions
>>        Enter actions for tracepoint 3, one per line.
>>        End with a line saying just "end".
>>        > collect jiffies_64
>>        > collect *file
>>        > end
>>        (gdb) tstart
>>        (gdb) tstop
>>        (gdb) tfind
>>        #0  0xc1175691 i (file=0x0, filler=0, buf=0x0) at
>>        fs/readdir.c:23
>>        23      {
>>        (gdb) p jiffies_64
>>        $7 = 4298520928
>>        (gdb) p *file
>>        $8 = {f_u = {fu_list = {next = 0x0, prev = 0x0}, fu_rcuhead =
>>        {next = 0x0, func = 0}}, f_path = {mnt = 0x0, dentry = 0x0},
>>        f_op = 0x0, f_lock = {{ rlock = {raw_lock = {slock = 0}}}},
>>        f_count = {counter = 0}, f_flags = 0, f_mode = 0, f_pos = 0,
>>        f_owner = {lock = {raw_lock = { lock = 0}}, pid = 0x0, pid_type
>>        = PIDTYPE_PID, uid = 0, euid = 0, signum = 0}, f_cred = 0x0,
>>        f_ra = {stra_pages = 00, f_security = 0x0, private_data = 0x0,
>>        f_ep_links = {next = 0x0, prev = 0x0}, f_mapping = 0x0}
>>        -------------------------------------------------------------------
>>
>
> It looks like a old bug that I have fixed in new version.
> I try it in 20100830 version cannot reproduce this issue:
> (gdb) target remote /proc/gtp
> Remote debugging using /proc/gtp
> 0x0000000000000000 in ?? ()
> (gdb) trace vfs_readdir
> Tracepoint 1 at 0xffffffff81147d3c: file
> /home/teawater/kernel/linux-2.6/fs/readdir.c, line 24.
> (gdb) actions
> Enter actions for tracepoint 1, one per line.
> End with a line saying just "end".
>>collect jiffies_64
>>collect *file
>>end
> (gdb) tstart
> (gdb) sh
> sharedlibrary  shell          show
> (gdb) shell ls
> 2      block    firmware  i        ipc     Makefile         modules.order
> scripts   source          t~    vmlinux
> a.out  crypto   fs        include  kernel  mm               Module.symvers  security
> System.map  usr vmlinux.o
> arch   drivers  gdb.txt   init     lib     modules.builtin  net
> sound     t               virt
> (gdb) tstop
> (gdb) tfind
> Found trace frame 0, tracepoint 1
> #0  0xffffffff81147d3d in vfs_readdir (file=0xffff88007b22bcc0,
> filler=0xffffffff81147ba0 <filldir>, buf=0xffff88006cc31f38)
>    at /home/teawater/kernel/linux-2.6/fs/readdir.c:24
> 24      {
> (gdb) p jiffies_64
> $1 = 4295113995
> (gdb) p *file
> $2 = {f_u = {fu_list = {next = 0xffff88007b22b480, prev =
> 0xffffe8ffffc86960}, fu_rcuhead = {next = 0xffff88007b22b480,
>      func = 0xffffe8ffffc86960}}, f_path = {mnt = 0xffff880037bd6b00,
> dentry = 0xffff88007e15b6c0}, f_op = 0xffffffff81622b00, f_lock = {{
>      rlock = {raw_lock = {slock = 0}}}}, f_sb_list_cpu = 1, f_count =
> {counter = 2}, f_flags = 624640, f_mode = 29, f_pos = 0, f_owner = {
>    lock = {raw_lock = {lock = 16777216}}, pid = 0x0, pid_type =
> PIDTYPE_PID, uid = 0, euid = 0, signum = 0}, f_cred =
> 0xffff88007ae6f780,
>  f_ra = {start = 0, size = 0, async_size = 0, ra_pages = 32,
> mmap_miss = 0, prev_pos = -1}, f_version = 0, f_security = 0x0,
>  private_data = 0x0, f_ep_links = {next = 0xffff88007b22bd68, prev =
> 0xffff88007b22bd68}, f_mapping = 0xffff880036662590}
>
>
> Could you try the new version?  I think it will work OK.
>
> If you still meet this issue, maybe you can try with the new GDB from
> http://www.gnu.org/software/gdb/download/ANNOUNCEMENT
>
>
>>
>> 2) I can not collect local variable, despite I rebuild the kernel with
>> -O0 optimization option. what is the problem? Many thanks
>>        -------------------------------------------------------------------
>>        (gdb) trace fs/readdir.c:29
>>        Tracepoint 2 at 0xc11756ca: file fs/readdir.c, line 29.
>>        (gdb) actions
>>        Enter actions for tracepoint 2, one per line.
>>        End with a line saying just "end".
>>        > collect res
>>        > end
>>        (gdb) tstart
>>        res: don't know symbol class 20
>
> This error is from GDB, I think it's a GDB bug, I will try to find out
> the root cause.
>
> BTW, looks GCC and GDB don't want handle the optimization debug
> trouble (all they want is rewrite the GCC in C++ :P).
> So I think make linux kernel can close optimization is better idea, do
> you know some way or some patch to do it?
>
>
> The MIPS support that you interest is check in to the KGTP truck.  I
> just try it with a mips32el board.
> To cross-compile it, you need set the CROSS_COMPILE ,KERNELDIR and
> ARCH in Makefile.

Forgot 1 thing, if you want remote debug the MIPS board, you can use
call netcat in board for example:
nc -l -p 1234 < /proc/gtp > /proc/gtp

And debug with GDB command:
target remote board_ip:1234

Thanks,
Hui

>
> Thanks,
> Hui
>
>
>
>
>
>>        -------------------------------------------------------------------
>>
>>        Code fragment of readdir.c
>>        -------------------------------------------------------------------
>>         22 int vfs_readdir(struct file *file, filldir_t filler, void
>>        *buf)
>>         23 {
>>         24         struct inode *inode = file->f_path.dentry->d_inode;
>>         25         int res = -ENOTDIR;
>>         26         if (!file->f_op || !file->f_op->readdir)
>>         27                 goto out;
>>         28
>>         29         res = security_file_permission(file, MAY_READ);
>>         30         if (res)
>>         31                 goto out;
>>        -------------------------------------------------------------------
>>
>> Best Regards,
>> Steven
>>
>>
>> On Mon, 2010-08-30 at 15:00 +0800, Hui Zhu wrote:
>>> http://kgtp.googlecode.com/files/kgtp_20100830.tar.bz2
>>> or
>>> svn co https://kgtp.googlecode.com/svn/tags/20100830
>>> to get it.
>>>
>>> Fix bug in ref16, ref32, ref64 in issue
>>> https://code.google.com/p/kgtp/issues/detail?id=2
>>> Fix bug that disable some tracepoint will make "tstart" get error.
>>>
>>> Support qtstatus. Then KGTP support GDB command "tstatus".
>>> Add support for "make install" and "make uninstall".
>>> Add support for qtro. Fix a bug about GTP_GDBRSP_REG_SIZE.
>>>
>>> Change gtp_list make it more efficient.
>>>
>>> Please goto http://code.google.com/p/kgtp/wiki/HOWTO to get more info
>>> about how to use KGTP.
>>
>>
>>
>