This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap 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]

[Bug tapsets/13074] Some nfs tapset probes broken under linux 3.1-rc1


http://sourceware.org/bugzilla/show_bug.cgi?id=13074

--- Comment #3 from David Smith <dsmith at redhat dot com> 2013-01-10 19:51:24 UTC ---
Looking at today's rawhide kernel (3.8.0-0.rc2.git3.1.fc19.x86_64), things are
even more odd:

====
# stap -L 'module("nfsv2").function("nfs_proc_lookup").*'
module("nfsv2").function("nfs_proc_lookup@fs/nfs/proc.c:148").call $arg:struct
nfs_diropargs $res:struct nfs_diropok $msg:struct rpc_message
module("nfsv2").function("nfs_proc_lookup@fs/nfs/proc.c:148").return
$return:int $arg:struct nfs_diropargs $res:struct nfs_diropok $msg:struct
rpc_message
====

Here's the source to nfs_proc_lookup. Looking at this, it appears that stap has
confused local variables for parameters:

====
static int                                                                      
nfs_proc_lookup(struct inode *dir, struct qstr *name,                           
                struct nfs_fh *fhandle, struct nfs_fattr *fattr)                
{                                                                               
        struct nfs_diropargs    arg = {                                         
                .fh             = NFS_FH(dir),                                  
                .name           = name->name,                                   
                .len            = name->len                                     
        };                                                                      
        struct nfs_diropok      res = {                                         
                .fh             = fhandle,                                      
                .fattr          = fattr                                         
        };                                                                      
        struct rpc_message msg = {                                              
                .rpc_proc       = &nfs_procedures[NFSPROC_LOOKUP],              
                .rpc_argp       = &arg,                                         
                .rpc_resp       = &res,                                         
        };                                                                      
====

Here's what "eu-readelf -N --debug-dump=info" reports for 'nfs_proc_lookup':

====
 [ 31c90]    subprogram
             name                 (strp) "nfs_proc_lookup"
             decl_file            (data1) 1
             decl_line            (data1) 148
             prototyped           (flag_present) Yes
             type                 (ref4) [ 18e99]
             low_pc               (addr) .text+0x0000000000000580
             high_pc              (addr) .text+0x000000000000063e
             frame_base           (exprloc)
              [   0] call_frame_cfa
             GNU_all_call_sites   (flag_present) Yes
             sibling              (ref4) [ 31dd5]
 [ 31cb1]      formal_parameter
               name                 (string) "dir"
               decl_file            (data1) 1
               decl_line            (data1) 148
               type                 (ref4) [ 1e9f9]
               location             (sec_offset) location list [   de7]
 [ 31cc0]      formal_parameter
               name                 (strp) "name"
               decl_file            (data1) 1
               decl_line            (data1) 148
               type                 (ref4) [ 1ed6f]
               location             (sec_offset) location list [   e5c]
 [ 31ccf]      formal_parameter
               name                 (strp) "fhandle"
               decl_file            (data1) 1
               decl_line            (data1) 149
               type                 (ref4) [ 2ed02]
               location             (sec_offset) location list [   e95]
 [ 31cde]      formal_parameter
               name                 (strp) "fattr"
               decl_file            (data1) 1
               decl_line            (data1) 149
               type                 (ref4) [ 2e617]
               location             (sec_offset) location list [   f21]
 [ 31ced]      variable
               name                 (string) "arg"
               decl_file            (data1) 1
               decl_line            (data1) 151
               type                 (ref4) [ 2f1a1]
               location             (exprloc)
                [   0] fbreg -88
 [ 31cfc]      variable
               name                 (string) "res"
               decl_file            (data1) 1
               decl_line            (data1) 156
               type                 (ref4) [ 2f2f5]
               location             (exprloc)
                [   0] fbreg -104
 [ 31d0b]      variable
               name                 (string) "msg"
               decl_file            (data1) 1
               decl_line            (data1) 160
               type                 (ref4) [ 21ea5]
               location             (exprloc)
                [   0] fbreg -64
====

Here's the relevant 'eu-readelf --debug-dump=loc' data:

====
 [   de7]  .text+0x0000000000000555
<nfs_proc_readlink+0x85>...text+0x00000000000005ab <nfs_proc_lookup+0x2b> [  
0] reg5
           .text+0x00000000000005ab
<nfs_proc_lookup+0x2b>...text+0x00000000000005d6 <nfs_proc_lookup+0x56> [   0]
reg3
           .text+0x00000000000005d6
<nfs_proc_lookup+0x56>...text+0x00000000000005e1 <nfs_proc_lookup+0x61> [   0]
GNU_entry_value:
       [   0] reg5
                                                  [   3] stack_value
           .text+0x00000000000005e1
<nfs_proc_lookup+0x61>...text+0x00000000000005fc <nfs_proc_lookup+0x7c> [   0]
reg3
           .text+0x00000000000005fc
<nfs_proc_lookup+0x7c>...text+0x000000000000060e <nfs_proc_lookup+0x8e> [   0]
GNU_entry_value:
       [   0] reg5
                                                  [   3] stack_value
 [   e5c]  .text+0x0000000000000555
<nfs_proc_readlink+0x85>...text+0x0000000000000582 <nfs_proc_lookup+0x2> [   0]
reg4
           .text+0x0000000000000582
<nfs_proc_lookup+0x2>...text+0x000000000000060e <nfs_proc_lookup+0x8e> [   0]
GNU_entry_value:
       [   0] reg4
                                                  [   3] stack_value
 [   e95]  .text+0x0000000000000555
<nfs_proc_readlink+0x85>...text+0x0000000000000577 [   0] reg1
           .text+0x0000000000000577...text+0x000000000000058e
<nfs_proc_lookup+0xe> [   0] fbreg -104
           .text+0x000000000000058e
<nfs_proc_lookup+0xe>...text+0x00000000000005ab <nfs_proc_lookup+0x2b> [   0]
breg1 0
           .text+0x00000000000005ab
<nfs_proc_lookup+0x2b>...text+0x00000000000005e1 <nfs_proc_lookup+0x61> [   0]
GNU_entry_value:
       [   0] reg1
                                                  [   3] stack_value
           .text+0x00000000000005e1
<nfs_proc_lookup+0x61>...text+0x00000000000005f5 <nfs_proc_lookup+0x75> [   0]
breg1 0
           .text+0x00000000000005f5
<nfs_proc_lookup+0x75>...text+0x000000000000060e <nfs_proc_lookup+0x8e> [   0]
GNU_entry_value:
       [   0] reg1
                                                  [   3] stack_value
           .text+0x00000000000005e1
<nfs_proc_lookup+0x61>...text+0x00000000000005f5 <nfs_proc_lookup+0x75> [   0]
breg1 0
           .text+0x00000000000005f5
<nfs_proc_lookup+0x75>...text+0x000000000000060e <nfs_proc_lookup+0x8e> [   0]
GNU_entry_value:
       [   0] reg1
                                                  [   3] stack_value
 [   f21]  .text+0x0000000000000555
<nfs_proc_readlink+0x85>...text+0x00000000000005ab <nfs_proc_lookup+0x2b> [  
0] reg2
           .text+0x00000000000005ab
<nfs_proc_lookup+0x2b>...text+0x00000000000005e1 <nfs_proc_lookup+0x61> [   0]
GNU_entry_value:
       [   0] reg2
                                                  [   3] stack_value
           .text+0x00000000000005e1
<nfs_proc_lookup+0x61>...text+0x00000000000005f5 <nfs_proc_lookup+0x75> [   0]
reg2
           .text+0x00000000000005f5
<nfs_proc_lookup+0x75>...text+0x000000000000060e <nfs_proc_lookup+0x8e> [   0]
GNU_entry_value:
       [   0] reg2
                                                  [   3] stack_value
 [   f83]  .text+0x00000000000005d6
<nfs_proc_lookup+0x56>...text+0x00000000000005d8 <nfs_proc_lookup+0x58> [   0]
reg0
           .text+0x00000000000005d8
<nfs_proc_lookup+0x58>...text+0x00000000000005df <nfs_proc_lookup+0x5f> [   0]
reg3
           .text+0x00000000000005df
<nfs_proc_lookup+0x5f>...text+0x00000000000005e1 <nfs_proc_lookup+0x61> [   0]
reg0
           .text+0x00000000000005fc
<nfs_proc_lookup+0x7c>...text+0x0000000000000607 <nfs_proc_lookup+0x87> [   0]
reg0
           .text+0x0000000000000607
<nfs_proc_lookup+0x87>...text+0x000000000000060e <nfs_proc_lookup+0x8e> [   0]
reg3
 [   ff2]  .text+0x00000000000005b3
<nfs_proc_lookup+0x33>...text+0x00000000000005d6 <nfs_proc_lookup+0x56> [   0]
reg3
           .text+0x00000000000005d6
<nfs_proc_lookup+0x56>...text+0x00000000000005e1 <nfs_proc_lookup+0x61> [   0]
GNU_entry_value:
       [   0] reg5
                                                  [   3] stack_value
           .text+0x00000000000005fc
<nfs_proc_lookup+0x7c>...text+0x000000000000060e <nfs_proc_lookup+0x8e> [   0]
GNU_entry_value:
       [   0] reg5
                                                  [   3] stack_value
====

Mark, got any thoughts as to what is going on here?

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


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