Re: Linux Kernel GDB tracepoint module 2010-8-30 release
From: Hui Zhu
Date: Sat Sep 04 2010 - 03:48:16 EST
On Sat, Sep 4, 2010 at 11:41, Hui Zhu <teawater@xxxxxxxxx> wrote:
> Hi Steven,
>
> On Fri, Sep 3, 2010 at 17:06, Steven <mqyoung@xxxxxxxxx> 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.
>>
>>
>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/