From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754087Ab0IDQB5 (ORCPT ); Sat, 4 Sep 2010 12:01:57 -0400 Received: from mail-gw0-f46.google.com ([74.125.83.46]:47508 "EHLO mail-gw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753959Ab0IDQBz (ORCPT ); Sat, 4 Sep 2010 12:01:55 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:cc:in-reply-to:references:content-type:date :message-id:mime-version:x-mailer:content-transfer-encoding; b=ZprvUHX4ir57LteDDdcnljlb20dEGDPOqFPOsVcPnn6/R2PFZY+dpVpGDLgO9TPDZM ekA13Bchf2AgED9Ra9FOxd+WIVR51SJb5dAijGx6TedAXvP6D4M1XC8cSndj4nIZ/fKv 8V8LRsRwnJk6COidCuvOSXTcFmag0DpKoEAlw= 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: Sun, 05 Sep 2010 00:01:49 +0800 Message-ID: <1283616109.1685.98.camel@steven> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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