This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Could you post the other part of this code?  Then I can try to reproduce on it.

Thanks,
Hui

On Sun, Sep 5, 2010 at 00:01, Steven <mqyoung@gmail.com> wrote:
> Dear All,
>
> As I mentioned before, I could collect the variables of kernel function
> such as vfs_readdir(ext3 is built in kernel not module). And I tried I
> could collect variables of kernel's module(such as my ethernet card
> driver 3c59x.ko). I will collect these info later.
>
> BUT, I can not collect the value of my testing module, neither global
> nor local. I think there is some thing wrong with my compile option or
> Makefile, any one know it? Thanks very much.
>
> Program:
> -------------------------------------------------
> ?6 volatile struct timeval tv;
> ?7 int year;
> ?8
> ?9 int test_thread(void *data)
> ?10 {
> ?11 ? ? ? ? volatile int cnt = 0;
> ?12 ? ? ? ? set_current_state(TASK_INTERRUPTIBLE);
> ?13 ? ? ? ? schedule_timeout(1 * HZ); /* wait for the terminal ready */
> ?14
> ?15 ? ? ? ? while(1){
> ?16 ? ? ? ? ? ? ? ? set_current_state(TASK_INTERRUPTIBLE);
> ?17 ? ? ? ? ? ? ? ? if(kthread_should_stop()) break;
> ?18
> ?19 ? ? ? ? ? ? ? ? year = 2010;
> ?20 ? ? ? ? ? ? ? ? do_gettimeofday (&tv);
> ?21 ? ? ? ? ? ? ? ? printk("\ntv_sec: %d - %d\n", (int)tv.tv_sec, cnt);
> ?22 ? ? ? ? ? ? ? ? cnt++;
> ?23
> ?24 ? ? ? ? ? ? ? ? do_gettimeofday (&tv);
> ?25 ? ? ? ? ? ? ? ? printk("tv_sec: %d - %d\n", (int)tv.tv_sec, year);
> ?26 ? ? ? ? ? ? ? ? cnt++;
> ?27
> ?28 ? ? ? ? ? ? ? ? //reschedule after 5 seconds(approximately)
> ?29 ? ? ? ? ? ? ? ? schedule_timeout(60 * HZ);
> ?30 ? ? ? ? }
> ?31
> ?32 ? ? ? ? return 0;
> ?33 }
> -------------------------------------------------
>
> Makefile
> -------------------------------------------------
> obj-m := hello.o
>
> KERNELBUILD := /lib/modules/`uname -r`/build
>
> default:
> ? ? ? ?make -C $(KERNELBUILD) M=$(shell pwd) modules
> -------------------------------------------------
>
>
> Screen log
> -------------------------------------------------
> debian:/home/linux-2.6.33.6# /usr/local/bin/gdb vmlinux
> GNU gdb (GDB) 7.2
> Copyright (C) 2010 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 "i686-pc-linux-gnu".
> For bug reporting instructions, please see:
> <http://www.gnu.org/software/gdb/bugs/>...
> Reading symbols from /home/linux-2.6.33.6/vmlinux...[ 3909.310118]
> [ 3909.310124] tv_sec: 1283648666 - 16
> [ 3909.315385] tv_sec: 1283648666 - 2010
> done.
> (gdb) target remote /proc/gtp
> Remote debugging using /proc/gtp
> 0x00000000 in ?? ()
> (gdb) add-symbol-file /home/steven/hello/hello.ko 0xc8b2b000
> add symbol table from file "/home/steven/hello/hello.ko" at
> ? ? ? ?.text_addr = 0xc8b2b000
> (y or n) y
> Reading symbols from /home/steven/hello/hello.ko...done.
> (gdb) trace /home/steven/hello/hello.c:22
> Tracepoint 1 at 0xc8b2b094: file /home/steven/hello/hello.c, line 22.
> (gdb) trace /home/steven/hello/hello.c:26
> Tracepoint 2 at 0xc8b2b0c1: file /home/steven/hello/hello.c, line 26.
> (gdb) actions 1
> Enter actions for tracepoint 1, one per line.
> End with a line saying just "end".
>>
>>collect tv, year, cnt
>>end
> (gdb) actions 2
> Enter actions for tracepoint 2, one per line.
> End with a line saying just "end".
>>collect tv, year, cnt
>>end
> (gdb) tstart
> [ 4029.328129]
> [ 4029.328136] tv_sec: 1283648786 - 20
> [ 4029.333456] tv_sec: 1283648786 - 2010
> tstop
> (gdb) tfind
> Found trace frame 0, tracepoint 1
> #0 ?0xc8b2b095 in test_thread (data=0x0)
> at /home/steven/hello/hello.c:22
> 22 ? ? ? ? ? ? ? ? ? ? ?cnt++;
> (gdb) p tv
> $1 = {tv_sec = 0, tv_usec = 0}
> (gdb) p cnt
> $2 = 0
> (gdb) p year
> $3 = 0
> (gdb) tfind
> Found trace frame 1, tracepoint 2
> 0xc8b2b0c2 ? ? ?26 ? ? ? ? ? ? ? ? ? ? ?cnt++;
> (gdb) p cnt
> $4 = 0
> (gdb) p tv
> $5 = {tv_sec = 0, tv_usec = 0}
> (gdb) p year
> $6 = 0
> -------------------------------------------------
>
> Thanks,
> Steven
>
> On Sat, 2010-09-04 at 22:58 +0800, Hui Zhu wrote:
>> On Sat, Sep 4, 2010 at 17:26, Steven <mqyoung@gmail.com> wrote:
>> > On Sat, 2010-09-04 at 17:17 +0800, Hui Zhu wrote:
>> >> On Sat, Sep 4, 2010 at 16:56, Steven <mqyoung@gmail.com> wrote:
>> >> > On Sat, 2010-09-04 at 11:41 +0800, Hui Zhu wrote:
>> >> >> 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?
>> >> >>
>> >> >
>> >> > Just disable CONFIG_CC_OPTIMIZE_FOR_SIZE and modify the Makefile of
>> >> > kernel:
>> >> > KBUILD_CFLAGS ? += -O2
>> >> > to
>> >> > KBUILD_CFLAGS ? += -O0
>> >>
>> >> Cool, ?:)
>> >>
>> >> I try just change the compile option of readdir.c to without -O2, it
>> >> works OK. ?I think maybe it's a GDB bug too.
>> >> Could you try the second issue with gdb 7.2?
>> >
>> > I have covered the two issues in the previous mail that I could collect
>> > both global variables and locals(-O0 kernel + gdb7.2):
>> >
>> > ? ? ? ?--------
>> > ? ? ? ?(gdb) trace vfs_readdir
>> > ? ? ? ?Tracepoint 3 at 0xc11756a0: file fs/readdir.c, line 24.
>> > ? ? ? ?(gdb) actions
>> > ? ? ? ?Enter actions for tracepoint 3, one per line.
>> > ? ? ? ?End with a line saying just "end".
>> > ? ? ? ?>collect *file
>> > ? ? ? ?>end
>> > ? ? ? ?(gdb) trace fs/readdir.c:29
>> > ? ? ? ?Tracepoint 4 at 0xc11756ca: file fs/readdir.c, line 29.
>> > ? ? ? ?(gdb) actions
>> > ? ? ? ?Enter actions for tracepoint 4, one per line.
>> > ? ? ? ?End with a line saying just "end".
>> > ? ? ? ?>collect res
>> > ? ? ? ?>end
>> > ? ? ? ?(gdb) tstart
>> > ? ? ? ?(gdb) tstop
>> > ? ? ? ?(gdb) tfind
>> > ? ? ? ?Found trace frame 0, tracepoint 3
>> > ? ? ? ?#0 ?0xc11756a1 in vfs_readdir (file=0xc7b2cf00, filler=0,
>> > ? ? ? ?buf=0x0)
>> > ? ? ? ? ? ?at fs/readdir.c:24
>> > ? ? ? ?24 ? ? ? ? ? ? ?struct inode *inode =
>> > ? ? ? ?file->f_path.dentry->d_inode;
>> > ? ? ? ?(gdb) p *file
>> > ? ? ? ?$4 = {f_u = {fu_list = {next = 0xc6dca500, prev = 0xc7ade480},
>> > ? ? ? ?fu_rcuhead = {
>> > ? ? ? ? ? ? ?next = 0xc6dca500, func = 0xc7ade480}}, f_path = {mnt =
>> > ? ? ? ?0xc6c05300,
>> > ? ? ? ? ? ?dentry = 0xc761d440}, f_op = 0xc1709a20, f_lock = {{rlock =
>> > ? ? ? ?{raw_lock = {
>> > ? ? ? ? ? ? ? ? ?slock = 0}}}}, f_count = {counter = 2}, f_flags =
>> > ? ? ? ?624640,
>> > ? ? ? ? ?f_mode = 29, f_pos = 0, f_owner = {lock = {raw_lock = {lock =
>> > ? ? ? ?16777216}},
>> > ? ? ? ? ? = 0start = 0, size = 0, async_size = 0,
>> > ? ? ? ? ? ?ra_pages = 32, mmap_miss = 0, prev_pos = -1}, f_version =
>> > ? ? ? ?0,
>> > ? ? ? ? ?f_security = 0xc7b30120, private_data = 0x0, f_ep_links = {
>> > ? ? ? ? ? ?next = 0xc7b2cf74, prev = 0xc7b2cf74}, f_mapping =
>> > ? ? ? ?0xc761c74c}
>> > ? ? ? ?(gdb) p res
>> > ? ? ? ?$5 = 0
>> > ? ? ? ?(gdb) tfind
>> > ? ? ? ?Found trace frame 1, tracepoint 4
>> > ? ? ? ?0xc11756cb ? ? ?29 ? ? ? ? ? ? ?res =
>> > ? ? ? ?security_file_permission(file, MAY_READ);
>> > ? ? ? ?(gdb) p res
>> > ? ? ? ?$6 = -20
>> > ? ? ? ?--------
>> >
>> >
>> >
>>
>> Great. ?:)
>>
>> Hui
>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]