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

Hui Zhu
2010-09-04T03:42:28Z

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.

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.
>
>
>