From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24016 invoked by alias); 4 Sep 2010 16:43:16 -0000 Received: (qmail 23998 invoked by uid 22791); 4 Sep 2010 16:43:14 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from mail-ww0-f43.google.com (HELO mail-ww0-f43.google.com) (74.125.82.43) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 04 Sep 2010 16:43:06 +0000 Received: by wwi14 with SMTP id 14so1826119wwi.12 for ; Sat, 04 Sep 2010 09:43:04 -0700 (PDT) Received: by 10.216.159.6 with SMTP id r6mr1128877wek.55.1283618584229; Sat, 04 Sep 2010 09:43:04 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.181.213 with HTTP; Sat, 4 Sep 2010 09:42:44 -0700 (PDT) In-Reply-To: <1283616109.1685.98.camel@steven> References: <1283504768.2100.43.camel@steven> <1283590584.1685.39.camel@steven> <1283592366.1685.50.camel@steven> <1283616109.1685.98.camel@steven> From: Hui Zhu Date: Sat, 04 Sep 2010 16:43:00 -0000 Message-ID: Subject: Re: Linux Kernel GDB tracepoint module 2010-8-30 release To: Steven Cc: "gdb@sourceware.org" , linux-kernel@vger.kernel.org, Michael Snyder , Marc Khouzam , Thiago Jung Bauermann , "Frank Ch. Eigler" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2010-09/txt/msg00032.txt.bz2 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 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: > ------------------------------------------------- > =A06 volatile struct timeval tv; > =A07 int year; > =A08 > =A09 int test_thread(void *data) > =A010 { > =A011 =A0 =A0 =A0 =A0 volatile int cnt =3D 0; > =A012 =A0 =A0 =A0 =A0 set_current_state(TASK_INTERRUPTIBLE); > =A013 =A0 =A0 =A0 =A0 schedule_timeout(1 * HZ); /* wait for the terminal = ready */ > =A014 > =A015 =A0 =A0 =A0 =A0 while(1){ > =A016 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 set_current_state(TASK_INTERRUPTIBL= E); > =A017 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if(kthread_should_stop()) break; > =A018 > =A019 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 year =3D 2010; > =A020 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 do_gettimeofday (&tv); > =A021 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 printk("\ntv_sec: %d - %d\n", (int)= tv.tv_sec, cnt); > =A022 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 cnt++; > =A023 > =A024 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 do_gettimeofday (&tv); > =A025 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 printk("tv_sec: %d - %d\n", (int)tv= .tv_sec, year); > =A026 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 cnt++; > =A027 > =A028 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 //reschedule after 5 seconds(approx= imately) > =A029 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 schedule_timeout(60 * HZ); > =A030 =A0 =A0 =A0 =A0 } > =A031 > =A032 =A0 =A0 =A0 =A0 return 0; > =A033 } > ------------------------------------------------- > > Makefile > ------------------------------------------------- > obj-m :=3D hello.o > > KERNELBUILD :=3D /lib/modules/`uname -r`/build > > default: > =A0 =A0 =A0 =A0make -C $(KERNELBUILD) M=3D$(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 > > This is free software: you are free to change and redistribute it. > There is NO WARRANTY, to the extent permitted by law. =A0Type "show > copying" > and "show warranty" for details. > This GDB was configured as "i686-pc-linux-gnu". > For bug reporting instructions, please see: > ... > 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 > =A0 =A0 =A0 =A0.text_addr =3D 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 =A00xc8b2b095 in test_thread (data=3D0x0) > at /home/steven/hello/hello.c:22 > 22 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cnt++; > (gdb) p tv > $1 =3D {tv_sec =3D 0, tv_usec =3D 0} > (gdb) p cnt > $2 =3D 0 > (gdb) p year > $3 =3D 0 > (gdb) tfind > Found trace frame 1, tracepoint 2 > 0xc8b2b0c2 =A0 =A0 =A026 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cnt++; > (gdb) p cnt > $4 =3D 0 > (gdb) p tv > $5 =3D {tv_sec =3D 0, tv_usec =3D 0} > (gdb) p year > $6 =3D 0 > ------------------------------------------------- > > Thanks, > Steven > > On Sat, 2010-09-04 at 22:58 +0800, Hui Zhu wrote: >> On Sat, Sep 4, 2010 at 17:26, Steven wrote: >> > On Sat, 2010-09-04 at 17:17 +0800, Hui Zhu wrote: >> >> On Sat, Sep 4, 2010 at 16:56, Steven 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 =A0 +=3D -O2 >> >> > to >> >> > KBUILD_CFLAGS =A0 +=3D -O0 >> >> >> >> Cool, =A0:) >> >> >> >> I try just change the compile option of readdir.c to without -O2, it >> >> works OK. =A0I 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): >> > >> > =A0 =A0 =A0 =A0-------- >> > =A0 =A0 =A0 =A0(gdb) trace vfs_readdir >> > =A0 =A0 =A0 =A0Tracepoint 3 at 0xc11756a0: file fs/readdir.c, line 24. >> > =A0 =A0 =A0 =A0(gdb) actions >> > =A0 =A0 =A0 =A0Enter actions for tracepoint 3, one per line. >> > =A0 =A0 =A0 =A0End with a line saying just "end". >> > =A0 =A0 =A0 =A0>collect *file >> > =A0 =A0 =A0 =A0>end >> > =A0 =A0 =A0 =A0(gdb) trace fs/readdir.c:29 >> > =A0 =A0 =A0 =A0Tracepoint 4 at 0xc11756ca: file fs/readdir.c, line 29. >> > =A0 =A0 =A0 =A0(gdb) actions >> > =A0 =A0 =A0 =A0Enter actions for tracepoint 4, one per line. >> > =A0 =A0 =A0 =A0End with a line saying just "end". >> > =A0 =A0 =A0 =A0>collect res >> > =A0 =A0 =A0 =A0>end >> > =A0 =A0 =A0 =A0(gdb) tstart >> > =A0 =A0 =A0 =A0(gdb) tstop >> > =A0 =A0 =A0 =A0(gdb) tfind >> > =A0 =A0 =A0 =A0Found trace frame 0, tracepoint 3 >> > =A0 =A0 =A0 =A0#0 =A00xc11756a1 in vfs_readdir (file=3D0xc7b2cf00, fil= ler=3D0, >> > =A0 =A0 =A0 =A0buf=3D0x0) >> > =A0 =A0 =A0 =A0 =A0 =A0at fs/readdir.c:24 >> > =A0 =A0 =A0 =A024 =A0 =A0 =A0 =A0 =A0 =A0 =A0struct inode *inode =3D >> > =A0 =A0 =A0 =A0file->f_path.dentry->d_inode; >> > =A0 =A0 =A0 =A0(gdb) p *file >> > =A0 =A0 =A0 =A0$4 =3D {f_u =3D {fu_list =3D {next =3D 0xc6dca500, prev= =3D 0xc7ade480}, >> > =A0 =A0 =A0 =A0fu_rcuhead =3D { >> > =A0 =A0 =A0 =A0 =A0 =A0 =A0next =3D 0xc6dca500, func =3D 0xc7ade480}},= f_path =3D {mnt =3D >> > =A0 =A0 =A0 =A00xc6c05300, >> > =A0 =A0 =A0 =A0 =A0 =A0dentry =3D 0xc761d440}, f_op =3D 0xc1709a20, f_= lock =3D {{rlock =3D >> > =A0 =A0 =A0 =A0{raw_lock =3D { >> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0slock =3D 0}}}}, f_count =3D {count= er =3D 2}, f_flags =3D >> > =A0 =A0 =A0 =A0624640, >> > =A0 =A0 =A0 =A0 =A0f_mode =3D 29, f_pos =3D 0, f_owner =3D {lock =3D {= raw_lock =3D {lock =3D >> > =A0 =A0 =A0 =A016777216}}, >> > =A0 =A0 =A0 =A0 =A0 =3D 0start =3D 0, size =3D 0, async_size =3D 0, >> > =A0 =A0 =A0 =A0 =A0 =A0ra_pages =3D 32, mmap_miss =3D 0, prev_pos =3D = -1}, f_version =3D >> > =A0 =A0 =A0 =A00, >> > =A0 =A0 =A0 =A0 =A0f_security =3D 0xc7b30120, private_data =3D 0x0, f_= ep_links =3D { >> > =A0 =A0 =A0 =A0 =A0 =A0next =3D 0xc7b2cf74, prev =3D 0xc7b2cf74}, f_ma= pping =3D >> > =A0 =A0 =A0 =A00xc761c74c} >> > =A0 =A0 =A0 =A0(gdb) p res >> > =A0 =A0 =A0 =A0$5 =3D 0 >> > =A0 =A0 =A0 =A0(gdb) tfind >> > =A0 =A0 =A0 =A0Found trace frame 1, tracepoint 4 >> > =A0 =A0 =A0 =A00xc11756cb =A0 =A0 =A029 =A0 =A0 =A0 =A0 =A0 =A0 =A0res= =3D >> > =A0 =A0 =A0 =A0security_file_permission(file, MAY_READ); >> > =A0 =A0 =A0 =A0(gdb) p res >> > =A0 =A0 =A0 =A0$6 =3D -20 >> > =A0 =A0 =A0 =A0-------- >> > >> > >> > >> >> Great. =A0:) >> >> Hui > >