From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2555 invoked by alias); 4 Sep 2010 16:02:05 -0000 Received: (qmail 2369 invoked by uid 22791); 4 Sep 2010 16:02:02 -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-yx0-f169.google.com (HELO mail-yx0-f169.google.com) (209.85.213.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 04 Sep 2010 16:01:56 +0000 Received: by yxk8 with SMTP id 8so1481474yxk.0 for ; Sat, 04 Sep 2010 09:01:54 -0700 (PDT) Received: by 10.101.68.11 with SMTP id v11mr1182632ank.82.1283616114386; Sat, 04 Sep 2010 09:01:54 -0700 (PDT) Received: from [192.168.1.239] ([202.201.14.141]) by mx.google.com with ESMTPS id w10sm5027707ank.14.2010.09.04.09.01.49 (version=SSLv3 cipher=RC4-MD5); Sat, 04 Sep 2010 09:01:53 -0700 (PDT) Subject: Re: Linux Kernel GDB tracepoint module 2010-8-30 release From: Steven To: Hui Zhu Cc: "gdb@sourceware.org" , linux-kernel@vger.kernel.org, Michael Snyder , Marc Khouzam , Thiago Jung Bauermann , "Frank Ch. Eigler" In-Reply-To: References: <1283504768.2100.43.camel@steven> <1283590584.1685.39.camel@steven> <1283592366.1685.50.camel@steven> Content-Type: text/plain; charset="UTF-8" Date: Sat, 04 Sep 2010 16:02:00 -0000 Message-ID: <1283616109.1685.98.camel@steven> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit 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/msg00030.txt.bz2 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 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: ... 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 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 += -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